import { n as __exportAll } from "./rolldown-runtime-DC62tzP2.js"; //#region node_modules/tslib/tslib.es6.js /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) { d.__proto__ = b; } || function(d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } //#endregion //#region node_modules/zrender/lib/core/env.js var Browser = function() { function Browser() { this.firefox = false; this.ie = false; this.edge = false; this.newEdge = false; this.weChat = false; } return Browser; }(); var env = new (function() { function Env() { this.browser = new Browser(); this.node = false; this.wxa = false; this.worker = false; this.svgSupported = false; this.touchEventsSupported = false; this.pointerEventsSupported = false; this.domSupported = false; this.transformSupported = false; this.transform3dSupported = false; this.hasGlobalWindow = typeof window !== "undefined"; } return Env; }())(); if (typeof wx === "object" && typeof wx.getSystemInfoSync === "function") { env.wxa = true; env.touchEventsSupported = true; } else if (typeof document === "undefined" && typeof self !== "undefined") env.worker = true; else if (!env.hasGlobalWindow || "Deno" in window || typeof navigator !== "undefined" && typeof navigator.userAgent === "string" && navigator.userAgent.indexOf("Node.js") > -1) { env.node = true; env.svgSupported = true; } else detect(navigator.userAgent, env); function detect(ua, env) { var browser = env.browser; var firefox = ua.match(/Firefox\/([\d.]+)/); var ie = ua.match(/MSIE\s([\d.]+)/) || ua.match(/Trident\/.+?rv:(([\d.]+))/); var edge = ua.match(/Edge?\/([\d.]+)/); var weChat = /micromessenger/i.test(ua); if (firefox) { browser.firefox = true; browser.version = firefox[1]; } if (ie) { browser.ie = true; browser.version = ie[1]; } if (edge) { browser.edge = true; browser.version = edge[1]; browser.newEdge = +edge[1].split(".")[0] > 18; } if (weChat) browser.weChat = true; env.svgSupported = typeof SVGRect !== "undefined"; env.touchEventsSupported = "ontouchstart" in window && !browser.ie && !browser.edge; env.pointerEventsSupported = "onpointerdown" in window && (browser.edge || browser.ie && +browser.version >= 11); if (env.domSupported = typeof document !== "undefined") { var style = document.documentElement.style; env.transform3dSupported = (browser.ie && "transition" in style || browser.edge || "WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix() || "MozPerspective" in style) && !("OTransition" in style); env.transformSupported = env.transform3dSupported || browser.ie && +browser.version >= 9; } } var DEFAULT_FONT = "12px sans-serif"; var OFFSET = 20; var SCALE = 100; var defaultWidthMapStr = "007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N"; function getTextWidthMap(mapStr) { var map = {}; if (typeof JSON === "undefined") return map; for (var i = 0; i < mapStr.length; i++) { var char = String.fromCharCode(i + 32); map[char] = (mapStr.charCodeAt(i) - OFFSET) / SCALE; } return map; } var DEFAULT_TEXT_WIDTH_MAP = getTextWidthMap(defaultWidthMapStr); var platformApi = { createCanvas: function() { return typeof document !== "undefined" && document.createElement("canvas"); }, measureText: (function() { var _ctx; var _cachedFont; return function(text, font) { if (!_ctx) { var canvas = platformApi.createCanvas(); _ctx = canvas && canvas.getContext("2d"); } if (_ctx) { if (_cachedFont !== font) _cachedFont = _ctx.font = font || "12px sans-serif"; return _ctx.measureText(text); } else { text = text || ""; font = font || "12px sans-serif"; var res = /((?:\d+)?\.?\d*)px/.exec(font); var fontSize = res && +res[1] || 12; var width = 0; if (font.indexOf("mono") >= 0) width = fontSize * text.length; else for (var i = 0; i < text.length; i++) { var preCalcWidth = DEFAULT_TEXT_WIDTH_MAP[text[i]]; width += preCalcWidth == null ? fontSize : preCalcWidth * fontSize; } return { width }; } }; })(), loadImage: function(src, onload, onerror) { var image = new Image(); image.onload = onload; image.onerror = onerror; image.src = src; return image; }, getTime: function() { return Date.now ? Date.now() : +/* @__PURE__ */ new Date(); } }; function setPlatformAPI(newPlatformApis) { for (var key in platformApi) if (platformApi.hasOwnProperty(key) && newPlatformApis[key]) platformApi[key] = newPlatformApis[key]; } //#endregion //#region node_modules/zrender/lib/core/util.js var util_exports$1 = /* @__PURE__ */ __exportAll({ EPSILON: () => EPSILON$5, HashMap: () => HashMap, RADIAN_TO_DEGREE: () => RADIAN_TO_DEGREE, assert: () => assert, assignProps: () => assignProps, bind: () => bind$1, clone: () => clone$4, concatArray: () => concatArray, createCanvas: () => createCanvas, createHashMap: () => createHashMap, createObject: () => createObject, curry: () => curry$1, defaults: () => defaults, disableUserSelect: () => disableUserSelect, each: () => each$12, eqNaN: () => eqNaN, extend: () => extend, filter: () => filter, find: () => find, guid: () => guid, hasOwn: () => hasOwn, indexOf: () => indexOf, inherits: () => inherits, isArray: () => isArray$1, isArrayLike: () => isArrayLike, isBuiltInObject: () => isBuiltInObject, isDom: () => isDom, isFunction: () => isFunction, isGradientObject: () => isGradientObject, isImagePatternObject: () => isImagePatternObject, isNumber: () => isNumber, isObject: () => isObject$3, isPrimitive: () => isPrimitive, isRegExp: () => isRegExp, isString: () => isString, isStringSafe: () => isStringSafe, isTypedArray: () => isTypedArray, keys: () => keys, logError: () => logError, map: () => map$1, merge: () => merge, mergeAll: () => mergeAll, mixin: () => mixin, noop: () => noop, normalizeCssArray: () => normalizeCssArray$1, reduce: () => reduce, retrieve: () => retrieve, retrieve2: () => retrieve2, retrieve3: () => retrieve3, setAsPrimitive: () => setAsPrimitive, slice: () => slice, trim: () => trim$1 }); var BUILTIN_OBJECT = reduce([ "Function", "RegExp", "Date", "Error", "CanvasGradient", "CanvasPattern", "Image", "Canvas" ], function(obj, val) { obj["[object " + val + "]"] = true; return obj; }, {}); var TYPED_ARRAY = reduce([ "Int8", "Uint8", "Uint8Clamped", "Int16", "Uint16", "Int32", "Uint32", "Float32", "Float64" ], function(obj, val) { obj["[object " + val + "Array]"] = true; return obj; }, {}); var objToString = Object.prototype.toString; var arrayProto = Array.prototype; var nativeForEach = arrayProto.forEach; var nativeFilter = arrayProto.filter; var nativeSlice = arrayProto.slice; var nativeMap = arrayProto.map; var ctorFunction = function() {}.constructor; var protoFunction = ctorFunction ? ctorFunction.prototype : null; var protoKey = "__proto__"; var idStart = 2311; var MAX_SAFE_INTEGER$1 = Math.pow(2, 53) - 1; function guid() { if (idStart >= MAX_SAFE_INTEGER$1) idStart = 0; return idStart++; } function logError() { var args = []; for (var _i = 0; _i < arguments.length; _i++) args[_i] = arguments[_i]; if (typeof console !== "undefined") console.error.apply(console, args); } function clone$4(source) { if (source == null || typeof source !== "object") return source; var result = source; var typeStr = objToString.call(source); if (typeStr === "[object Array]") { if (!isPrimitive(source)) { result = []; for (var i = 0, len = source.length; i < len; i++) result[i] = clone$4(source[i]); } } else if (TYPED_ARRAY[typeStr]) { if (!isPrimitive(source)) { var Ctor = source.constructor; if (Ctor.from) result = Ctor.from(source); else { result = new Ctor(source.length); for (var i = 0, len = source.length; i < len; i++) result[i] = source[i]; } } } else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) { result = {}; for (var key in source) if (source.hasOwnProperty(key) && key !== protoKey) result[key] = clone$4(source[key]); } return result; } function merge(target, source, overwrite) { if (!isObject$3(source) || !isObject$3(target)) return overwrite ? clone$4(source) : target; for (var key in source) if (source.hasOwnProperty(key) && key !== protoKey) { var targetProp = target[key]; var sourceProp = source[key]; if (isObject$3(sourceProp) && isObject$3(targetProp) && !isArray$1(sourceProp) && !isArray$1(targetProp) && !isDom(sourceProp) && !isDom(targetProp) && !isBuiltInObject(sourceProp) && !isBuiltInObject(targetProp) && !isPrimitive(sourceProp) && !isPrimitive(targetProp)) merge(targetProp, sourceProp, overwrite); else if (overwrite || !(key in target)) target[key] = clone$4(source[key]); } return target; } function mergeAll(targetAndSources, overwrite) { var result = targetAndSources[0]; for (var i = 1, len = targetAndSources.length; i < len; i++) result = merge(result, targetAndSources[i], overwrite); return result; } function extend(target, source) { if (Object.assign) Object.assign(target, source); else for (var key in source) if (source.hasOwnProperty(key) && key !== protoKey) target[key] = source[key]; return target; } function assignProps(tar, src, props) { tar = tar || {}; for (var idx = 0; idx < props.length; idx++) { var prop = props[idx]; tar[prop] = src[prop]; } return tar; } function defaults(target, source, overlay) { var keysArr = keys(source); for (var i = 0, len = keysArr.length; i < len; i++) { var key = keysArr[i]; if (overlay ? source[key] != null : target[key] == null) target[key] = source[key]; } return target; } var createCanvas = platformApi.createCanvas; function indexOf(array, value) { if (array) { if (array.indexOf) return array.indexOf(value); for (var i = 0, len = array.length; i < len; i++) if (array[i] === value) return i; } return -1; } function inherits(clazz, baseClazz) { var clazzPrototype = clazz.prototype; function F() {} F.prototype = baseClazz.prototype; clazz.prototype = new F(); for (var prop in clazzPrototype) if (clazzPrototype.hasOwnProperty(prop)) clazz.prototype[prop] = clazzPrototype[prop]; clazz.prototype.constructor = clazz; clazz.superClass = baseClazz; } function mixin(target, source, override) { target = "prototype" in target ? target.prototype : target; source = "prototype" in source ? source.prototype : source; if (Object.getOwnPropertyNames) { var keyList = Object.getOwnPropertyNames(source); for (var i = 0; i < keyList.length; i++) { var key = keyList[i]; if (key !== "constructor") { if (override ? source[key] != null : target[key] == null) target[key] = source[key]; } } } else defaults(target, source, override); } function isArrayLike(data) { if (!data) return false; if (typeof data === "string") return false; return typeof data.length === "number"; } function each$12(arr, cb, context) { if (!(arr && cb)) return; if (arr.forEach && arr.forEach === nativeForEach) arr.forEach(cb, context); else if (arr.length === +arr.length) for (var i = 0, len = arr.length; i < len; i++) cb.call(context, arr[i], i, arr); else for (var key in arr) if (arr.hasOwnProperty(key)) cb.call(context, arr[key], key, arr); } function map$1(arr, cb, context) { if (!arr) return []; if (!cb) return slice(arr); if (arr.map && arr.map === nativeMap) return arr.map(cb, context); else { var result = []; for (var i = 0, len = arr.length; i < len; i++) result.push(cb.call(context, arr[i], i, arr)); return result; } } function reduce(arr, cb, memo, context) { if (!(arr && cb)) return; for (var i = 0, len = arr.length; i < len; i++) memo = cb.call(context, memo, arr[i], i, arr); return memo; } function filter(arr, cb, context) { if (!arr) return []; if (!cb) return slice(arr); if (arr.filter && arr.filter === nativeFilter) return arr.filter(cb, context); else { var result = []; for (var i = 0, len = arr.length; i < len; i++) if (cb.call(context, arr[i], i, arr)) result.push(arr[i]); return result; } } function find(arr, cb, context) { if (!(arr && cb)) return; for (var i = 0, len = arr.length; i < len; i++) if (cb.call(context, arr[i], i, arr)) return arr[i]; } function keys(obj) { if (!obj) return []; if (Object.keys) return Object.keys(obj); var keyList = []; for (var key in obj) if (obj.hasOwnProperty(key)) keyList.push(key); return keyList; } function bindPolyfill(func, context) { var args = []; for (var _i = 2; _i < arguments.length; _i++) args[_i - 2] = arguments[_i]; return function() { return func.apply(context, args.concat(nativeSlice.call(arguments))); }; } var bind$1 = protoFunction && isFunction(protoFunction.bind) ? protoFunction.call.bind(protoFunction.bind) : bindPolyfill; function curry$1(func) { var args = []; for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; return function() { return func.apply(this, args.concat(nativeSlice.call(arguments))); }; } function isArray$1(value) { if (Array.isArray) return Array.isArray(value); return objToString.call(value) === "[object Array]"; } function isFunction(value) { return typeof value === "function"; } function isString(value) { return typeof value === "string"; } function isStringSafe(value) { return objToString.call(value) === "[object String]"; } function isNumber(value) { return typeof value === "number"; } function isObject$3(value) { var type = typeof value; return type === "function" || !!value && type === "object"; } function isBuiltInObject(value) { return !!BUILTIN_OBJECT[objToString.call(value)]; } function isTypedArray(value) { return !!TYPED_ARRAY[objToString.call(value)]; } function isDom(value) { return typeof value === "object" && typeof value.nodeType === "number" && typeof value.ownerDocument === "object"; } function isGradientObject(value) { return value.colorStops != null; } function isImagePatternObject(value) { return value.image != null; } function isRegExp(value) { return objToString.call(value) === "[object RegExp]"; } function eqNaN(value) { return value !== value; } function retrieve() { var args = []; for (var _i = 0; _i < arguments.length; _i++) args[_i] = arguments[_i]; for (var i = 0, len = args.length; i < len; i++) if (args[i] != null) return args[i]; } function retrieve2(value0, value1) { return value0 != null ? value0 : value1; } function retrieve3(value0, value1, value2) { return value0 != null ? value0 : value1 != null ? value1 : value2; } function slice(arr) { var args = []; for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; return nativeSlice.apply(arr, args); } function normalizeCssArray$1(val) { if (typeof val === "number") return [ val, val, val, val ]; var len = val.length; if (len === 2) return [ val[0], val[1], val[0], val[1] ]; else if (len === 3) return [ val[0], val[1], val[2], val[1] ]; return val; } function assert(condition, message) { if (!condition) throw new Error(message); } function trim$1(str) { if (str == null) return null; else if (typeof str.trim === "function") return str.trim(); else return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); } var primitiveKey = "__ec_primitive__"; function setAsPrimitive(obj) { obj[primitiveKey] = true; } function isPrimitive(obj) { return obj[primitiveKey]; } var MapPolyfill = function() { function MapPolyfill() { this.data = {}; } MapPolyfill.prototype["delete"] = function(key) { var existed = this.has(key); if (existed) delete this.data[key]; return existed; }; MapPolyfill.prototype.has = function(key) { return this.data.hasOwnProperty(key); }; MapPolyfill.prototype.get = function(key) { return this.data[key]; }; MapPolyfill.prototype.set = function(key, value) { this.data[key] = value; return this; }; MapPolyfill.prototype.keys = function() { return keys(this.data); }; MapPolyfill.prototype.forEach = function(callback) { var data = this.data; for (var key in data) if (data.hasOwnProperty(key)) callback(data[key], key); }; return MapPolyfill; }(); var isNativeMapSupported = typeof Map === "function"; function maybeNativeMap() { return isNativeMapSupported ? /* @__PURE__ */ new Map() : new MapPolyfill(); } var HashMap = function() { function HashMap(obj) { var isArr = isArray$1(obj); this.data = maybeNativeMap(); var thisMap = this; obj instanceof HashMap ? obj.each(visit) : obj && each$12(obj, visit); function visit(value, key) { isArr ? thisMap.set(value, key) : thisMap.set(key, value); } } HashMap.prototype.hasKey = function(key) { return this.data.has(key); }; HashMap.prototype.get = function(key) { return this.data.get(key); }; HashMap.prototype.set = function(key, value) { this.data.set(key, value); return value; }; HashMap.prototype.each = function(cb, context) { this.data.forEach(function(value, key) { cb.call(context, value, key); }); }; HashMap.prototype.keys = function() { var keys = this.data.keys(); return isNativeMapSupported ? Array.from(keys) : keys; }; HashMap.prototype.removeKey = function(key) { this.data["delete"](key); }; return HashMap; }(); function createHashMap(obj) { return new HashMap(obj); } function concatArray(a, b) { var newArray = new a.constructor(a.length + b.length); for (var i = 0; i < a.length; i++) newArray[i] = a[i]; var offset = a.length; for (var i = 0; i < b.length; i++) newArray[i + offset] = b[i]; return newArray; } function createObject(proto, properties) { var obj; if (Object.create) obj = Object.create(proto); else { var StyleCtor = function() {}; StyleCtor.prototype = proto; obj = new StyleCtor(); } if (properties) extend(obj, properties); return obj; } function disableUserSelect(dom) { var domStyle = dom.style; domStyle.webkitUserSelect = "none"; domStyle.userSelect = "none"; domStyle.webkitTapHighlightColor = "rgba(0,0,0,0)"; domStyle["-webkit-touch-callout"] = "none"; } function hasOwn(own, prop) { return own.hasOwnProperty(prop); } function noop() {} var RADIAN_TO_DEGREE = 180 / Math.PI; var EPSILON$5 = Number.EPSILON || Math.pow(2, -52); //#endregion //#region node_modules/zrender/lib/core/vector.js var vector_exports = /* @__PURE__ */ __exportAll({ add: () => add, applyTransform: () => applyTransform$1, clone: () => clone$3, copy: () => copy$1, create: () => create$2, dist: () => dist$1, distSquare: () => distSquare, distance: () => distance, distanceSquare: () => distanceSquare, div: () => div, dot: () => dot, len: () => len, lenSquare: () => lenSquare, length: () => length, lengthSquare: () => lengthSquare, lerp: () => lerp$1, max: () => max$1, min: () => min$1, mul: () => mul$1, negate: () => negate, normalize: () => normalize$2, scale: () => scale$1, scaleAndAdd: () => scaleAndAdd$1, set: () => set$1, sub: () => sub }); function create$2(x, y) { if (x == null) x = 0; if (y == null) y = 0; return [x, y]; } function copy$1(out, v) { out[0] = v[0]; out[1] = v[1]; return out; } function clone$3(v) { return [v[0], v[1]]; } function set$1(out, a, b) { out[0] = a; out[1] = b; return out; } function add(out, v1, v2) { out[0] = v1[0] + v2[0]; out[1] = v1[1] + v2[1]; return out; } function scaleAndAdd$1(out, v1, v2, a) { out[0] = v1[0] + v2[0] * a; out[1] = v1[1] + v2[1] * a; return out; } function sub(out, v1, v2) { out[0] = v1[0] - v2[0]; out[1] = v1[1] - v2[1]; return out; } function len(v) { return Math.sqrt(lenSquare(v)); } var length = len; function lenSquare(v) { return v[0] * v[0] + v[1] * v[1]; } var lengthSquare = lenSquare; function mul$1(out, v1, v2) { out[0] = v1[0] * v2[0]; out[1] = v1[1] * v2[1]; return out; } function div(out, v1, v2) { out[0] = v1[0] / v2[0]; out[1] = v1[1] / v2[1]; return out; } function dot(v1, v2) { return v1[0] * v2[0] + v1[1] * v2[1]; } function scale$1(out, v, s) { out[0] = v[0] * s; out[1] = v[1] * s; return out; } function normalize$2(out, v) { var d = len(v); if (d === 0) { out[0] = 0; out[1] = 0; } else { out[0] = v[0] / d; out[1] = v[1] / d; } return out; } function distance(v1, v2) { return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1])); } var dist$1 = distance; function distanceSquare(v1, v2) { return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]); } var distSquare = distanceSquare; function negate(out, v) { out[0] = -v[0]; out[1] = -v[1]; return out; } function lerp$1(out, v1, v2, t) { out[0] = v1[0] + t * (v2[0] - v1[0]); out[1] = v1[1] + t * (v2[1] - v1[1]); return out; } function applyTransform$1(out, v, m) { var x = v[0]; var y = v[1]; out[0] = m[0] * x + m[2] * y + m[4]; out[1] = m[1] * x + m[3] * y + m[5]; return out; } function min$1(out, v1, v2) { out[0] = Math.min(v1[0], v2[0]); out[1] = Math.min(v1[1], v2[1]); return out; } function max$1(out, v1, v2) { out[0] = Math.max(v1[0], v2[0]); out[1] = Math.max(v1[1], v2[1]); return out; } //#endregion //#region node_modules/zrender/lib/mixin/Draggable.js var Param = function() { function Param(target, e) { this.target = target; this.topTarget = e && e.topTarget; } return Param; }(); var Draggable = function() { function Draggable(handler) { this.handler = handler; handler.on("mousedown", this._dragStart, this); handler.on("mousemove", this._drag, this); handler.on("mouseup", this._dragEnd, this); } Draggable.prototype._dragStart = function(e) { var draggingTarget = e.target; while (draggingTarget && !draggingTarget.draggable) draggingTarget = draggingTarget.parent || draggingTarget.__hostTarget; if (draggingTarget) { this._draggingTarget = draggingTarget; draggingTarget.dragging = true; this._x = e.offsetX; this._y = e.offsetY; this.handler.dispatchToElement(new Param(draggingTarget, e), "dragstart", e.event); } }; Draggable.prototype._drag = function(e) { var draggingTarget = this._draggingTarget; if (draggingTarget) { var x = e.offsetX; var y = e.offsetY; var dx = x - this._x; var dy = y - this._y; this._x = x; this._y = y; draggingTarget.drift(dx, dy, e); this.handler.dispatchToElement(new Param(draggingTarget, e), "drag", e.event); var dropTarget = this.handler.findHover(x, y, draggingTarget).target; var lastDropTarget = this._dropTarget; this._dropTarget = dropTarget; if (draggingTarget !== dropTarget) { if (lastDropTarget && dropTarget !== lastDropTarget) this.handler.dispatchToElement(new Param(lastDropTarget, e), "dragleave", e.event); if (dropTarget && dropTarget !== lastDropTarget) this.handler.dispatchToElement(new Param(dropTarget, e), "dragenter", e.event); } } }; Draggable.prototype._dragEnd = function(e) { var draggingTarget = this._draggingTarget; if (draggingTarget) draggingTarget.dragging = false; this.handler.dispatchToElement(new Param(draggingTarget, e), "dragend", e.event); if (this._dropTarget) this.handler.dispatchToElement(new Param(this._dropTarget, e), "drop", e.event); this._draggingTarget = null; this._dropTarget = null; }; return Draggable; }(); //#endregion //#region node_modules/zrender/lib/core/Eventful.js var Eventful = function() { function Eventful(eventProcessors) { if (eventProcessors) this._$eventProcessor = eventProcessors; } Eventful.prototype.on = function(event, query, handler, context) { if (!this._$handlers) this._$handlers = {}; var _h = this._$handlers; if (typeof query === "function") { context = handler; handler = query; query = null; } if (!handler || !event) return this; var eventProcessor = this._$eventProcessor; if (query != null && eventProcessor && eventProcessor.normalizeQuery) query = eventProcessor.normalizeQuery(query); if (!_h[event]) _h[event] = []; for (var i = 0; i < _h[event].length; i++) if (_h[event][i].h === handler) return this; var wrap = { h: handler, query, ctx: context || this, callAtLast: handler.zrEventfulCallAtLast }; var lastIndex = _h[event].length - 1; var lastWrap = _h[event][lastIndex]; lastWrap && lastWrap.callAtLast ? _h[event].splice(lastIndex, 0, wrap) : _h[event].push(wrap); return this; }; Eventful.prototype.isSilent = function(eventName) { var _h = this._$handlers; return !_h || !_h[eventName] || !_h[eventName].length; }; Eventful.prototype.off = function(eventType, handler) { var _h = this._$handlers; if (!_h) return this; if (!eventType) { this._$handlers = {}; return this; } if (handler) { if (_h[eventType]) { var newList = []; for (var i = 0, l = _h[eventType].length; i < l; i++) if (_h[eventType][i].h !== handler) newList.push(_h[eventType][i]); _h[eventType] = newList; } if (_h[eventType] && _h[eventType].length === 0) delete _h[eventType]; } else delete _h[eventType]; return this; }; Eventful.prototype.trigger = function(eventType) { var args = []; for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; if (!this._$handlers) return this; var _h = this._$handlers[eventType]; var eventProcessor = this._$eventProcessor; if (_h) { var argLen = args.length; var len = _h.length; for (var i = 0; i < len; i++) { var hItem = _h[i]; if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(eventType, hItem.query)) continue; switch (argLen) { case 0: hItem.h.call(hItem.ctx); break; case 1: hItem.h.call(hItem.ctx, args[0]); break; case 2: hItem.h.call(hItem.ctx, args[0], args[1]); break; default: hItem.h.apply(hItem.ctx, args); } } } eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(eventType); return this; }; Eventful.prototype.triggerWithContext = function(type) { var args = []; for (var _i = 1; _i < arguments.length; _i++) args[_i - 1] = arguments[_i]; if (!this._$handlers) return this; var _h = this._$handlers[type]; var eventProcessor = this._$eventProcessor; if (_h) { var argLen = args.length; var ctx = args[argLen - 1]; var len = _h.length; for (var i = 0; i < len; i++) { var hItem = _h[i]; if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(type, hItem.query)) continue; switch (argLen) { case 0: hItem.h.call(ctx); break; case 1: hItem.h.call(ctx, args[0]); break; case 2: hItem.h.call(ctx, args[0], args[1]); break; default: hItem.h.apply(ctx, args.slice(1, argLen - 1)); } } } eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(type); return this; }; return Eventful; }(); //#endregion //#region node_modules/zrender/lib/core/fourPointsTransform.js var LN2 = Math.log(2); function determinant(rows, rank, rowStart, rowMask, colMask, detCache) { var cacheKey = rowMask + "-" + colMask; var fullRank = rows.length; if (detCache.hasOwnProperty(cacheKey)) return detCache[cacheKey]; if (rank === 1) { var colStart = Math.round(Math.log((1 << fullRank) - 1 & ~colMask) / LN2); return rows[rowStart][colStart]; } var subRowMask = rowMask | 1 << rowStart; var subRowStart = rowStart + 1; while (rowMask & 1 << subRowStart) subRowStart++; var sum = 0; for (var j = 0, colLocalIdx = 0; j < fullRank; j++) { var colTag = 1 << j; if (!(colTag & colMask)) { sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j] * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache); colLocalIdx++; } } detCache[cacheKey] = sum; return sum; } function buildTransformer(src, dest) { var mA = [ [ src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1] ], [ 0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1] ], [ src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3] ], [ 0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3] ], [ src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5] ], [ 0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5] ], [ src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7] ], [ 0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7] ] ]; var detCache = {}; var det = determinant(mA, 8, 0, 0, 0, detCache); if (det === 0) return; var vh = []; for (var i = 0; i < 8; i++) for (var j = 0; j < 8; j++) { vh[j] ?? (vh[j] = 0); vh[j] += ((i + j) % 2 ? -1 : 1) * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache) / det * dest[i]; } return function(out, srcPointX, srcPointY) { var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1; out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk; out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk; }; } //#endregion //#region node_modules/zrender/lib/core/dom.js var EVENT_SAVED_PROP = "___zrEVENTSAVED"; var _calcOut$1 = []; function transformLocalCoord(out, elFrom, elTarget, inX, inY) { return transformCoordWithViewport(_calcOut$1, elFrom, inX, inY, true) && transformCoordWithViewport(out, elTarget, _calcOut$1[0], _calcOut$1[1]); } function transformLocalCoordClear(elFrom, elTarget) { elFrom && dealClear(elFrom); elTarget && dealClear(elTarget); function dealClear(el) { var saved = el[EVENT_SAVED_PROP]; if (saved) { saved.clearMarkers && saved.clearMarkers(); delete el[EVENT_SAVED_PROP]; } } } function transformCoordWithViewport(out, el, inX, inY, inverse) { if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) { var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {}); var transformer = preparePointerTransformer(prepareCoordMarkers(el, saved), saved, inverse); if (transformer) { transformer(out, inX, inY); return true; } } return false; } function prepareCoordMarkers(el, saved) { var markers = saved.markers; if (markers) return markers; markers = saved.markers = []; var propLR = ["left", "right"]; var propTB = ["top", "bottom"]; for (var i = 0; i < 4; i++) { var marker = document.createElement("div"); var stl = marker.style; var idxLR = i % 2; var idxTB = (i >> 1) % 2; stl.cssText = [ "position: absolute", "visibility: hidden", "padding: 0", "margin: 0", "border-width: 0", "user-select: none", "width:0", "height:0", propLR[idxLR] + ":0", propTB[idxTB] + ":0", propLR[1 - idxLR] + ":auto", propTB[1 - idxTB] + ":auto", "" ].join("!important;"); el.appendChild(marker); markers.push(marker); } saved.clearMarkers = function() { each$12(markers, function(marker) { marker.parentNode && marker.parentNode.removeChild(marker); }); }; return markers; } function preparePointerTransformer(markers, saved, inverse) { var transformerName = inverse ? "invTrans" : "trans"; var transformer = saved[transformerName]; var oldSrcCoords = saved.srcCoords; var srcCoords = []; var destCoords = []; var oldCoordTheSame = true; for (var i = 0; i < 4; i++) { var rect = markers[i].getBoundingClientRect(); var ii = 2 * i; var x = rect.left; var y = rect.top; srcCoords.push(x, y); oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1]; destCoords.push(markers[i].offsetLeft, markers[i].offsetTop); } return oldCoordTheSame && transformer ? transformer : (saved.srcCoords = srcCoords, saved[transformerName] = inverse ? buildTransformer(destCoords, srcCoords) : buildTransformer(srcCoords, destCoords)); } function isCanvasEl(el) { return el.nodeName.toUpperCase() === "CANVAS"; } var replaceReg = /([&<>"'])/g; var replaceMap = { "&": "&", "<": "<", ">": ">", "\"": """, "'": "'" }; function encodeHTML(source) { return source == null ? "" : (source + "").replace(replaceReg, function(str, c) { return replaceMap[c]; }); } //#endregion //#region node_modules/zrender/lib/core/event.js var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/; var _calcOut = []; var firefoxNotSupportOffsetXY = env.browser.firefox && +env.browser.version.split(".")[0] < 39; function clientToLocal(el, e, out, calculate) { out = out || {}; if (calculate) calculateZrXY(el, e, out); else if (firefoxNotSupportOffsetXY && e.layerX != null && e.layerX !== e.offsetX) { out.zrX = e.layerX; out.zrY = e.layerY; } else if (e.offsetX != null) { out.zrX = e.offsetX; out.zrY = e.offsetY; } else calculateZrXY(el, e, out); return out; } function calculateZrXY(el, e, out) { if (env.domSupported && el.getBoundingClientRect) { var ex = e.clientX; var ey = e.clientY; if (isCanvasEl(el)) { var box = el.getBoundingClientRect(); out.zrX = ex - box.left; out.zrY = ey - box.top; return; } else if (transformCoordWithViewport(_calcOut, el, ex, ey)) { out.zrX = _calcOut[0]; out.zrY = _calcOut[1]; return; } } out.zrX = out.zrY = 0; } function getNativeEvent(e) { return e || window.event; } function normalizeEvent(el, e, calculate) { e = getNativeEvent(e); if (e.zrX != null) return e; var eventType = e.type; if (!(eventType && eventType.indexOf("touch") >= 0)) { clientToLocal(el, e, e, calculate); var wheelDelta = getWheelDeltaMayPolyfill(e); e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3; } else { var touch = eventType !== "touchend" ? e.targetTouches[0] : e.changedTouches[0]; touch && clientToLocal(el, touch, e, calculate); } var button = e.button; if (e.which == null && button !== void 0 && MOUSE_EVENT_REG.test(e.type)) e.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0; return e; } function getWheelDeltaMayPolyfill(e) { var rawWheelDelta = e.wheelDelta; if (rawWheelDelta) return rawWheelDelta; var deltaX = e.deltaX; var deltaY = e.deltaY; if (deltaX == null || deltaY == null) return rawWheelDelta; var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX); var sign = deltaY > 0 ? -1 : deltaY < 0 ? 1 : deltaX > 0 ? -1 : 1; return 3 * delta * sign; } function addEventListener(el, name, handler, opt) { el.addEventListener(name, handler, opt); } function removeEventListener(el, name, handler, opt) { el.removeEventListener(name, handler, opt); } var stop = function(e) { e.preventDefault(); e.stopPropagation(); e.cancelBubble = true; }; function isMiddleOrRightButtonOnMouseUpDown(e) { return e.which === 2 || e.which === 3; } //#endregion //#region node_modules/zrender/lib/core/GestureMgr.js var GestureMgr = function() { function GestureMgr() { this._track = []; } GestureMgr.prototype.recognize = function(event, target, root) { this._doTrack(event, target, root); return this._recognize(event); }; GestureMgr.prototype.clear = function() { this._track.length = 0; return this; }; GestureMgr.prototype._doTrack = function(event, target, root) { var touches = event.touches; if (!touches) return; var trackItem = { points: [], touches: [], target, event }; for (var i = 0, len = touches.length; i < len; i++) { var touch = touches[i]; var pos = clientToLocal(root, touch, {}); trackItem.points.push([pos.zrX, pos.zrY]); trackItem.touches.push(touch); } this._track.push(trackItem); }; GestureMgr.prototype._recognize = function(event) { for (var eventName in recognizers) if (recognizers.hasOwnProperty(eventName)) { var gestureInfo = recognizers[eventName](this._track, event); if (gestureInfo) return gestureInfo; } }; return GestureMgr; }(); function dist(pointPair) { var dx = pointPair[1][0] - pointPair[0][0]; var dy = pointPair[1][1] - pointPair[0][1]; return Math.sqrt(dx * dx + dy * dy); } function center$1(pointPair) { return [(pointPair[0][0] + pointPair[1][0]) / 2, (pointPair[0][1] + pointPair[1][1]) / 2]; } var recognizers = { pinch: function(tracks, event) { var trackLen = tracks.length; if (!trackLen) return; var pinchEnd = (tracks[trackLen - 1] || {}).points; var pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd; if (pinchPre && pinchPre.length > 1 && pinchEnd && pinchEnd.length > 1) { var pinchScale = dist(pinchEnd) / dist(pinchPre); !isFinite(pinchScale) && (pinchScale = 1); event.pinchScale = pinchScale; var pinchCenter = center$1(pinchEnd); event.pinchX = pinchCenter[0]; event.pinchY = pinchCenter[1]; return { type: "pinch", target: tracks[0].target, event }; } } }; //#endregion //#region node_modules/zrender/lib/core/matrix.js var matrix_exports = /* @__PURE__ */ __exportAll({ clone: () => clone$2, copy: () => copy, create: () => create$1, identity: () => identity, invert: () => invert, mul: () => mul, rotate: () => rotate, scale: () => scale, translate: () => translate }); function create$1() { return [ 1, 0, 0, 1, 0, 0 ]; } function identity(out) { out[0] = 1; out[1] = 0; out[2] = 0; out[3] = 1; out[4] = 0; out[5] = 0; return out; } function copy(out, m) { out[0] = m[0]; out[1] = m[1]; out[2] = m[2]; out[3] = m[3]; out[4] = m[4]; out[5] = m[5]; return out; } function mul(out, m1, m2) { var out0 = m1[0] * m2[0] + m1[2] * m2[1]; var out1 = m1[1] * m2[0] + m1[3] * m2[1]; var out2 = m1[0] * m2[2] + m1[2] * m2[3]; var out3 = m1[1] * m2[2] + m1[3] * m2[3]; var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4]; var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5]; out[0] = out0; out[1] = out1; out[2] = out2; out[3] = out3; out[4] = out4; out[5] = out5; return out; } function translate(out, a, v) { out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; out[4] = a[4] + v[0]; out[5] = a[5] + v[1]; return out; } function rotate(out, a, rad, pivot) { if (pivot === void 0) pivot = [0, 0]; var aa = a[0]; var ac = a[2]; var atx = a[4]; var ab = a[1]; var ad = a[3]; var aty = a[5]; var st = Math.sin(rad); var ct = Math.cos(rad); out[0] = aa * ct + ab * st; out[1] = -aa * st + ab * ct; out[2] = ac * ct + ad * st; out[3] = -ac * st + ct * ad; out[4] = ct * (atx - pivot[0]) + st * (aty - pivot[1]) + pivot[0]; out[5] = ct * (aty - pivot[1]) - st * (atx - pivot[0]) + pivot[1]; return out; } function scale(out, a, v) { var vx = v[0]; var vy = v[1]; out[0] = a[0] * vx; out[1] = a[1] * vy; out[2] = a[2] * vx; out[3] = a[3] * vy; out[4] = a[4] * vx; out[5] = a[5] * vy; return out; } function invert(out, a) { var aa = a[0]; var ac = a[2]; var atx = a[4]; var ab = a[1]; var ad = a[3]; var aty = a[5]; var det = aa * ad - ab * ac; if (!det) return null; det = 1 / det; out[0] = ad * det; out[1] = -ab * det; out[2] = -ac * det; out[3] = aa * det; out[4] = (ac * aty - ad * atx) * det; out[5] = (ab * atx - aa * aty) * det; return out; } function clone$2(a) { var b = create$1(); copy(b, a); return b; } //#endregion //#region node_modules/zrender/lib/core/Point.js var Point = function() { function Point(x, y) { this.x = x || 0; this.y = y || 0; } Point.prototype.copy = function(other) { this.x = other.x; this.y = other.y; return this; }; Point.prototype.clone = function() { return new Point(this.x, this.y); }; Point.prototype.set = function(x, y) { this.x = x; this.y = y; return this; }; Point.prototype.equal = function(other) { return other.x === this.x && other.y === this.y; }; Point.prototype.add = function(other) { this.x += other.x; this.y += other.y; return this; }; Point.prototype.scale = function(scalar) { this.x *= scalar; this.y *= scalar; }; Point.prototype.scaleAndAdd = function(other, scalar) { this.x += other.x * scalar; this.y += other.y * scalar; }; Point.prototype.sub = function(other) { this.x -= other.x; this.y -= other.y; return this; }; Point.prototype.dot = function(other) { return this.x * other.x + this.y * other.y; }; Point.prototype.len = function() { return Math.sqrt(this.x * this.x + this.y * this.y); }; Point.prototype.lenSquare = function() { return this.x * this.x + this.y * this.y; }; Point.prototype.normalize = function() { var len = this.len(); this.x /= len; this.y /= len; return this; }; Point.prototype.distance = function(other) { var dx = this.x - other.x; var dy = this.y - other.y; return Math.sqrt(dx * dx + dy * dy); }; Point.prototype.distanceSquare = function(other) { var dx = this.x - other.x; var dy = this.y - other.y; return dx * dx + dy * dy; }; Point.prototype.negate = function() { this.x = -this.x; this.y = -this.y; return this; }; Point.prototype.transform = function(m) { if (!m) return; var x = this.x; var y = this.y; this.x = m[0] * x + m[2] * y + m[4]; this.y = m[1] * x + m[3] * y + m[5]; return this; }; Point.prototype.toArray = function(out) { out[0] = this.x; out[1] = this.y; return out; }; Point.prototype.fromArray = function(input) { this.x = input[0]; this.y = input[1]; }; Point.set = function(p, x, y) { p.x = x; p.y = y; }; Point.copy = function(p, p2) { p.x = p2.x; p.y = p2.y; }; Point.len = function(p) { return Math.sqrt(p.x * p.x + p.y * p.y); }; Point.lenSquare = function(p) { return p.x * p.x + p.y * p.y; }; Point.dot = function(p0, p1) { return p0.x * p1.x + p0.y * p1.y; }; Point.add = function(out, p0, p1) { out.x = p0.x + p1.x; out.y = p0.y + p1.y; }; Point.sub = function(out, p0, p1) { out.x = p0.x - p1.x; out.y = p0.y - p1.y; }; Point.scale = function(out, p0, scalar) { out.x = p0.x * scalar; out.y = p0.y * scalar; }; Point.scaleAndAdd = function(out, p0, p1, scalar) { out.x = p0.x + p1.x * scalar; out.y = p0.y + p1.y * scalar; }; Point.lerp = function(out, p0, p1, t) { var onet = 1 - t; out.x = onet * p0.x + t * p1.x; out.y = onet * p0.y + t * p1.y; }; return Point; }(); //#endregion //#region node_modules/zrender/lib/core/BoundingRect.js var mathMin$10 = Math.min; var mathMax$10 = Math.max; var mathAbs$5 = Math.abs; var XY$3 = ["x", "y"]; var WH$3 = ["width", "height"]; var lt = new Point(); var rb = new Point(); var lb = new Point(); var rt = new Point(); var _intersectCtx$1 = createIntersectContext(); var _minTv$1 = _intersectCtx$1.minTv; var _maxTv$1 = _intersectCtx$1.maxTv; var _lenMinMax = [0, 0]; var BoundingRect = function() { function BoundingRect(x, y, width, height) { boundingRectSet(this, x, y, width, height); } BoundingRect.set = function(target, x, y, width, height) { if (width < 0) { x = x + width; width = -width; } if (height < 0) { y = y + height; height = -height; } target.x = x; target.y = y; target.width = width; target.height = height; return target; }; BoundingRect.prototype.union = function(other) { var x = mathMin$10(other.x, this.x); var y = mathMin$10(other.y, this.y); if (isFinite(this.x) && isFinite(this.width)) this.width = mathMax$10(other.x + other.width, this.x + this.width) - x; else this.width = other.width; if (isFinite(this.y) && isFinite(this.height)) this.height = mathMax$10(other.y + other.height, this.y + this.height) - y; else this.height = other.height; this.x = x; this.y = y; }; BoundingRect.prototype.applyTransform = function(m) { BoundingRect.applyTransform(this, this, m); }; BoundingRect.prototype.calculateTransform = function(b) { return boundingRectCalculateTransform(create$1(), this, b); }; BoundingRect.prototype.intersect = function(b, mtv, opt) { return BoundingRect.intersect(this, b, mtv, opt); }; BoundingRect.intersect = function(a, b, mtv, opt) { if (mtv) Point.set(mtv, 0, 0); var outIntersectRect = opt && opt.outIntersectRect || null; var clamp = opt && opt.clamp; if (outIntersectRect) outIntersectRect.x = outIntersectRect.y = outIntersectRect.width = outIntersectRect.height = NaN; if (!a || !b) return false; if (!(a instanceof BoundingRect)) a = boundingRectSet(_tmpIntersectA, a.x, a.y, a.width, a.height); if (!(b instanceof BoundingRect)) b = boundingRectSet(_tmpIntersectB, b.x, b.y, b.width, b.height); var useMTV = !!mtv; _intersectCtx$1.reset(opt, useMTV); var touchThreshold = _intersectCtx$1.touchThreshold; var ax0 = a.x + touchThreshold; var ax1 = a.x + a.width - touchThreshold; var ay0 = a.y + touchThreshold; var ay1 = a.y + a.height - touchThreshold; var bx0 = b.x + touchThreshold; var bx1 = b.x + b.width - touchThreshold; var by0 = b.y + touchThreshold; var by1 = b.y + b.height - touchThreshold; if (ax0 > ax1 || ay0 > ay1 || bx0 > bx1 || by0 > by1) return false; var overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0); if (useMTV || outIntersectRect) { _lenMinMax[0] = Infinity; _lenMinMax[1] = 0; intersectOneDim(ax0, ax1, bx0, bx1, 0, useMTV, outIntersectRect, clamp); intersectOneDim(ay0, ay1, by0, by1, 1, useMTV, outIntersectRect, clamp); if (useMTV) Point.copy(mtv, overlap ? _intersectCtx$1.useDir ? _intersectCtx$1.dirMinTv : _minTv$1 : _maxTv$1); } return overlap; }; BoundingRect.contain = function(rect, x, y) { return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height; }; BoundingRect.prototype.contain = function(x, y) { return BoundingRect.contain(this, x, y); }; BoundingRect.prototype.clone = function() { return new BoundingRect(this.x, this.y, this.width, this.height); }; BoundingRect.prototype.copy = function(other) { boundingRectCopy(this, other); }; BoundingRect.prototype.plain = function() { return { x: this.x, y: this.y, width: this.width, height: this.height }; }; BoundingRect.prototype.isFinite = function() { return isFinite(this.x) && isFinite(this.y) && isFinite(this.width) && isFinite(this.height); }; BoundingRect.prototype.isZero = function() { return this.width === 0 || this.height === 0; }; BoundingRect.create = function(rect) { return new BoundingRect(rect ? rect.x : 0, rect ? rect.y : 0, rect ? rect.width : 0, rect ? rect.height : 0); }; BoundingRect.copy = function(target, source) { target.x = source.x; target.y = source.y; target.width = source.width; target.height = source.height; return target; }; BoundingRect.applyTransform = function(target, source, m) { if (!m) { if (target !== source) boundingRectCopy(target, source); return; } if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) { var sx = m[0]; var sy = m[3]; var tx = m[4]; var ty = m[5]; target.x = source.x * sx + tx; target.y = source.y * sy + ty; target.width = source.width * sx; target.height = source.height * sy; if (target.width < 0) { target.x += target.width; target.width = -target.width; } if (target.height < 0) { target.y += target.height; target.height = -target.height; } return; } lt.x = lb.x = source.x; lt.y = rt.y = source.y; rb.x = rt.x = source.x + source.width; rb.y = lb.y = source.y + source.height; lt.transform(m); rt.transform(m); rb.transform(m); lb.transform(m); target.x = mathMin$10(lt.x, rb.x, lb.x, rt.x); target.y = mathMin$10(lt.y, rb.y, lb.y, rt.y); var maxX = mathMax$10(lt.x, rb.x, lb.x, rt.x); var maxY = mathMax$10(lt.y, rb.y, lb.y, rt.y); target.width = maxX - target.x; target.height = maxY - target.y; }; BoundingRect.calculateTransform = function(out, a, b) { var sx = b.width / a.width; var sy = b.height / a.height; out = identity(out || []); translate(out, out, set$1(_tmpCalcTrans, -a.x, -a.y)); scale(out, out, set$1(_tmpCalcTrans, sx, sy)); translate(out, out, set$1(_tmpCalcTrans, b.x, b.y)); return out; }; return BoundingRect; }(); var boundingRectCreate = BoundingRect.create; var boundingRectSet = BoundingRect.set; var boundingRectCopy = BoundingRect.copy; var boundingRectCalculateTransform = BoundingRect.calculateTransform; var boundingRectApplyTransform = BoundingRect.applyTransform; var boundingRectContain = BoundingRect.contain; var _tmpIntersectA = new BoundingRect(0, 0, 0, 0); var _tmpIntersectB = new BoundingRect(0, 0, 0, 0); var _tmpCalcTrans = []; function intersectOneDim(a0, a1, b0, b1, updateDimIdx, useMTV, outIntersectRect, clamp) { var d0 = mathAbs$5(a1 - b0); var d1 = mathAbs$5(b1 - a0); var d01min = mathMin$10(d0, d1); var updateDim = XY$3[updateDimIdx]; var zeroDim = XY$3[1 - updateDimIdx]; var wh = WH$3[updateDimIdx]; if (a1 < b0 || b1 < a0) { if (d0 < d1) { if (useMTV) _maxTv$1[updateDim] = -d0; if (clamp) { outIntersectRect[updateDim] = a1; outIntersectRect[wh] = 0; } } else { if (useMTV) _maxTv$1[updateDim] = d1; if (clamp) { outIntersectRect[updateDim] = a0; outIntersectRect[wh] = 0; } } } else { if (outIntersectRect) { outIntersectRect[updateDim] = mathMax$10(a0, b0); outIntersectRect[wh] = mathMin$10(a1, b1) - outIntersectRect[updateDim]; } if (useMTV) { if (d01min < _lenMinMax[0] || _intersectCtx$1.useDir) { _lenMinMax[0] = mathMin$10(d01min, _lenMinMax[0]); if (d0 < d1 || !_intersectCtx$1.bidirectional) { _minTv$1[updateDim] = d0; _minTv$1[zeroDim] = 0; if (_intersectCtx$1.useDir) _intersectCtx$1.calcDirMTV(); } if (d0 >= d1 || !_intersectCtx$1.bidirectional) { _minTv$1[updateDim] = -d1; _minTv$1[zeroDim] = 0; if (_intersectCtx$1.useDir) _intersectCtx$1.calcDirMTV(); } } } } } function createIntersectContext() { var _direction = 0; var _dirCheckVec = new Point(); var _dirTmp = new Point(); var _ctx = { minTv: new Point(), maxTv: new Point(), useDir: false, dirMinTv: new Point(), touchThreshold: 0, bidirectional: true, negativeSize: false, reset: function(opt, useMTV) { _ctx.touchThreshold = 0; if (opt && opt.touchThreshold != null) _ctx.touchThreshold = mathMax$10(0, opt.touchThreshold); _ctx.negativeSize = false; if (!useMTV) return; _ctx.minTv.set(Infinity, Infinity); _ctx.maxTv.set(0, 0); _ctx.useDir = false; if (opt && opt.direction != null) { _ctx.useDir = true; _ctx.dirMinTv.copy(_ctx.minTv); _dirTmp.copy(_ctx.minTv); _direction = opt.direction; _ctx.bidirectional = opt.bidirectional == null || !!opt.bidirectional; if (!_ctx.bidirectional) _dirCheckVec.set(Math.cos(_direction), Math.sin(_direction)); } }, calcDirMTV: function() { var minTv = _ctx.minTv; var dirMinTv = _ctx.dirMinTv; var squareMag = minTv.y * minTv.y + minTv.x * minTv.x; var dirSin = Math.sin(_direction); var dirCos = Math.cos(_direction); var dotProd = dirSin * minTv.y + dirCos * minTv.x; if (nearZero(dotProd)) { if (nearZero(minTv.x) && nearZero(minTv.y)) dirMinTv.set(0, 0); return; } _dirTmp.x = squareMag * dirCos / dotProd; _dirTmp.y = squareMag * dirSin / dotProd; if (nearZero(_dirTmp.x) && nearZero(_dirTmp.y)) { dirMinTv.set(0, 0); return; } if ((_ctx.bidirectional || _dirCheckVec.dot(_dirTmp) > 0) && _dirTmp.len() < dirMinTv.len()) dirMinTv.copy(_dirTmp); } }; function nearZero(val) { return mathAbs$5(val) < 1e-10; } return _ctx; } //#endregion //#region node_modules/zrender/lib/Handler.js var SILENT = "silent"; function makeEventPacket(eveType, targetInfo, event) { return { type: eveType, event, target: targetInfo.target, topTarget: targetInfo.topTarget, cancelBubble: false, offsetX: event.zrX, offsetY: event.zrY, gestureEvent: event.gestureEvent, pinchX: event.pinchX, pinchY: event.pinchY, pinchScale: event.pinchScale, wheelDelta: event.zrDelta, zrByTouch: event.zrByTouch, which: event.which, stop: stopEvent }; } function stopEvent() { stop(this.event); } var EmptyProxy = function(_super) { __extends(EmptyProxy, _super); function EmptyProxy() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.handler = null; return _this; } EmptyProxy.prototype.dispose = function() {}; EmptyProxy.prototype.setCursor = function() {}; return EmptyProxy; }(Eventful); var HoveredResult = function() { function HoveredResult(x, y) { this.x = x; this.y = y; } return HoveredResult; }(); var handlerNames = [ "click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu" ]; var tmpRect$1 = new BoundingRect(0, 0, 0, 0); var Handler = function(_super) { __extends(Handler, _super); function Handler(storage, painter, proxy, painterRoot, pointerSize) { var _this = _super.call(this) || this; _this._hovered = new HoveredResult(0, 0); _this.storage = storage; _this.painter = painter; _this.painterRoot = painterRoot; _this._pointerSize = pointerSize; proxy = proxy || new EmptyProxy(); _this.proxy = null; _this.setHandlerProxy(proxy); _this._draggingMgr = new Draggable(_this); return _this; } Handler.prototype.setHandlerProxy = function(proxy) { if (this.proxy) this.proxy.dispose(); if (proxy) { each$12(handlerNames, function(name) { proxy.on && proxy.on(name, this[name], this); }, this); proxy.handler = this; } this.proxy = proxy; }; Handler.prototype.mousemove = function(event) { var x = event.zrX; var y = event.zrY; var isOutside = isOutsideBoundary(this, x, y); var lastHovered = this._hovered; var lastHoveredTarget = lastHovered.target; if (lastHoveredTarget && !lastHoveredTarget.__zr) { lastHovered = this.findHover(lastHovered.x, lastHovered.y); lastHoveredTarget = lastHovered.target; } var hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y); var hoveredTarget = hovered.target; var proxy = this.proxy; proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : "default"); if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) this.dispatchToElement(lastHovered, "mouseout", event); this.dispatchToElement(hovered, "mousemove", event); if (hoveredTarget && hoveredTarget !== lastHoveredTarget) this.dispatchToElement(hovered, "mouseover", event); }; Handler.prototype.mouseout = function(event) { var eventControl = event.zrEventControl; if (eventControl !== "only_globalout") this.dispatchToElement(this._hovered, "mouseout", event); if (eventControl !== "no_globalout") this.trigger("globalout", { type: "globalout", event }); }; Handler.prototype.resize = function() { this._hovered = new HoveredResult(0, 0); }; Handler.prototype.dispatch = function(eventName, eventArgs) { var handler = this[eventName]; handler && handler.call(this, eventArgs); }; Handler.prototype.dispose = function() { this.proxy.dispose(); this.storage = null; this.proxy = null; this.painter = null; }; Handler.prototype.setCursorStyle = function(cursorStyle) { var proxy = this.proxy; proxy.setCursor && proxy.setCursor(cursorStyle); }; Handler.prototype.dispatchToElement = function(targetInfo, eventName, event) { targetInfo = targetInfo || {}; var el = targetInfo.target; if (el && el.silent) return; var eventKey = "on" + eventName; var eventPacket = makeEventPacket(eventName, targetInfo, event); while (el) { el[eventKey] && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket)); el.trigger(eventName, eventPacket); el = el.__hostTarget ? el.__hostTarget : el.parent; if (eventPacket.cancelBubble) break; } if (!eventPacket.cancelBubble) { this.trigger(eventName, eventPacket); if (this.painter && this.painter.eachOtherLayer) this.painter.eachOtherLayer(function(layer) { if (typeof layer[eventKey] === "function") layer[eventKey].call(layer, eventPacket); if (layer.trigger) layer.trigger(eventName, eventPacket); }); } }; Handler.prototype.findHover = function(x, y, exclude) { var list = this.storage.getDisplayList(); var out = new HoveredResult(x, y); setHoverTarget(list, out, x, y, exclude); if (this._pointerSize && !out.target) { var candidates = []; var pointerSize = this._pointerSize; var targetSizeHalf = pointerSize / 2; var pointerRect = new BoundingRect(x - targetSizeHalf, y - targetSizeHalf, pointerSize, pointerSize); for (var i = list.length - 1; i >= 0; i--) { var el = list[i]; if (el !== exclude && !el.ignore && !el.ignoreCoarsePointer && (!el.parent || !el.parent.ignoreCoarsePointer)) { tmpRect$1.copy(el.getBoundingRect()); if (el.transform) tmpRect$1.applyTransform(el.transform); if (tmpRect$1.intersect(pointerRect)) candidates.push(el); } } if (candidates.length) { var rStep = 4; var thetaStep = Math.PI / 12; var PI2 = Math.PI * 2; for (var r = 0; r < targetSizeHalf; r += rStep) for (var theta = 0; theta < PI2; theta += thetaStep) { setHoverTarget(candidates, out, x + r * Math.cos(theta), y + r * Math.sin(theta), exclude); if (out.target) return out; } } } return out; }; Handler.prototype.processGesture = function(event, stage) { if (!this._gestureMgr) this._gestureMgr = new GestureMgr(); var gestureMgr = this._gestureMgr; stage === "start" && gestureMgr.clear(); var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom); stage === "end" && gestureMgr.clear(); if (gestureInfo) { var type = gestureInfo.type; event.gestureEvent = type; var res = new HoveredResult(); res.target = gestureInfo.target; this.dispatchToElement(res, type, gestureInfo.event); } }; return Handler; }(Eventful); each$12([ "click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu" ], function(name) { Handler.prototype[name] = function(event) { var x = event.zrX; var y = event.zrY; var isOutside = isOutsideBoundary(this, x, y); var hovered; var hoveredTarget; if (name !== "mouseup" || !isOutside) { hovered = this.findHover(x, y); hoveredTarget = hovered.target; } if (name === "mousedown") { this._downEl = hoveredTarget; this._downPoint = [event.zrX, event.zrY]; this._upEl = hoveredTarget; } else if (name === "mouseup") this._upEl = hoveredTarget; else if (name === "click") { if (this._downEl !== this._upEl || !this._downPoint || dist$1(this._downPoint, [event.zrX, event.zrY]) > 4) return; this._downPoint = null; } this.dispatchToElement(hovered, name, event); }; }); function isHover(displayable, x, y) { if (displayable[displayable.rectHover ? "rectContain" : "contain"](x, y)) { var el = displayable; var isSilent = void 0; var ignoreClip = false; while (el) { if (el.ignoreClip) ignoreClip = true; if (!ignoreClip) { var clipPath = el.getClipPath(); if (clipPath && !clipPath.contain(x, y)) return false; } if (el.silent) isSilent = true; var hostEl = el.__hostTarget; el = hostEl ? el.ignoreHostSilent ? null : hostEl : el.parent; } return isSilent ? SILENT : true; } return false; } function setHoverTarget(list, out, x, y, exclude) { for (var i = list.length - 1; i >= 0; i--) { var el = list[i]; var hoverCheckResult = void 0; if (el !== exclude && !el.ignore && (hoverCheckResult = isHover(el, x, y))) { !out.topTarget && (out.topTarget = el); if (hoverCheckResult !== SILENT) { out.target = el; break; } } } } function isOutsideBoundary(handlerInstance, x, y) { var painter = handlerInstance.painter; return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight(); } //#endregion //#region node_modules/zrender/lib/core/timsort.js var DEFAULT_MIN_MERGE = 32; var DEFAULT_MIN_GALLOPING = 7; function minRunLength(n) { var r = 0; while (n >= DEFAULT_MIN_MERGE) { r |= n & 1; n >>= 1; } return n + r; } function makeAscendingRun(array, lo, hi, compare) { var runHi = lo + 1; if (runHi === hi) return 1; if (compare(array[runHi++], array[lo]) < 0) { while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) runHi++; reverseRun(array, lo, runHi); } else while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) runHi++; return runHi - lo; } function reverseRun(array, lo, hi) { hi--; while (lo < hi) { var t = array[lo]; array[lo++] = array[hi]; array[hi--] = t; } } function binaryInsertionSort(array, lo, hi, start, compare) { if (start === lo) start++; for (; start < hi; start++) { var pivot = array[start]; var left = lo; var right = start; var mid; while (left < right) { mid = left + right >>> 1; if (compare(pivot, array[mid]) < 0) right = mid; else left = mid + 1; } var n = start - left; switch (n) { case 3: array[left + 3] = array[left + 2]; case 2: array[left + 2] = array[left + 1]; case 1: array[left + 1] = array[left]; break; default: while (n > 0) { array[left + n] = array[left + n - 1]; n--; } } array[left] = pivot; } } function gallopLeft(value, array, start, length, hint, compare) { var lastOffset = 0; var maxOffset = 0; var offset = 1; if (compare(value, array[start + hint]) > 0) { maxOffset = length - hint; while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { lastOffset = offset; offset = (offset << 1) + 1; if (offset <= 0) offset = maxOffset; } if (offset > maxOffset) offset = maxOffset; lastOffset += hint; offset += hint; } else { maxOffset = hint + 1; while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { lastOffset = offset; offset = (offset << 1) + 1; if (offset <= 0) offset = maxOffset; } if (offset > maxOffset) offset = maxOffset; var tmp = lastOffset; lastOffset = hint - offset; offset = hint - tmp; } lastOffset++; while (lastOffset < offset) { var m = lastOffset + (offset - lastOffset >>> 1); if (compare(value, array[start + m]) > 0) lastOffset = m + 1; else offset = m; } return offset; } function gallopRight(value, array, start, length, hint, compare) { var lastOffset = 0; var maxOffset = 0; var offset = 1; if (compare(value, array[start + hint]) < 0) { maxOffset = hint + 1; while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { lastOffset = offset; offset = (offset << 1) + 1; if (offset <= 0) offset = maxOffset; } if (offset > maxOffset) offset = maxOffset; var tmp = lastOffset; lastOffset = hint - offset; offset = hint - tmp; } else { maxOffset = length - hint; while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { lastOffset = offset; offset = (offset << 1) + 1; if (offset <= 0) offset = maxOffset; } if (offset > maxOffset) offset = maxOffset; lastOffset += hint; offset += hint; } lastOffset++; while (lastOffset < offset) { var m = lastOffset + (offset - lastOffset >>> 1); if (compare(value, array[start + m]) < 0) offset = m; else lastOffset = m + 1; } return offset; } function TimSort(array, compare) { var minGallop = DEFAULT_MIN_GALLOPING; var runStart; var runLength; var stackSize = 0; var tmp = []; runStart = []; runLength = []; function pushRun(_runStart, _runLength) { runStart[stackSize] = _runStart; runLength[stackSize] = _runLength; stackSize += 1; } function mergeRuns() { while (stackSize > 1) { var n = stackSize - 2; if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) { if (runLength[n - 1] < runLength[n + 1]) n--; } else if (runLength[n] > runLength[n + 1]) break; mergeAt(n); } } function forceMergeRuns() { while (stackSize > 1) { var n = stackSize - 2; if (n > 0 && runLength[n - 1] < runLength[n + 1]) n--; mergeAt(n); } } function mergeAt(i) { var start1 = runStart[i]; var length1 = runLength[i]; var start2 = runStart[i + 1]; var length2 = runLength[i + 1]; runLength[i] = length1 + length2; if (i === stackSize - 3) { runStart[i + 1] = runStart[i + 2]; runLength[i + 1] = runLength[i + 2]; } stackSize--; var k = gallopRight(array[start2], array, start1, length1, 0, compare); start1 += k; length1 -= k; if (length1 === 0) return; length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); if (length2 === 0) return; if (length1 <= length2) mergeLow(start1, length1, start2, length2); else mergeHigh(start1, length1, start2, length2); } function mergeLow(start1, length1, start2, length2) { var i = 0; for (i = 0; i < length1; i++) tmp[i] = array[start1 + i]; var cursor1 = 0; var cursor2 = start2; var dest = start1; array[dest++] = array[cursor2++]; if (--length2 === 0) { for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; return; } if (length1 === 1) { for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; array[dest + length2] = tmp[cursor1]; return; } var _minGallop = minGallop; var count1; var count2; var exit; while (1) { count1 = 0; count2 = 0; exit = false; do if (compare(array[cursor2], tmp[cursor1]) < 0) { array[dest++] = array[cursor2++]; count2++; count1 = 0; if (--length2 === 0) { exit = true; break; } } else { array[dest++] = tmp[cursor1++]; count1++; count2 = 0; if (--length1 === 1) { exit = true; break; } } while ((count1 | count2) < _minGallop); if (exit) break; do { count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); if (count1 !== 0) { for (i = 0; i < count1; i++) array[dest + i] = tmp[cursor1 + i]; dest += count1; cursor1 += count1; length1 -= count1; if (length1 <= 1) { exit = true; break; } } array[dest++] = array[cursor2++]; if (--length2 === 0) { exit = true; break; } count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); if (count2 !== 0) { for (i = 0; i < count2; i++) array[dest + i] = array[cursor2 + i]; dest += count2; cursor2 += count2; length2 -= count2; if (length2 === 0) { exit = true; break; } } array[dest++] = tmp[cursor1++]; if (--length1 === 1) { exit = true; break; } _minGallop--; } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); if (exit) break; if (_minGallop < 0) _minGallop = 0; _minGallop += 2; } minGallop = _minGallop; minGallop < 1 && (minGallop = 1); if (length1 === 1) { for (i = 0; i < length2; i++) array[dest + i] = array[cursor2 + i]; array[dest + length2] = tmp[cursor1]; } else if (length1 === 0) throw new Error(); else for (i = 0; i < length1; i++) array[dest + i] = tmp[cursor1 + i]; } function mergeHigh(start1, length1, start2, length2) { var i = 0; for (i = 0; i < length2; i++) tmp[i] = array[start2 + i]; var cursor1 = start1 + length1 - 1; var cursor2 = length2 - 1; var dest = start2 + length2 - 1; var customCursor = 0; var customDest = 0; array[dest--] = array[cursor1--]; if (--length1 === 0) { customCursor = dest - (length2 - 1); for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; return; } if (length2 === 1) { dest -= length1; cursor1 -= length1; customDest = dest + 1; customCursor = cursor1 + 1; for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; array[dest] = tmp[cursor2]; return; } var _minGallop = minGallop; while (true) { var count1 = 0; var count2 = 0; var exit = false; do if (compare(tmp[cursor2], array[cursor1]) < 0) { array[dest--] = array[cursor1--]; count1++; count2 = 0; if (--length1 === 0) { exit = true; break; } } else { array[dest--] = tmp[cursor2--]; count2++; count1 = 0; if (--length2 === 1) { exit = true; break; } } while ((count1 | count2) < _minGallop); if (exit) break; do { count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); if (count1 !== 0) { dest -= count1; cursor1 -= count1; length1 -= count1; customDest = dest + 1; customCursor = cursor1 + 1; for (i = count1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; if (length1 === 0) { exit = true; break; } } array[dest--] = tmp[cursor2--]; if (--length2 === 1) { exit = true; break; } count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); if (count2 !== 0) { dest -= count2; cursor2 -= count2; length2 -= count2; customDest = dest + 1; customCursor = cursor2 + 1; for (i = 0; i < count2; i++) array[customDest + i] = tmp[customCursor + i]; if (length2 <= 1) { exit = true; break; } } array[dest--] = array[cursor1--]; if (--length1 === 0) { exit = true; break; } _minGallop--; } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); if (exit) break; if (_minGallop < 0) _minGallop = 0; _minGallop += 2; } minGallop = _minGallop; if (minGallop < 1) minGallop = 1; if (length2 === 1) { dest -= length1; cursor1 -= length1; customDest = dest + 1; customCursor = cursor1 + 1; for (i = length1 - 1; i >= 0; i--) array[customDest + i] = array[customCursor + i]; array[dest] = tmp[cursor2]; } else if (length2 === 0) throw new Error(); else { customCursor = dest - (length2 - 1); for (i = 0; i < length2; i++) array[customCursor + i] = tmp[i]; } } return { mergeRuns, forceMergeRuns, pushRun }; } function sort$2(array, compare, lo, hi) { if (!lo) lo = 0; if (!hi) hi = array.length; var remaining = hi - lo; if (remaining < 2) return; var runLength = 0; if (remaining < DEFAULT_MIN_MERGE) { runLength = makeAscendingRun(array, lo, hi, compare); binaryInsertionSort(array, lo, hi, lo + runLength, compare); return; } var ts = TimSort(array, compare); var minRun = minRunLength(remaining); do { runLength = makeAscendingRun(array, lo, hi, compare); if (runLength < minRun) { var force = remaining; if (force > minRun) force = minRun; binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); runLength = force; } ts.pushRun(lo, runLength); ts.mergeRuns(); remaining -= runLength; lo += runLength; } while (remaining !== 0); ts.forceMergeRuns(); } //#endregion //#region node_modules/zrender/lib/Storage.js var invalidZErrorLogged = false; function logInvalidZError() { if (invalidZErrorLogged) return; invalidZErrorLogged = true; console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"); } function shapeCompareFunc(a, b) { if (a.zlevel === b.zlevel) { if (a.z === b.z) return a.z2 - b.z2; return a.z - b.z; } return a.zlevel - b.zlevel; } var Storage = function() { function Storage() { this._roots = []; this._displayList = []; this._displayListLen = 0; this.displayableSortFunc = shapeCompareFunc; } Storage.prototype.traverse = function(cb, context) { for (var i = 0; i < this._roots.length; i++) this._roots[i].traverse(cb, context); }; Storage.prototype.getDisplayList = function(update, includeIgnore) { includeIgnore = includeIgnore || false; var displayList = this._displayList; if (update || !displayList.length) this.updateDisplayList(includeIgnore); return displayList; }; Storage.prototype.updateDisplayList = function(includeIgnore) { this._displayListLen = 0; var roots = this._roots; var displayList = this._displayList; for (var i = 0, len = roots.length; i < len; i++) this._updateAndAddDisplayable(roots[i], null, includeIgnore); displayList.length = this._displayListLen; sort$2(displayList, shapeCompareFunc); }; Storage.prototype._updateAndAddDisplayable = function(el, parentClipPaths, includeIgnore) { if (el.ignore && !includeIgnore) return; el.beforeUpdate(); el.update(); el.afterUpdate(); var userSetClipPath = el.getClipPath(); var parentHasClipPaths = parentClipPaths && parentClipPaths.length; var clipPathIdx = 0; var thisClipPaths = el.__clipPaths; if (!el.ignoreClip && (parentHasClipPaths || userSetClipPath)) { if (!thisClipPaths) thisClipPaths = el.__clipPaths = []; if (parentHasClipPaths) for (var idx = 0; idx < parentClipPaths.length; idx++) thisClipPaths[clipPathIdx++] = parentClipPaths[idx]; var currentClipPath = userSetClipPath; var parentClipPath = el; while (currentClipPath) { currentClipPath.parent = parentClipPath; currentClipPath.updateTransform(); thisClipPaths[clipPathIdx++] = currentClipPath; parentClipPath = currentClipPath; currentClipPath = currentClipPath.getClipPath(); } } if (thisClipPaths) thisClipPaths.length = clipPathIdx; if (el.childrenRef) { var children = el.childrenRef(); for (var i = 0; i < children.length; i++) { var child = children[i]; if (el.__dirty) child.__dirty |= 1; this._updateAndAddDisplayable(child, thisClipPaths, includeIgnore); } el.__dirty = 0; } else { var disp = el; if (isNaN(disp.z)) { logInvalidZError(); disp.z = 0; } if (isNaN(disp.z2)) { logInvalidZError(); disp.z2 = 0; } if (isNaN(disp.zlevel)) { logInvalidZError(); disp.zlevel = 0; } this._displayList[this._displayListLen++] = disp; } var decalEl = el.getDecalElement && el.getDecalElement(); if (decalEl) this._updateAndAddDisplayable(decalEl, thisClipPaths, includeIgnore); var textGuide = el.getTextGuideLine(); if (textGuide) this._updateAndAddDisplayable(textGuide, thisClipPaths, includeIgnore); var textEl = el.getTextContent(); if (textEl) this._updateAndAddDisplayable(textEl, thisClipPaths, includeIgnore); }; Storage.prototype.addRoot = function(el) { if (el.__zr && el.__zr.storage === this) return; this._roots.push(el); }; Storage.prototype.delRoot = function(el) { if (el instanceof Array) { for (var i = 0, l = el.length; i < l; i++) this.delRoot(el[i]); return; } var idx = indexOf(this._roots, el); if (idx >= 0) this._roots.splice(idx, 1); }; Storage.prototype.delAllRoots = function() { this._roots = []; this._displayList = []; this._displayListLen = 0; }; Storage.prototype.getRoots = function() { return this._roots; }; Storage.prototype.dispose = function() { this._displayList = null; this._roots = null; }; return Storage; }(); //#endregion //#region node_modules/zrender/lib/animation/requestAnimationFrame.js var requestAnimationFrame = env.hasGlobalWindow && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function(func) { return setTimeout(func, 16); }; //#endregion //#region node_modules/zrender/lib/animation/easing.js var easingFuncs = { linear: function(k) { return k; }, quadraticIn: function(k) { return k * k; }, quadraticOut: function(k) { return k * (2 - k); }, quadraticInOut: function(k) { if ((k *= 2) < 1) return .5 * k * k; return -.5 * (--k * (k - 2) - 1); }, cubicIn: function(k) { return k * k * k; }, cubicOut: function(k) { return --k * k * k + 1; }, cubicInOut: function(k) { if ((k *= 2) < 1) return .5 * k * k * k; return .5 * ((k -= 2) * k * k + 2); }, quarticIn: function(k) { return k * k * k * k; }, quarticOut: function(k) { return 1 - --k * k * k * k; }, quarticInOut: function(k) { if ((k *= 2) < 1) return .5 * k * k * k * k; return -.5 * ((k -= 2) * k * k * k - 2); }, quinticIn: function(k) { return k * k * k * k * k; }, quinticOut: function(k) { return --k * k * k * k * k + 1; }, quinticInOut: function(k) { if ((k *= 2) < 1) return .5 * k * k * k * k * k; return .5 * ((k -= 2) * k * k * k * k + 2); }, sinusoidalIn: function(k) { return 1 - Math.cos(k * Math.PI / 2); }, sinusoidalOut: function(k) { return Math.sin(k * Math.PI / 2); }, sinusoidalInOut: function(k) { return .5 * (1 - Math.cos(Math.PI * k)); }, exponentialIn: function(k) { return k === 0 ? 0 : Math.pow(1024, k - 1); }, exponentialOut: function(k) { return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); }, exponentialInOut: function(k) { if (k === 0) return 0; if (k === 1) return 1; if ((k *= 2) < 1) return .5 * Math.pow(1024, k - 1); return .5 * (-Math.pow(2, -10 * (k - 1)) + 2); }, circularIn: function(k) { return 1 - Math.sqrt(1 - k * k); }, circularOut: function(k) { return Math.sqrt(1 - --k * k); }, circularInOut: function(k) { if ((k *= 2) < 1) return -.5 * (Math.sqrt(1 - k * k) - 1); return .5 * (Math.sqrt(1 - (k -= 2) * k) + 1); }, elasticIn: function(k) { var s; var a = .1; var p = .4; if (k === 0) return 0; if (k === 1) return 1; if (!a || a < 1) { a = 1; s = p / 4; } else s = p * Math.asin(1 / a) / (2 * Math.PI); return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); }, elasticOut: function(k) { var s; var a = .1; var p = .4; if (k === 0) return 0; if (k === 1) return 1; if (!a || a < 1) { a = 1; s = p / 4; } else s = p * Math.asin(1 / a) / (2 * Math.PI); return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1; }, elasticInOut: function(k) { var s; var a = .1; var p = .4; if (k === 0) return 0; if (k === 1) return 1; if (!a || a < 1) { a = 1; s = p / 4; } else s = p * Math.asin(1 / a) / (2 * Math.PI); if ((k *= 2) < 1) return -.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * .5 + 1; }, backIn: function(k) { var s = 1.70158; return k * k * ((s + 1) * k - s); }, backOut: function(k) { var s = 1.70158; return --k * k * ((s + 1) * k + s) + 1; }, backInOut: function(k) { var s = 2.5949095; if ((k *= 2) < 1) return .5 * (k * k * ((s + 1) * k - s)); return .5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); }, bounceIn: function(k) { return 1 - easingFuncs.bounceOut(1 - k); }, bounceOut: function(k) { if (k < 1 / 2.75) return 7.5625 * k * k; else if (k < 2 / 2.75) return 7.5625 * (k -= 1.5 / 2.75) * k + .75; else if (k < 2.5 / 2.75) return 7.5625 * (k -= 2.25 / 2.75) * k + .9375; else return 7.5625 * (k -= 2.625 / 2.75) * k + .984375; }, bounceInOut: function(k) { if (k < .5) return easingFuncs.bounceIn(k * 2) * .5; return easingFuncs.bounceOut(k * 2 - 1) * .5 + .5; } }; //#endregion //#region node_modules/zrender/lib/core/curve.js var mathPow$2 = Math.pow; var mathSqrt$3 = Math.sqrt; var EPSILON$4 = 1e-8; var EPSILON_NUMERIC = 1e-4; var THREE_SQRT = mathSqrt$3(3); var ONE_THIRD = 1 / 3; var _v0 = create$2(); var _v1 = create$2(); var _v2 = create$2(); function isAroundZero$1(val) { return val > -EPSILON$4 && val < EPSILON$4; } function isNotAroundZero$1(val) { return val > EPSILON$4 || val < -EPSILON$4; } function cubicAt(p0, p1, p2, p3, t) { var onet = 1 - t; return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2); } function cubicDerivativeAt(p0, p1, p2, p3, t) { var onet = 1 - t; return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t); } function cubicRootAt(p0, p1, p2, p3, val, roots) { var a = p3 + 3 * (p1 - p2) - p0; var b = 3 * (p2 - p1 * 2 + p0); var c = 3 * (p1 - p0); var d = p0 - val; var A = b * b - 3 * a * c; var B = b * c - 9 * a * d; var C = c * c - 3 * b * d; var n = 0; if (isAroundZero$1(A) && isAroundZero$1(B)) { if (isAroundZero$1(b)) roots[0] = 0; else { var t1 = -c / b; if (t1 >= 0 && t1 <= 1) roots[n++] = t1; } } else { var disc = B * B - 4 * A * C; if (isAroundZero$1(disc)) { var K = B / A; var t1 = -b / a + K; var t2 = -K / 2; if (t1 >= 0 && t1 <= 1) roots[n++] = t1; if (t2 >= 0 && t2 <= 1) roots[n++] = t2; } else if (disc > 0) { var discSqrt = mathSqrt$3(disc); var Y1 = A * b + 1.5 * a * (-B + discSqrt); var Y2 = A * b + 1.5 * a * (-B - discSqrt); if (Y1 < 0) Y1 = -mathPow$2(-Y1, ONE_THIRD); else Y1 = mathPow$2(Y1, ONE_THIRD); if (Y2 < 0) Y2 = -mathPow$2(-Y2, ONE_THIRD); else Y2 = mathPow$2(Y2, ONE_THIRD); var t1 = (-b - (Y1 + Y2)) / (3 * a); if (t1 >= 0 && t1 <= 1) roots[n++] = t1; } else { var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$3(A * A * A)); var theta = Math.acos(T) / 3; var ASqrt = mathSqrt$3(A); var tmp = Math.cos(theta); var t1 = (-b - 2 * ASqrt * tmp) / (3 * a); var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a); var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a); if (t1 >= 0 && t1 <= 1) roots[n++] = t1; if (t2 >= 0 && t2 <= 1) roots[n++] = t2; if (t3 >= 0 && t3 <= 1) roots[n++] = t3; } } return n; } function cubicExtrema(p0, p1, p2, p3, extrema) { var b = 6 * p2 - 12 * p1 + 6 * p0; var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2; var c = 3 * p1 - 3 * p0; var n = 0; if (isAroundZero$1(a)) { if (isNotAroundZero$1(b)) { var t1 = -c / b; if (t1 >= 0 && t1 <= 1) extrema[n++] = t1; } } else { var disc = b * b - 4 * a * c; if (isAroundZero$1(disc)) extrema[0] = -b / (2 * a); else if (disc > 0) { var discSqrt = mathSqrt$3(disc); var t1 = (-b + discSqrt) / (2 * a); var t2 = (-b - discSqrt) / (2 * a); if (t1 >= 0 && t1 <= 1) extrema[n++] = t1; if (t2 >= 0 && t2 <= 1) extrema[n++] = t2; } } return n; } function cubicSubdivide(p0, p1, p2, p3, t, out) { var p01 = (p1 - p0) * t + p0; var p12 = (p2 - p1) * t + p1; var p23 = (p3 - p2) * t + p2; var p012 = (p12 - p01) * t + p01; var p123 = (p23 - p12) * t + p12; var p0123 = (p123 - p012) * t + p012; out[0] = p0; out[1] = p01; out[2] = p012; out[3] = p0123; out[4] = p0123; out[5] = p123; out[6] = p23; out[7] = p3; } function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) { var t; var interval = .005; var d = Infinity; var prev; var next; var d1; var d2; _v0[0] = x; _v0[1] = y; for (var _t = 0; _t < 1; _t += .05) { _v1[0] = cubicAt(x0, x1, x2, x3, _t); _v1[1] = cubicAt(y0, y1, y2, y3, _t); d1 = distSquare(_v0, _v1); if (d1 < d) { t = _t; d = d1; } } d = Infinity; for (var i = 0; i < 32; i++) { if (interval < EPSILON_NUMERIC) break; prev = t - interval; next = t + interval; _v1[0] = cubicAt(x0, x1, x2, x3, prev); _v1[1] = cubicAt(y0, y1, y2, y3, prev); d1 = distSquare(_v1, _v0); if (prev >= 0 && d1 < d) { t = prev; d = d1; } else { _v2[0] = cubicAt(x0, x1, x2, x3, next); _v2[1] = cubicAt(y0, y1, y2, y3, next); d2 = distSquare(_v2, _v0); if (next <= 1 && d2 < d) { t = next; d = d2; } else interval *= .5; } } if (out) { out[0] = cubicAt(x0, x1, x2, x3, t); out[1] = cubicAt(y0, y1, y2, y3, t); } return mathSqrt$3(d); } function cubicLength(x0, y0, x1, y1, x2, y2, x3, y3, iteration) { var px = x0; var py = y0; var d = 0; var step = 1 / iteration; for (var i = 1; i <= iteration; i++) { var t = i * step; var x = cubicAt(x0, x1, x2, x3, t); var y = cubicAt(y0, y1, y2, y3, t); var dx = x - px; var dy = y - py; d += Math.sqrt(dx * dx + dy * dy); px = x; py = y; } return d; } function quadraticAt$1(p0, p1, p2, t) { var onet = 1 - t; return onet * (onet * p0 + 2 * t * p1) + t * t * p2; } function quadraticDerivativeAt(p0, p1, p2, t) { return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1)); } function quadraticRootAt(p0, p1, p2, val, roots) { var a = p0 - 2 * p1 + p2; var b = 2 * (p1 - p0); var c = p0 - val; var n = 0; if (isAroundZero$1(a)) { if (isNotAroundZero$1(b)) { var t1 = -c / b; if (t1 >= 0 && t1 <= 1) roots[n++] = t1; } } else { var disc = b * b - 4 * a * c; if (isAroundZero$1(disc)) { var t1 = -b / (2 * a); if (t1 >= 0 && t1 <= 1) roots[n++] = t1; } else if (disc > 0) { var discSqrt = mathSqrt$3(disc); var t1 = (-b + discSqrt) / (2 * a); var t2 = (-b - discSqrt) / (2 * a); if (t1 >= 0 && t1 <= 1) roots[n++] = t1; if (t2 >= 0 && t2 <= 1) roots[n++] = t2; } } return n; } function quadraticExtremum(p0, p1, p2) { var divider = p0 + p2 - 2 * p1; if (divider === 0) return .5; else return (p0 - p1) / divider; } function quadraticSubdivide(p0, p1, p2, t, out) { var p01 = (p1 - p0) * t + p0; var p12 = (p2 - p1) * t + p1; var p012 = (p12 - p01) * t + p01; out[0] = p0; out[1] = p01; out[2] = p012; out[3] = p012; out[4] = p12; out[5] = p2; } function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) { var t; var interval = .005; var d = Infinity; _v0[0] = x; _v0[1] = y; for (var _t = 0; _t < 1; _t += .05) { _v1[0] = quadraticAt$1(x0, x1, x2, _t); _v1[1] = quadraticAt$1(y0, y1, y2, _t); var d1 = distSquare(_v0, _v1); if (d1 < d) { t = _t; d = d1; } } d = Infinity; for (var i = 0; i < 32; i++) { if (interval < EPSILON_NUMERIC) break; var prev = t - interval; var next = t + interval; _v1[0] = quadraticAt$1(x0, x1, x2, prev); _v1[1] = quadraticAt$1(y0, y1, y2, prev); var d1 = distSquare(_v1, _v0); if (prev >= 0 && d1 < d) { t = prev; d = d1; } else { _v2[0] = quadraticAt$1(x0, x1, x2, next); _v2[1] = quadraticAt$1(y0, y1, y2, next); var d2 = distSquare(_v2, _v0); if (next <= 1 && d2 < d) { t = next; d = d2; } else interval *= .5; } } if (out) { out[0] = quadraticAt$1(x0, x1, x2, t); out[1] = quadraticAt$1(y0, y1, y2, t); } return mathSqrt$3(d); } function quadraticLength(x0, y0, x1, y1, x2, y2, iteration) { var px = x0; var py = y0; var d = 0; var step = 1 / iteration; for (var i = 1; i <= iteration; i++) { var t = i * step; var x = quadraticAt$1(x0, x1, x2, t); var y = quadraticAt$1(y0, y1, y2, t); var dx = x - px; var dy = y - py; d += Math.sqrt(dx * dx + dy * dy); px = x; py = y; } return d; } //#endregion //#region node_modules/zrender/lib/animation/cubicEasing.js var regexp = /cubic-bezier\(([0-9,\.e ]+)\)/; function createCubicEasingFunc(cubicEasingStr) { var cubic = cubicEasingStr && regexp.exec(cubicEasingStr); if (cubic) { var points = cubic[1].split(","); var a_1 = +trim$1(points[0]); var b_1 = +trim$1(points[1]); var c_1 = +trim$1(points[2]); var d_1 = +trim$1(points[3]); if (isNaN(a_1 + b_1 + c_1 + d_1)) return; var roots_1 = []; return function(p) { return p <= 0 ? 0 : p >= 1 ? 1 : cubicRootAt(0, a_1, c_1, 1, p, roots_1) && cubicAt(0, b_1, d_1, 1, roots_1[0]); }; } } //#endregion //#region node_modules/zrender/lib/animation/Clip.js var Clip = function() { function Clip(opts) { this._inited = false; this._startTime = 0; this._pausedTime = 0; this._paused = false; this._life = opts.life || 1e3; this._delay = opts.delay || 0; this.loop = opts.loop || false; this.onframe = opts.onframe || noop; this.ondestroy = opts.ondestroy || noop; this.onrestart = opts.onrestart || noop; opts.easing && this.setEasing(opts.easing); } Clip.prototype.step = function(globalTime, deltaTime) { if (!this._inited) { this._startTime = globalTime + this._delay; this._inited = true; } if (this._paused) { this._pausedTime += deltaTime; return; } var life = this._life; var elapsedTime = globalTime - this._startTime - this._pausedTime; var percent = elapsedTime / life; if (percent < 0) percent = 0; percent = Math.min(percent, 1); var easingFunc = this.easingFunc; var schedule = easingFunc ? easingFunc(percent) : percent; this.onframe(schedule); if (percent === 1) { if (this.loop) { var remainder = elapsedTime % life; this._startTime = globalTime - remainder; this._pausedTime = 0; this.onrestart(); } else return true; } return false; }; Clip.prototype.pause = function() { this._paused = true; }; Clip.prototype.resume = function() { this._paused = false; }; Clip.prototype.setEasing = function(easing) { this.easing = easing; this.easingFunc = isFunction(easing) ? easing : easingFuncs[easing] || createCubicEasingFunc(easing); }; return Clip; }(); //#endregion //#region node_modules/zrender/lib/core/LRU.js var Entry = function() { function Entry(val) { this.value = val; } return Entry; }(); var LinkedList = function() { function LinkedList() { this._len = 0; } LinkedList.prototype.insert = function(val) { var entry = new Entry(val); this.insertEntry(entry); return entry; }; LinkedList.prototype.insertEntry = function(entry) { if (!this.head) this.head = this.tail = entry; else { this.tail.next = entry; entry.prev = this.tail; entry.next = null; this.tail = entry; } this._len++; }; LinkedList.prototype.remove = function(entry) { var prev = entry.prev; var next = entry.next; if (prev) prev.next = next; else this.head = next; if (next) next.prev = prev; else this.tail = prev; entry.next = entry.prev = null; this._len--; }; LinkedList.prototype.len = function() { return this._len; }; LinkedList.prototype.clear = function() { this.head = this.tail = null; this._len = 0; }; return LinkedList; }(); var LRU = function() { function LRU(maxSize) { this._list = new LinkedList(); this._maxSize = 10; this._map = {}; this._maxSize = maxSize; } LRU.prototype.put = function(key, value) { var list = this._list; var map = this._map; var removed = null; if (map[key] == null) { var len = list.len(); var entry = this._lastRemovedEntry; if (len >= this._maxSize && len > 0) { var leastUsedEntry = list.head; list.remove(leastUsedEntry); delete map[leastUsedEntry.key]; removed = leastUsedEntry.value; this._lastRemovedEntry = leastUsedEntry; } if (entry) entry.value = value; else entry = new Entry(value); entry.key = key; list.insertEntry(entry); map[key] = entry; } return removed; }; LRU.prototype.get = function(key) { var entry = this._map[key]; var list = this._list; if (entry != null) { if (entry !== list.tail) { list.remove(entry); list.insertEntry(entry); } return entry.value; } }; LRU.prototype.clear = function() { this._list.clear(); this._map = {}; }; LRU.prototype.len = function() { return this._list.len(); }; return LRU; }(); //#endregion //#region node_modules/zrender/lib/tool/color.js var color_exports = /* @__PURE__ */ __exportAll({ fastLerp: () => fastLerp, fastMapToColor: () => fastMapToColor, lerp: () => lerp, lift: () => lift, liftColor: () => liftColor, lum: () => lum, mapToColor: () => mapToColor, modifyAlpha: () => modifyAlpha, modifyHSL: () => modifyHSL, parse: () => parse, parseCssFloat: () => parseCssFloat, parseCssInt: () => parseCssInt, random: () => random, stringify: () => stringify, toHex: () => toHex }); var kCSSColorTable = { "transparent": [ 0, 0, 0, 0 ], "aliceblue": [ 240, 248, 255, 1 ], "antiquewhite": [ 250, 235, 215, 1 ], "aqua": [ 0, 255, 255, 1 ], "aquamarine": [ 127, 255, 212, 1 ], "azure": [ 240, 255, 255, 1 ], "beige": [ 245, 245, 220, 1 ], "bisque": [ 255, 228, 196, 1 ], "black": [ 0, 0, 0, 1 ], "blanchedalmond": [ 255, 235, 205, 1 ], "blue": [ 0, 0, 255, 1 ], "blueviolet": [ 138, 43, 226, 1 ], "brown": [ 165, 42, 42, 1 ], "burlywood": [ 222, 184, 135, 1 ], "cadetblue": [ 95, 158, 160, 1 ], "chartreuse": [ 127, 255, 0, 1 ], "chocolate": [ 210, 105, 30, 1 ], "coral": [ 255, 127, 80, 1 ], "cornflowerblue": [ 100, 149, 237, 1 ], "cornsilk": [ 255, 248, 220, 1 ], "crimson": [ 220, 20, 60, 1 ], "cyan": [ 0, 255, 255, 1 ], "darkblue": [ 0, 0, 139, 1 ], "darkcyan": [ 0, 139, 139, 1 ], "darkgoldenrod": [ 184, 134, 11, 1 ], "darkgray": [ 169, 169, 169, 1 ], "darkgreen": [ 0, 100, 0, 1 ], "darkgrey": [ 169, 169, 169, 1 ], "darkkhaki": [ 189, 183, 107, 1 ], "darkmagenta": [ 139, 0, 139, 1 ], "darkolivegreen": [ 85, 107, 47, 1 ], "darkorange": [ 255, 140, 0, 1 ], "darkorchid": [ 153, 50, 204, 1 ], "darkred": [ 139, 0, 0, 1 ], "darksalmon": [ 233, 150, 122, 1 ], "darkseagreen": [ 143, 188, 143, 1 ], "darkslateblue": [ 72, 61, 139, 1 ], "darkslategray": [ 47, 79, 79, 1 ], "darkslategrey": [ 47, 79, 79, 1 ], "darkturquoise": [ 0, 206, 209, 1 ], "darkviolet": [ 148, 0, 211, 1 ], "deeppink": [ 255, 20, 147, 1 ], "deepskyblue": [ 0, 191, 255, 1 ], "dimgray": [ 105, 105, 105, 1 ], "dimgrey": [ 105, 105, 105, 1 ], "dodgerblue": [ 30, 144, 255, 1 ], "firebrick": [ 178, 34, 34, 1 ], "floralwhite": [ 255, 250, 240, 1 ], "forestgreen": [ 34, 139, 34, 1 ], "fuchsia": [ 255, 0, 255, 1 ], "gainsboro": [ 220, 220, 220, 1 ], "ghostwhite": [ 248, 248, 255, 1 ], "gold": [ 255, 215, 0, 1 ], "goldenrod": [ 218, 165, 32, 1 ], "gray": [ 128, 128, 128, 1 ], "green": [ 0, 128, 0, 1 ], "greenyellow": [ 173, 255, 47, 1 ], "grey": [ 128, 128, 128, 1 ], "honeydew": [ 240, 255, 240, 1 ], "hotpink": [ 255, 105, 180, 1 ], "indianred": [ 205, 92, 92, 1 ], "indigo": [ 75, 0, 130, 1 ], "ivory": [ 255, 255, 240, 1 ], "khaki": [ 240, 230, 140, 1 ], "lavender": [ 230, 230, 250, 1 ], "lavenderblush": [ 255, 240, 245, 1 ], "lawngreen": [ 124, 252, 0, 1 ], "lemonchiffon": [ 255, 250, 205, 1 ], "lightblue": [ 173, 216, 230, 1 ], "lightcoral": [ 240, 128, 128, 1 ], "lightcyan": [ 224, 255, 255, 1 ], "lightgoldenrodyellow": [ 250, 250, 210, 1 ], "lightgray": [ 211, 211, 211, 1 ], "lightgreen": [ 144, 238, 144, 1 ], "lightgrey": [ 211, 211, 211, 1 ], "lightpink": [ 255, 182, 193, 1 ], "lightsalmon": [ 255, 160, 122, 1 ], "lightseagreen": [ 32, 178, 170, 1 ], "lightskyblue": [ 135, 206, 250, 1 ], "lightslategray": [ 119, 136, 153, 1 ], "lightslategrey": [ 119, 136, 153, 1 ], "lightsteelblue": [ 176, 196, 222, 1 ], "lightyellow": [ 255, 255, 224, 1 ], "lime": [ 0, 255, 0, 1 ], "limegreen": [ 50, 205, 50, 1 ], "linen": [ 250, 240, 230, 1 ], "magenta": [ 255, 0, 255, 1 ], "maroon": [ 128, 0, 0, 1 ], "mediumaquamarine": [ 102, 205, 170, 1 ], "mediumblue": [ 0, 0, 205, 1 ], "mediumorchid": [ 186, 85, 211, 1 ], "mediumpurple": [ 147, 112, 219, 1 ], "mediumseagreen": [ 60, 179, 113, 1 ], "mediumslateblue": [ 123, 104, 238, 1 ], "mediumspringgreen": [ 0, 250, 154, 1 ], "mediumturquoise": [ 72, 209, 204, 1 ], "mediumvioletred": [ 199, 21, 133, 1 ], "midnightblue": [ 25, 25, 112, 1 ], "mintcream": [ 245, 255, 250, 1 ], "mistyrose": [ 255, 228, 225, 1 ], "moccasin": [ 255, 228, 181, 1 ], "navajowhite": [ 255, 222, 173, 1 ], "navy": [ 0, 0, 128, 1 ], "oldlace": [ 253, 245, 230, 1 ], "olive": [ 128, 128, 0, 1 ], "olivedrab": [ 107, 142, 35, 1 ], "orange": [ 255, 165, 0, 1 ], "orangered": [ 255, 69, 0, 1 ], "orchid": [ 218, 112, 214, 1 ], "palegoldenrod": [ 238, 232, 170, 1 ], "palegreen": [ 152, 251, 152, 1 ], "paleturquoise": [ 175, 238, 238, 1 ], "palevioletred": [ 219, 112, 147, 1 ], "papayawhip": [ 255, 239, 213, 1 ], "peachpuff": [ 255, 218, 185, 1 ], "peru": [ 205, 133, 63, 1 ], "pink": [ 255, 192, 203, 1 ], "plum": [ 221, 160, 221, 1 ], "powderblue": [ 176, 224, 230, 1 ], "purple": [ 128, 0, 128, 1 ], "red": [ 255, 0, 0, 1 ], "rosybrown": [ 188, 143, 143, 1 ], "royalblue": [ 65, 105, 225, 1 ], "saddlebrown": [ 139, 69, 19, 1 ], "salmon": [ 250, 128, 114, 1 ], "sandybrown": [ 244, 164, 96, 1 ], "seagreen": [ 46, 139, 87, 1 ], "seashell": [ 255, 245, 238, 1 ], "sienna": [ 160, 82, 45, 1 ], "silver": [ 192, 192, 192, 1 ], "skyblue": [ 135, 206, 235, 1 ], "slateblue": [ 106, 90, 205, 1 ], "slategray": [ 112, 128, 144, 1 ], "slategrey": [ 112, 128, 144, 1 ], "snow": [ 255, 250, 250, 1 ], "springgreen": [ 0, 255, 127, 1 ], "steelblue": [ 70, 130, 180, 1 ], "tan": [ 210, 180, 140, 1 ], "teal": [ 0, 128, 128, 1 ], "thistle": [ 216, 191, 216, 1 ], "tomato": [ 255, 99, 71, 1 ], "turquoise": [ 64, 224, 208, 1 ], "violet": [ 238, 130, 238, 1 ], "wheat": [ 245, 222, 179, 1 ], "white": [ 255, 255, 255, 1 ], "whitesmoke": [ 245, 245, 245, 1 ], "yellow": [ 255, 255, 0, 1 ], "yellowgreen": [ 154, 205, 50, 1 ] }; function clampCssByte(i) { i = Math.round(i); return i < 0 ? 0 : i > 255 ? 255 : i; } function clampCssAngle(i) { i = Math.round(i); return i < 0 ? 0 : i > 360 ? 360 : i; } function clampCssFloat(f) { return f < 0 ? 0 : f > 1 ? 1 : f; } function parseCssInt(val) { var str = val; if (str.length && str.charAt(str.length - 1) === "%") return clampCssByte(parseFloat(str) / 100 * 255); return clampCssByte(parseInt(str, 10)); } function parseCssFloat(val) { var str = val; if (str.length && str.charAt(str.length - 1) === "%") return clampCssFloat(parseFloat(str) / 100); return clampCssFloat(parseFloat(str)); } function cssHueToRgb(m1, m2, h) { if (h < 0) h += 1; else if (h > 1) h -= 1; if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; if (h * 2 < 1) return m2; if (h * 3 < 2) return m1 + (m2 - m1) * (2 / 3 - h) * 6; return m1; } function lerpNumber(a, b, p) { return a + (b - a) * p; } function setRgba(out, r, g, b, a) { out[0] = r; out[1] = g; out[2] = b; out[3] = a; return out; } function copyRgba(out, a) { out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; return out; } var colorCache = new LRU(20); var lastRemovedArr = null; function putToCache(colorStr, rgbaArr) { if (lastRemovedArr) copyRgba(lastRemovedArr, rgbaArr); lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || rgbaArr.slice()); } function parse(colorStr, rgbaArr) { if (!colorStr) return; rgbaArr = rgbaArr || []; var cached = colorCache.get(colorStr); if (cached) return copyRgba(rgbaArr, cached); colorStr = colorStr + ""; var str = colorStr.replace(/ /g, "").toLowerCase(); if (str in kCSSColorTable) { copyRgba(rgbaArr, kCSSColorTable[str]); putToCache(colorStr, rgbaArr); return rgbaArr; } var strLen = str.length; if (str.charAt(0) === "#") { if (strLen === 4 || strLen === 5) { var iv = parseInt(str.slice(1, 4), 16); if (!(iv >= 0 && iv <= 4095)) { setRgba(rgbaArr, 0, 0, 0, 1); return; } setRgba(rgbaArr, (iv & 3840) >> 4 | (iv & 3840) >> 8, iv & 240 | (iv & 240) >> 4, iv & 15 | (iv & 15) << 4, strLen === 5 ? parseInt(str.slice(4), 16) / 15 : 1); putToCache(colorStr, rgbaArr); return rgbaArr; } else if (strLen === 7 || strLen === 9) { var iv = parseInt(str.slice(1, 7), 16); if (!(iv >= 0 && iv <= 16777215)) { setRgba(rgbaArr, 0, 0, 0, 1); return; } setRgba(rgbaArr, (iv & 16711680) >> 16, (iv & 65280) >> 8, iv & 255, strLen === 9 ? parseInt(str.slice(7), 16) / 255 : 1); putToCache(colorStr, rgbaArr); return rgbaArr; } return; } var op = str.indexOf("("); var ep = str.indexOf(")"); if (op !== -1 && ep + 1 === strLen) { var fname = str.substr(0, op); var params = str.substr(op + 1, ep - (op + 1)).split(","); var alpha = 1; switch (fname) { case "rgba": if (params.length !== 4) return params.length === 3 ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1) : setRgba(rgbaArr, 0, 0, 0, 1); alpha = parseCssFloat(params.pop()); case "rgb": if (params.length >= 3) { setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), params.length === 3 ? alpha : parseCssFloat(params[3])); putToCache(colorStr, rgbaArr); return rgbaArr; } else { setRgba(rgbaArr, 0, 0, 0, 1); return; } case "hsla": if (params.length !== 4) { setRgba(rgbaArr, 0, 0, 0, 1); return; } params[3] = parseCssFloat(params[3]); hsla2rgba(params, rgbaArr); putToCache(colorStr, rgbaArr); return rgbaArr; case "hsl": if (params.length !== 3) { setRgba(rgbaArr, 0, 0, 0, 1); return; } hsla2rgba(params, rgbaArr); putToCache(colorStr, rgbaArr); return rgbaArr; default: return; } } setRgba(rgbaArr, 0, 0, 0, 1); } function hsla2rgba(hsla, rgba) { var h = (parseFloat(hsla[0]) % 360 + 360) % 360 / 360; var s = parseCssFloat(hsla[1]); var l = parseCssFloat(hsla[2]); var m2 = l <= .5 ? l * (s + 1) : l + s - l * s; var m1 = l * 2 - m2; rgba = rgba || []; setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1); if (hsla.length === 4) rgba[3] = hsla[3]; return rgba; } function rgba2hsla(rgba) { if (!rgba) return; var R = rgba[0] / 255; var G = rgba[1] / 255; var B = rgba[2] / 255; var vMin = Math.min(R, G, B); var vMax = Math.max(R, G, B); var delta = vMax - vMin; var L = (vMax + vMin) / 2; var H; var S; if (delta === 0) { H = 0; S = 0; } else { if (L < .5) S = delta / (vMax + vMin); else S = delta / (2 - vMax - vMin); var deltaR = ((vMax - R) / 6 + delta / 2) / delta; var deltaG = ((vMax - G) / 6 + delta / 2) / delta; var deltaB = ((vMax - B) / 6 + delta / 2) / delta; if (R === vMax) H = deltaB - deltaG; else if (G === vMax) H = 1 / 3 + deltaR - deltaB; else if (B === vMax) H = 2 / 3 + deltaG - deltaR; if (H < 0) H += 1; if (H > 1) H -= 1; } var hsla = [ H * 360, S, L ]; if (rgba[3] != null) hsla.push(rgba[3]); return hsla; } function lift(color, level) { var colorArr = parse(color); if (colorArr) { for (var i = 0; i < 3; i++) { if (level < 0) colorArr[i] = colorArr[i] * (1 - level) | 0; else colorArr[i] = (255 - colorArr[i]) * level + colorArr[i] | 0; if (colorArr[i] > 255) colorArr[i] = 255; else if (colorArr[i] < 0) colorArr[i] = 0; } return stringify(colorArr, colorArr.length === 4 ? "rgba" : "rgb"); } } function toHex(color) { var colorArr = parse(color); if (colorArr) return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + +colorArr[2]).toString(16).slice(1); } function fastLerp(normalizedValue, colors, out) { if (!(colors && colors.length) || !(normalizedValue >= 0 && normalizedValue <= 1)) return; out = out || []; var value = normalizedValue * (colors.length - 1); var leftIndex = Math.floor(value); var rightIndex = Math.ceil(value); var leftColor = colors[leftIndex]; var rightColor = colors[rightIndex]; var dv = value - leftIndex; out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); return out; } var fastMapToColor = fastLerp; function lerp(normalizedValue, colors, fullOutput) { if (!(colors && colors.length) || !(normalizedValue >= 0 && normalizedValue <= 1)) return; var value = normalizedValue * (colors.length - 1); var leftIndex = Math.floor(value); var rightIndex = Math.ceil(value); var leftColor = parse(colors[leftIndex]); var rightColor = parse(colors[rightIndex]); var dv = value - leftIndex; var color = stringify([ clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) ], "rgba"); return fullOutput ? { color, leftIndex, rightIndex, value } : color; } var mapToColor = lerp; function modifyHSL(color, h, s, l) { var colorArr = parse(color); if (color) { colorArr = rgba2hsla(colorArr); h != null && (colorArr[0] = clampCssAngle(isFunction(h) ? h(colorArr[0]) : h)); s != null && (colorArr[1] = parseCssFloat(isFunction(s) ? s(colorArr[1]) : s)); l != null && (colorArr[2] = parseCssFloat(isFunction(l) ? l(colorArr[2]) : l)); return stringify(hsla2rgba(colorArr), "rgba"); } } function modifyAlpha(color, alpha) { var colorArr = parse(color); if (colorArr && alpha != null) { colorArr[3] = clampCssFloat(alpha); return stringify(colorArr, "rgba"); } } function stringify(arrColor, type) { if (!arrColor || !arrColor.length) return; var colorStr = arrColor[0] + "," + arrColor[1] + "," + arrColor[2]; if (type === "rgba" || type === "hsva" || type === "hsla") colorStr += "," + arrColor[3]; return type + "(" + colorStr + ")"; } function lum(color, backgroundLum) { var arr = parse(color); return arr ? (.299 * arr[0] + .587 * arr[1] + .114 * arr[2]) * arr[3] / 255 + (1 - arr[3]) * backgroundLum : 0; } function random() { return stringify([ Math.round(Math.random() * 255), Math.round(Math.random() * 255), Math.round(Math.random() * 255) ], "rgb"); } var liftedColorCache = new LRU(100); function liftColor(color) { if (isString(color)) { var liftedColor = liftedColorCache.get(color); if (!liftedColor) { liftedColor = lift(color, -.1); liftedColorCache.put(color, liftedColor); } return liftedColor; } else if (isGradientObject(color)) { var ret = extend({}, color); ret.colorStops = map$1(color.colorStops, function(stop) { return { offset: stop.offset, color: lift(stop.color, -.1) }; }); return ret; } return color; } //#endregion //#region node_modules/zrender/lib/svg/helper.js var mathRound$2 = Math.round; function normalizeColor(color) { var opacity; if (!color || color === "transparent") color = "none"; else if (typeof color === "string" && color.indexOf("rgba") > -1) { var arr = parse(color); if (arr) { color = "rgb(" + arr[0] + "," + arr[1] + "," + arr[2] + ")"; opacity = arr[3]; } } return { color, opacity: opacity == null ? 1 : opacity }; } var EPSILON$3 = 1e-4; function isAroundZero(transform) { return transform < EPSILON$3 && transform > -EPSILON$3; } function round3(transform) { return mathRound$2(transform * 1e3) / 1e3; } function round4(transform) { return mathRound$2(transform * 1e4) / 1e4; } function getMatrixStr(m) { return "matrix(" + round3(m[0]) + "," + round3(m[1]) + "," + round3(m[2]) + "," + round3(m[3]) + "," + round4(m[4]) + "," + round4(m[5]) + ")"; } var TEXT_ALIGN_TO_ANCHOR = { left: "start", right: "end", center: "middle", middle: "middle" }; function adjustTextY$1(y, lineHeight, textBaseline) { if (textBaseline === "top") y += lineHeight / 2; else if (textBaseline === "bottom") y -= lineHeight / 2; return y; } function hasShadow(style) { return style && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY); } function getShadowKey(displayable) { var style = displayable.style; var globalScale = displayable.getGlobalScale(); return [ style.shadowColor, (style.shadowBlur || 0).toFixed(2), (style.shadowOffsetX || 0).toFixed(2), (style.shadowOffsetY || 0).toFixed(2), globalScale[0], globalScale[1] ].join(","); } function isImagePattern(val) { return val && !!val.image; } function isSVGPattern(val) { return val && !!val.svgElement; } function isPattern(val) { return isImagePattern(val) || isSVGPattern(val); } function isLinearGradient(val) { return val.type === "linear"; } function isRadialGradient(val) { return val.type === "radial"; } function isGradient(val) { return val && (val.type === "linear" || val.type === "radial"); } function getIdURL(id) { return "url(#" + id + ")"; } function getPathPrecision(el) { var scale = el.getGlobalScale(); var size = Math.max(scale[0], scale[1]); return Math.max(Math.ceil(Math.log(size) / Math.log(10)), 1); } function getSRTTransformString(transform) { var x = transform.x || 0; var y = transform.y || 0; var rotation = (transform.rotation || 0) * RADIAN_TO_DEGREE; var scaleX = retrieve2(transform.scaleX, 1); var scaleY = retrieve2(transform.scaleY, 1); var skewX = transform.skewX || 0; var skewY = transform.skewY || 0; var res = []; if (x || y) res.push("translate(" + x + "px," + y + "px)"); if (rotation) res.push("rotate(" + rotation + ")"); if (scaleX !== 1 || scaleY !== 1) res.push("scale(" + scaleX + "," + scaleY + ")"); if (skewX || skewY) res.push("skew(" + mathRound$2(skewX * RADIAN_TO_DEGREE) + "deg, " + mathRound$2(skewY * RADIAN_TO_DEGREE) + "deg)"); return res.join(" "); } var encodeBase64 = (function() { if (typeof Buffer !== "undefined" && typeof Buffer.from === "function") return function(str) { return Buffer.from(str).toString("base64"); }; if (typeof btoa === "function" && typeof unescape === "function" && typeof encodeURIComponent === "function") return function(str) { return btoa(unescape(encodeURIComponent(str))); }; return function(str) { logError("Base64 isn't natively supported in the current environment."); return null; }; })(); //#endregion //#region node_modules/zrender/lib/animation/Animator.js var arraySlice = Array.prototype.slice; function interpolateNumber$1(p0, p1, percent) { return (p1 - p0) * percent + p0; } function interpolate1DArray(out, p0, p1, percent) { var len = p0.length; for (var i = 0; i < len; i++) out[i] = interpolateNumber$1(p0[i], p1[i], percent); return out; } function interpolate2DArray(out, p0, p1, percent) { var len = p0.length; var len2 = len && p0[0].length; for (var i = 0; i < len; i++) { if (!out[i]) out[i] = []; for (var j = 0; j < len2; j++) out[i][j] = interpolateNumber$1(p0[i][j], p1[i][j], percent); } return out; } function add1DArray(out, p0, p1, sign) { var len = p0.length; for (var i = 0; i < len; i++) out[i] = p0[i] + p1[i] * sign; return out; } function add2DArray(out, p0, p1, sign) { var len = p0.length; var len2 = len && p0[0].length; for (var i = 0; i < len; i++) { if (!out[i]) out[i] = []; for (var j = 0; j < len2; j++) out[i][j] = p0[i][j] + p1[i][j] * sign; } return out; } function fillColorStops(val0, val1) { var len0 = val0.length; var len1 = val1.length; var shorterArr = len0 > len1 ? val1 : val0; var shorterLen = Math.min(len0, len1); var last = shorterArr[shorterLen - 1] || { color: [ 0, 0, 0, 0 ], offset: 0 }; for (var i = shorterLen; i < Math.max(len0, len1); i++) shorterArr.push({ offset: last.offset, color: last.color.slice() }); } function fillArray(val0, val1, arrDim) { var arr0 = val0; var arr1 = val1; if (!arr0.push || !arr1.push) return; var arr0Len = arr0.length; var arr1Len = arr1.length; if (arr0Len !== arr1Len) { if (arr0Len > arr1Len) arr0.length = arr1Len; else for (var i = arr0Len; i < arr1Len; i++) arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])); } var len2 = arr0[0] && arr0[0].length; for (var i = 0; i < arr0.length; i++) if (arrDim === 1) { if (isNaN(arr0[i])) arr0[i] = arr1[i]; } else for (var j = 0; j < len2; j++) if (isNaN(arr0[i][j])) arr0[i][j] = arr1[i][j]; } function cloneValue(value) { if (isArrayLike(value)) { var len = value.length; if (isArrayLike(value[0])) { var ret = []; for (var i = 0; i < len; i++) ret.push(arraySlice.call(value[i])); return ret; } return arraySlice.call(value); } return value; } function rgba2String(rgba) { rgba[0] = Math.floor(rgba[0]) || 0; rgba[1] = Math.floor(rgba[1]) || 0; rgba[2] = Math.floor(rgba[2]) || 0; rgba[3] = rgba[3] == null ? 1 : rgba[3]; return "rgba(" + rgba.join(",") + ")"; } function guessArrayDim(value) { return isArrayLike(value && value[0]) ? 2 : 1; } var VALUE_TYPE_NUMBER = 0; var VALUE_TYPE_1D_ARRAY = 1; var VALUE_TYPE_2D_ARRAY = 2; var VALUE_TYPE_COLOR = 3; var VALUE_TYPE_LINEAR_GRADIENT = 4; var VALUE_TYPE_RADIAL_GRADIENT = 5; var VALUE_TYPE_UNKOWN = 6; function isGradientValueType(valType) { return valType === VALUE_TYPE_LINEAR_GRADIENT || valType === VALUE_TYPE_RADIAL_GRADIENT; } function isArrayValueType(valType) { return valType === VALUE_TYPE_1D_ARRAY || valType === VALUE_TYPE_2D_ARRAY; } var tmpRgba = [ 0, 0, 0, 0 ]; var Track = function() { function Track(propName) { this.keyframes = []; this.discrete = false; this._invalid = false; this._needsSort = false; this._lastFr = 0; this._lastFrP = 0; this.propName = propName; } Track.prototype.isFinished = function() { return this._finished; }; Track.prototype.setFinished = function() { this._finished = true; if (this._additiveTrack) this._additiveTrack.setFinished(); }; Track.prototype.needsAnimate = function() { return this.keyframes.length >= 1; }; Track.prototype.getAdditiveTrack = function() { return this._additiveTrack; }; Track.prototype.addKeyframe = function(time, rawValue, easing) { this._needsSort = true; var keyframes = this.keyframes; var len = keyframes.length; var discrete = false; var valType = VALUE_TYPE_UNKOWN; var value = rawValue; if (isArrayLike(rawValue)) { var arrayDim = guessArrayDim(rawValue); valType = arrayDim; if (arrayDim === 1 && !isNumber(rawValue[0]) || arrayDim === 2 && !isNumber(rawValue[0][0])) discrete = true; } else if (isNumber(rawValue) && !eqNaN(rawValue)) valType = VALUE_TYPE_NUMBER; else if (isString(rawValue)) { if (!isNaN(+rawValue)) valType = VALUE_TYPE_NUMBER; else { var colorArray = parse(rawValue); if (colorArray) { value = colorArray; valType = VALUE_TYPE_COLOR; } } } else if (isGradientObject(rawValue)) { var parsedGradient = extend({}, value); parsedGradient.colorStops = map$1(rawValue.colorStops, function(colorStop) { return { offset: colorStop.offset, color: parse(colorStop.color) }; }); if (isLinearGradient(rawValue)) valType = VALUE_TYPE_LINEAR_GRADIENT; else if (isRadialGradient(rawValue)) valType = VALUE_TYPE_RADIAL_GRADIENT; value = parsedGradient; } if (len === 0) this.valType = valType; else if (valType !== this.valType || valType === VALUE_TYPE_UNKOWN) discrete = true; this.discrete = this.discrete || discrete; var kf = { time, value, rawValue, percent: 0 }; if (easing) { kf.easing = easing; kf.easingFunc = isFunction(easing) ? easing : easingFuncs[easing] || createCubicEasingFunc(easing); } keyframes.push(kf); return kf; }; Track.prototype.prepare = function(maxTime, additiveTrack) { var kfs = this.keyframes; if (this._needsSort) kfs.sort(function(a, b) { return a.time - b.time; }); var valType = this.valType; var kfsLen = kfs.length; var lastKf = kfs[kfsLen - 1]; var isDiscrete = this.discrete; var isArr = isArrayValueType(valType); var isGradient = isGradientValueType(valType); for (var i = 0; i < kfsLen; i++) { var kf = kfs[i]; var value = kf.value; var lastValue = lastKf.value; kf.percent = kf.time / maxTime; if (!isDiscrete) { if (isArr && i !== kfsLen - 1) fillArray(value, lastValue, valType); else if (isGradient) fillColorStops(value.colorStops, lastValue.colorStops); } } if (!isDiscrete && valType !== VALUE_TYPE_RADIAL_GRADIENT && additiveTrack && this.needsAnimate() && additiveTrack.needsAnimate() && valType === additiveTrack.valType && !additiveTrack._finished) { this._additiveTrack = additiveTrack; var startValue = kfs[0].value; for (var i = 0; i < kfsLen; i++) if (valType === VALUE_TYPE_NUMBER) kfs[i].additiveValue = kfs[i].value - startValue; else if (valType === VALUE_TYPE_COLOR) kfs[i].additiveValue = add1DArray([], kfs[i].value, startValue, -1); else if (isArrayValueType(valType)) kfs[i].additiveValue = valType === VALUE_TYPE_1D_ARRAY ? add1DArray([], kfs[i].value, startValue, -1) : add2DArray([], kfs[i].value, startValue, -1); } }; Track.prototype.step = function(target, percent) { if (this._finished) return; if (this._additiveTrack && this._additiveTrack._finished) this._additiveTrack = null; var isAdditive = this._additiveTrack != null; var valueKey = isAdditive ? "additiveValue" : "value"; var valType = this.valType; var keyframes = this.keyframes; var kfsNum = keyframes.length; var propName = this.propName; var isValueColor = valType === VALUE_TYPE_COLOR; var frameIdx; var lastFrame = this._lastFr; var mathMin = Math.min; var frame; var nextFrame; if (kfsNum === 1) frame = nextFrame = keyframes[0]; else { if (percent < 0) frameIdx = 0; else if (percent < this._lastFrP) { for (frameIdx = mathMin(lastFrame + 1, kfsNum - 1); frameIdx >= 0; frameIdx--) if (keyframes[frameIdx].percent <= percent) break; frameIdx = mathMin(frameIdx, kfsNum - 2); } else { for (frameIdx = lastFrame; frameIdx < kfsNum; frameIdx++) if (keyframes[frameIdx].percent > percent) break; frameIdx = mathMin(frameIdx - 1, kfsNum - 2); } nextFrame = keyframes[frameIdx + 1]; frame = keyframes[frameIdx]; } if (!(frame && nextFrame)) return; this._lastFr = frameIdx; this._lastFrP = percent; var interval = nextFrame.percent - frame.percent; var w = interval === 0 ? 1 : mathMin((percent - frame.percent) / interval, 1); if (nextFrame.easingFunc) w = nextFrame.easingFunc(w); var targetArr = isAdditive ? this._additiveValue : isValueColor ? tmpRgba : target[propName]; if ((isArrayValueType(valType) || isValueColor) && !targetArr) targetArr = this._additiveValue = []; if (this.discrete) target[propName] = w < 1 ? frame.rawValue : nextFrame.rawValue; else if (isArrayValueType(valType)) valType === VALUE_TYPE_1D_ARRAY ? interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w) : interpolate2DArray(targetArr, frame[valueKey], nextFrame[valueKey], w); else if (isGradientValueType(valType)) { var val = frame[valueKey]; var nextVal_1 = nextFrame[valueKey]; var isLinearGradient_1 = valType === VALUE_TYPE_LINEAR_GRADIENT; target[propName] = { type: isLinearGradient_1 ? "linear" : "radial", x: interpolateNumber$1(val.x, nextVal_1.x, w), y: interpolateNumber$1(val.y, nextVal_1.y, w), colorStops: map$1(val.colorStops, function(colorStop, idx) { var nextColorStop = nextVal_1.colorStops[idx]; return { offset: interpolateNumber$1(colorStop.offset, nextColorStop.offset, w), color: rgba2String(interpolate1DArray([], colorStop.color, nextColorStop.color, w)) }; }), global: nextVal_1.global }; if (isLinearGradient_1) { target[propName].x2 = interpolateNumber$1(val.x2, nextVal_1.x2, w); target[propName].y2 = interpolateNumber$1(val.y2, nextVal_1.y2, w); } else target[propName].r = interpolateNumber$1(val.r, nextVal_1.r, w); } else if (isValueColor) { interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w); if (!isAdditive) target[propName] = rgba2String(targetArr); } else { var value = interpolateNumber$1(frame[valueKey], nextFrame[valueKey], w); if (isAdditive) this._additiveValue = value; else target[propName] = value; } if (isAdditive) this._addToTarget(target); }; Track.prototype._addToTarget = function(target) { var valType = this.valType; var propName = this.propName; var additiveValue = this._additiveValue; if (valType === VALUE_TYPE_NUMBER) target[propName] = target[propName] + additiveValue; else if (valType === VALUE_TYPE_COLOR) { parse(target[propName], tmpRgba); add1DArray(tmpRgba, tmpRgba, additiveValue, 1); target[propName] = rgba2String(tmpRgba); } else if (valType === VALUE_TYPE_1D_ARRAY) add1DArray(target[propName], target[propName], additiveValue, 1); else if (valType === VALUE_TYPE_2D_ARRAY) add2DArray(target[propName], target[propName], additiveValue, 1); }; return Track; }(); var Animator = function() { function Animator(target, loop, allowDiscreteAnimation, additiveTo) { this._tracks = {}; this._trackKeys = []; this._maxTime = 0; this._started = 0; this._clip = null; this._target = target; this._loop = loop; if (loop && additiveTo) { logError("Can' use additive animation on looped animation."); return; } this._additiveAnimators = additiveTo; this._allowDiscrete = allowDiscreteAnimation; } Animator.prototype.getMaxTime = function() { return this._maxTime; }; Animator.prototype.getDelay = function() { return this._delay; }; Animator.prototype.getLoop = function() { return this._loop; }; Animator.prototype.getTarget = function() { return this._target; }; Animator.prototype.changeTarget = function(target) { this._target = target; }; Animator.prototype.when = function(time, props, easing) { return this.whenWithKeys(time, props, keys(props), easing); }; Animator.prototype.whenWithKeys = function(time, props, propNames, easing) { var tracks = this._tracks; for (var i = 0; i < propNames.length; i++) { var propName = propNames[i]; var track = tracks[propName]; if (!track) { track = tracks[propName] = new Track(propName); var initialValue = void 0; var additiveTrack = this._getAdditiveTrack(propName); if (additiveTrack) { var addtiveTrackKfs = additiveTrack.keyframes; var lastFinalKf = addtiveTrackKfs[addtiveTrackKfs.length - 1]; initialValue = lastFinalKf && lastFinalKf.value; if (additiveTrack.valType === VALUE_TYPE_COLOR && initialValue) initialValue = rgba2String(initialValue); } else initialValue = this._target[propName]; if (initialValue == null) continue; if (time > 0) track.addKeyframe(0, cloneValue(initialValue), easing); this._trackKeys.push(propName); } track.addKeyframe(time, cloneValue(props[propName]), easing); } this._maxTime = Math.max(this._maxTime, time); return this; }; Animator.prototype.pause = function() { this._clip.pause(); this._paused = true; }; Animator.prototype.resume = function() { this._clip.resume(); this._paused = false; }; Animator.prototype.isPaused = function() { return !!this._paused; }; Animator.prototype.duration = function(duration) { this._maxTime = duration; this._force = true; return this; }; Animator.prototype._doneCallback = function() { this._setTracksFinished(); this._clip = null; var doneList = this._doneCbs; if (doneList) { var len = doneList.length; for (var i = 0; i < len; i++) doneList[i].call(this); } }; Animator.prototype._abortedCallback = function() { this._setTracksFinished(); var animation = this.animation; var abortedList = this._abortedCbs; if (animation) animation.removeClip(this._clip); this._clip = null; if (abortedList) for (var i = 0; i < abortedList.length; i++) abortedList[i].call(this); }; Animator.prototype._setTracksFinished = function() { var tracks = this._tracks; var tracksKeys = this._trackKeys; for (var i = 0; i < tracksKeys.length; i++) tracks[tracksKeys[i]].setFinished(); }; Animator.prototype._getAdditiveTrack = function(trackName) { var additiveTrack; var additiveAnimators = this._additiveAnimators; if (additiveAnimators) for (var i = 0; i < additiveAnimators.length; i++) { var track = additiveAnimators[i].getTrack(trackName); if (track) additiveTrack = track; } return additiveTrack; }; Animator.prototype.start = function(easing) { if (this._started > 0) return; this._started = 1; var self = this; var tracks = []; var maxTime = this._maxTime || 0; for (var i = 0; i < this._trackKeys.length; i++) { var propName = this._trackKeys[i]; var track = this._tracks[propName]; var additiveTrack = this._getAdditiveTrack(propName); var kfs = track.keyframes; var kfsNum = kfs.length; track.prepare(maxTime, additiveTrack); if (track.needsAnimate()) { if (!this._allowDiscrete && track.discrete) { var lastKf = kfs[kfsNum - 1]; if (lastKf) self._target[track.propName] = lastKf.rawValue; track.setFinished(); } else tracks.push(track); } } if (tracks.length || this._force) { var clip = new Clip({ life: maxTime, loop: this._loop, delay: this._delay || 0, onframe: function(percent) { self._started = 2; var additiveAnimators = self._additiveAnimators; if (additiveAnimators) { var stillHasAdditiveAnimator = false; for (var i = 0; i < additiveAnimators.length; i++) if (additiveAnimators[i]._clip) { stillHasAdditiveAnimator = true; break; } if (!stillHasAdditiveAnimator) self._additiveAnimators = null; } for (var i = 0; i < tracks.length; i++) tracks[i].step(self._target, percent); var onframeList = self._onframeCbs; if (onframeList) for (var i = 0; i < onframeList.length; i++) onframeList[i](self._target, percent); }, ondestroy: function() { self._doneCallback(); } }); this._clip = clip; if (this.animation) this.animation.addClip(clip); if (easing) clip.setEasing(easing); } else this._doneCallback(); return this; }; Animator.prototype.stop = function(forwardToLast) { if (!this._clip) return; var clip = this._clip; if (forwardToLast) clip.onframe(1); this._abortedCallback(); }; Animator.prototype.delay = function(time) { this._delay = time; return this; }; Animator.prototype.during = function(cb) { if (cb) { if (!this._onframeCbs) this._onframeCbs = []; this._onframeCbs.push(cb); } return this; }; Animator.prototype.done = function(cb) { if (cb) { if (!this._doneCbs) this._doneCbs = []; this._doneCbs.push(cb); } return this; }; Animator.prototype.aborted = function(cb) { if (cb) { if (!this._abortedCbs) this._abortedCbs = []; this._abortedCbs.push(cb); } return this; }; Animator.prototype.getClip = function() { return this._clip; }; Animator.prototype.getTrack = function(propName) { return this._tracks[propName]; }; Animator.prototype.getTracks = function() { var _this = this; return map$1(this._trackKeys, function(key) { return _this._tracks[key]; }); }; Animator.prototype.stopTracks = function(propNames, forwardToLast) { if (!propNames.length || !this._clip) return true; var tracks = this._tracks; var tracksKeys = this._trackKeys; for (var i = 0; i < propNames.length; i++) { var track = tracks[propNames[i]]; if (track && !track.isFinished()) { if (forwardToLast) track.step(this._target, 1); else if (this._started === 1) track.step(this._target, 0); track.setFinished(); } } var allAborted = true; for (var i = 0; i < tracksKeys.length; i++) if (!tracks[tracksKeys[i]].isFinished()) { allAborted = false; break; } if (allAborted) this._abortedCallback(); return allAborted; }; Animator.prototype.saveTo = function(target, trackKeys, firstOrLast) { if (!target) return; trackKeys = trackKeys || this._trackKeys; for (var i = 0; i < trackKeys.length; i++) { var propName = trackKeys[i]; var track = this._tracks[propName]; if (!track || track.isFinished()) continue; var kfs = track.keyframes; var kf = kfs[firstOrLast ? 0 : kfs.length - 1]; if (kf) target[propName] = cloneValue(kf.rawValue); } }; Animator.prototype.__changeFinalValue = function(finalProps, trackKeys) { trackKeys = trackKeys || keys(finalProps); for (var i = 0; i < trackKeys.length; i++) { var propName = trackKeys[i]; var track = this._tracks[propName]; if (!track) continue; var kfs = track.keyframes; if (kfs.length > 1) { var lastKf = kfs.pop(); track.addKeyframe(lastKf.time, finalProps[propName]); track.prepare(this._maxTime, track.getAdditiveTrack()); } } }; return Animator; }(); //#endregion //#region node_modules/zrender/lib/animation/Animation.js function getTime() { return (/* @__PURE__ */ new Date()).getTime(); } var Animation = function(_super) { __extends(Animation, _super); function Animation(opts) { var _this = _super.call(this) || this; _this._running = false; _this._time = 0; _this._pausedTime = 0; _this._pauseStart = 0; _this._paused = false; opts = opts || {}; _this.stage = opts.stage || {}; return _this; } Animation.prototype.addClip = function(clip) { if (clip.animation) this.removeClip(clip); if (!this._head) this._head = this._tail = clip; else { this._tail.next = clip; clip.prev = this._tail; clip.next = null; this._tail = clip; } clip.animation = this; }; Animation.prototype.addAnimator = function(animator) { animator.animation = this; var clip = animator.getClip(); if (clip) this.addClip(clip); }; Animation.prototype.removeClip = function(clip) { if (!clip.animation) return; var prev = clip.prev; var next = clip.next; if (prev) prev.next = next; else this._head = next; if (next) next.prev = prev; else this._tail = prev; clip.next = clip.prev = clip.animation = null; }; Animation.prototype.removeAnimator = function(animator) { var clip = animator.getClip(); if (clip) this.removeClip(clip); animator.animation = null; }; Animation.prototype.update = function(notTriggerFrameAndStageUpdate) { var time = getTime() - this._pausedTime; var delta = time - this._time; var clip = this._head; while (clip) { var nextClip = clip.next; if (clip.step(time, delta)) { clip.ondestroy(); this.removeClip(clip); clip = nextClip; } else clip = nextClip; } this._time = time; if (!notTriggerFrameAndStageUpdate) { this.trigger("frame", delta); this.stage.update && this.stage.update(); } }; Animation.prototype._startLoop = function() { var self = this; this._running = true; function step() { if (self._running) { requestAnimationFrame(step); !self._paused && self.update(); } } requestAnimationFrame(step); }; Animation.prototype.start = function() { if (this._running) return; this._time = getTime(); this._pausedTime = 0; this._startLoop(); }; Animation.prototype.stop = function() { this._running = false; }; Animation.prototype.pause = function() { if (!this._paused) { this._pauseStart = getTime(); this._paused = true; } }; Animation.prototype.resume = function() { if (this._paused) { this._pausedTime += getTime() - this._pauseStart; this._paused = false; } }; Animation.prototype.clear = function() { var clip = this._head; while (clip) { var nextClip = clip.next; clip.prev = clip.next = clip.animation = null; clip = nextClip; } this._head = this._tail = null; }; Animation.prototype.isFinished = function() { return this._head == null; }; Animation.prototype.animate = function(target, options) { options = options || {}; this.start(); var animator = new Animator(target, options.loop); this.addAnimator(animator); return animator; }; return Animation; }(Eventful); //#endregion //#region node_modules/zrender/lib/dom/HandlerProxy.js var TOUCH_CLICK_DELAY = 300; var globalEventSupported = env.domSupported; var localNativeListenerNames = (function() { var mouseHandlerNames = [ "click", "dblclick", "mousewheel", "wheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu" ]; var touchHandlerNames = [ "touchstart", "touchend", "touchmove" ]; var pointerEventNameMap = { pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 }; return { mouse: mouseHandlerNames, touch: touchHandlerNames, pointer: map$1(mouseHandlerNames, function(name) { var nm = name.replace("mouse", "pointer"); return pointerEventNameMap.hasOwnProperty(nm) ? nm : name; }) }; })(); var globalNativeListenerNames = { mouse: ["mousemove", "mouseup"], pointer: ["pointermove", "pointerup"] }; var wheelEventSupported = false; function isPointerFromTouch(event) { var pointerType = event.pointerType; return pointerType === "pen" || pointerType === "touch"; } function setTouchTimer(scope) { scope.touching = true; if (scope.touchTimer != null) { clearTimeout(scope.touchTimer); scope.touchTimer = null; } scope.touchTimer = setTimeout(function() { scope.touching = false; scope.touchTimer = null; }, 700); } function markTouch(event) { event && (event.zrByTouch = true); } function normalizeGlobalEvent(instance, event) { return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true); } function isLocalEl(instance, el) { var elTmp = el; var isLocal = false; while (elTmp && elTmp.nodeType !== 9 && !(isLocal = elTmp.domBelongToZr || elTmp !== el && elTmp === instance.painterRoot)) elTmp = elTmp.parentNode; return isLocal; } var FakeGlobalEvent = function() { function FakeGlobalEvent(instance, event) { this.stopPropagation = noop; this.stopImmediatePropagation = noop; this.preventDefault = noop; this.type = event.type; this.target = this.currentTarget = instance.dom; this.pointerType = event.pointerType; this.clientX = event.clientX; this.clientY = event.clientY; } return FakeGlobalEvent; }(); var localDOMHandlers = { mousedown: function(event) { event = normalizeEvent(this.dom, event); this.__mayPointerCapture = [event.zrX, event.zrY]; this.trigger("mousedown", event); }, mousemove: function(event) { event = normalizeEvent(this.dom, event); var downPoint = this.__mayPointerCapture; if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) this.__togglePointerCapture(true); this.trigger("mousemove", event); }, mouseup: function(event) { event = normalizeEvent(this.dom, event); this.__togglePointerCapture(false); this.trigger("mouseup", event); }, mouseout: function(event) { event = normalizeEvent(this.dom, event); var element = event.toElement || event.relatedTarget; if (!isLocalEl(this, element)) { if (this.__pointerCapturing) event.zrEventControl = "no_globalout"; this.trigger("mouseout", event); } }, wheel: function(event) { wheelEventSupported = true; event = normalizeEvent(this.dom, event); this.trigger("mousewheel", event); }, mousewheel: function(event) { if (wheelEventSupported) return; event = normalizeEvent(this.dom, event); this.trigger("mousewheel", event); }, touchstart: function(event) { event = normalizeEvent(this.dom, event); markTouch(event); this.__lastTouchMoment = /* @__PURE__ */ new Date(); this.handler.processGesture(event, "start"); localDOMHandlers.mousemove.call(this, event); localDOMHandlers.mousedown.call(this, event); }, touchmove: function(event) { event = normalizeEvent(this.dom, event); markTouch(event); this.handler.processGesture(event, "change"); localDOMHandlers.mousemove.call(this, event); }, touchend: function(event) { event = normalizeEvent(this.dom, event); markTouch(event); this.handler.processGesture(event, "end"); localDOMHandlers.mouseup.call(this, event); if (+/* @__PURE__ */ new Date() - +this.__lastTouchMoment < TOUCH_CLICK_DELAY) localDOMHandlers.click.call(this, event); }, pointerdown: function(event) { localDOMHandlers.mousedown.call(this, event); }, pointermove: function(event) { if (!isPointerFromTouch(event)) localDOMHandlers.mousemove.call(this, event); }, pointerup: function(event) { localDOMHandlers.mouseup.call(this, event); }, pointerout: function(event) { if (!isPointerFromTouch(event)) localDOMHandlers.mouseout.call(this, event); } }; each$12([ "click", "dblclick", "contextmenu" ], function(name) { localDOMHandlers[name] = function(event) { event = normalizeEvent(this.dom, event); this.trigger(name, event); }; }); var globalDOMHandlers = { pointermove: function(event) { if (!isPointerFromTouch(event)) globalDOMHandlers.mousemove.call(this, event); }, pointerup: function(event) { globalDOMHandlers.mouseup.call(this, event); }, mousemove: function(event) { this.trigger("mousemove", event); }, mouseup: function(event) { var pointerCaptureReleasing = this.__pointerCapturing; this.__togglePointerCapture(false); this.trigger("mouseup", event); if (pointerCaptureReleasing) { event.zrEventControl = "only_globalout"; this.trigger("mouseout", event); } } }; function mountLocalDOMEventListeners(instance, scope) { var domHandlers = scope.domHandlers; if (env.pointerEventsSupported) each$12(localNativeListenerNames.pointer, function(nativeEventName) { mountSingleDOMEventListener(scope, nativeEventName, function(event) { domHandlers[nativeEventName].call(instance, event); }); }); else { if (env.touchEventsSupported) each$12(localNativeListenerNames.touch, function(nativeEventName) { mountSingleDOMEventListener(scope, nativeEventName, function(event) { domHandlers[nativeEventName].call(instance, event); setTouchTimer(scope); }); }); each$12(localNativeListenerNames.mouse, function(nativeEventName) { mountSingleDOMEventListener(scope, nativeEventName, function(event) { event = getNativeEvent(event); if (!scope.touching) domHandlers[nativeEventName].call(instance, event); }); }); } } function mountGlobalDOMEventListeners(instance, scope) { if (env.pointerEventsSupported) each$12(globalNativeListenerNames.pointer, mount); else if (!env.touchEventsSupported) each$12(globalNativeListenerNames.mouse, mount); function mount(nativeEventName) { function nativeEventListener(event) { event = getNativeEvent(event); if (!isLocalEl(instance, event.target)) { event = normalizeGlobalEvent(instance, event); scope.domHandlers[nativeEventName].call(instance, event); } } mountSingleDOMEventListener(scope, nativeEventName, nativeEventListener, { capture: true }); } } function mountSingleDOMEventListener(scope, nativeEventName, listener, opt) { scope.mounted[nativeEventName] = listener; scope.listenerOpts[nativeEventName] = opt; addEventListener(scope.domTarget, nativeEventName, listener, opt); } function unmountDOMEventListeners(scope) { var mounted = scope.mounted; for (var nativeEventName in mounted) if (mounted.hasOwnProperty(nativeEventName)) removeEventListener(scope.domTarget, nativeEventName, mounted[nativeEventName], scope.listenerOpts[nativeEventName]); scope.mounted = {}; } var DOMHandlerScope = function() { function DOMHandlerScope(domTarget, domHandlers) { this.mounted = {}; this.listenerOpts = {}; this.touching = false; this.domTarget = domTarget; this.domHandlers = domHandlers; } return DOMHandlerScope; }(); var HandlerDomProxy = function(_super) { __extends(HandlerDomProxy, _super); function HandlerDomProxy(dom, painterRoot) { var _this = _super.call(this) || this; _this.__pointerCapturing = false; _this.dom = dom; _this.painterRoot = painterRoot; _this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers); if (globalEventSupported) _this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers); mountLocalDOMEventListeners(_this, _this._localHandlerScope); return _this; } HandlerDomProxy.prototype.dispose = function() { unmountDOMEventListeners(this._localHandlerScope); if (globalEventSupported) unmountDOMEventListeners(this._globalHandlerScope); }; HandlerDomProxy.prototype.setCursor = function(cursorStyle) { this.dom.style && (this.dom.style.cursor = cursorStyle || "default"); }; HandlerDomProxy.prototype.__togglePointerCapture = function(isPointerCapturing) { this.__mayPointerCapture = null; if (globalEventSupported && +this.__pointerCapturing ^ +isPointerCapturing) { this.__pointerCapturing = isPointerCapturing; var globalHandlerScope = this._globalHandlerScope; isPointerCapturing ? mountGlobalDOMEventListeners(this, globalHandlerScope) : unmountDOMEventListeners(globalHandlerScope); } }; return HandlerDomProxy; }(Eventful); //#endregion //#region node_modules/zrender/lib/config.js var dpr = 1; if (env.hasGlobalWindow) dpr = Math.max(window.devicePixelRatio || window.screen && window.screen.deviceXDPI / window.screen.logicalXDPI || 1, 1); var devicePixelRatio = dpr; var DARK_MODE_THRESHOLD = .4; var DARK_LABEL_COLOR = "#333"; var LIGHT_LABEL_COLOR = "#ccc"; var LIGHTER_LABEL_COLOR = "#eee"; //#endregion //#region node_modules/zrender/lib/core/Transformable.js var mIdentity = identity; var EPSILON$2 = 5e-5; function isNotAroundZero(val) { return val > EPSILON$2 || val < -EPSILON$2; } var scaleTmp = []; var tmpTransform = []; var originTransform = create$1(); var abs = Math.abs; var Transformable = function() { function Transformable() {} Transformable.prototype.getLocalTransform = function(m) { return transformableGetLocalTransform(this, m); }; Transformable.prototype.setPosition = function(arr) { this.x = arr[0]; this.y = arr[1]; }; Transformable.prototype.setScale = function(arr) { this.scaleX = arr[0]; this.scaleY = arr[1]; }; Transformable.prototype.setSkew = function(arr) { this.skewX = arr[0]; this.skewY = arr[1]; }; Transformable.prototype.setOrigin = function(arr) { this.originX = arr[0]; this.originY = arr[1]; }; Transformable.prototype.needLocalTransform = function() { return isNotAroundZero(this.rotation) || isNotAroundZero(this.x) || isNotAroundZero(this.y) || isNotAroundZero(this.scaleX - 1) || isNotAroundZero(this.scaleY - 1) || isNotAroundZero(this.skewX) || isNotAroundZero(this.skewY); }; Transformable.prototype.updateTransform = function() { var parentTransform = this.parent && this.parent.transform; var needLocalTransform = this.needLocalTransform(); var m = this.transform; if (!(needLocalTransform || parentTransform)) { if (m) { mIdentity(m); this.invTransform = null; } return; } m = m || create$1(); if (needLocalTransform) this.getLocalTransform(m); else mIdentity(m); if (parentTransform) { if (needLocalTransform) mul(m, parentTransform, m); else copy(m, parentTransform); } this.transform = m; this._resolveGlobalScaleRatio(m); this.invTransform = this.invTransform || create$1(); invert(this.invTransform, m); }; Transformable.prototype._resolveGlobalScaleRatio = function(m) { var globalScaleRatio = this.globalScaleRatio; if (globalScaleRatio != null && globalScaleRatio !== 1) { this.getGlobalScale(scaleTmp); var relX = scaleTmp[0] < 0 ? -1 : 1; var relY = scaleTmp[1] < 0 ? -1 : 1; var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0; var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0; m[0] *= sx; m[1] *= sx; m[2] *= sy; m[3] *= sy; } }; Transformable.prototype.getComputedTransform = function() { var transformNode = this; var ancestors = []; while (transformNode) { ancestors.push(transformNode); transformNode = transformNode.parent; } while (transformNode = ancestors.pop()) transformNode.updateTransform(); return this.transform; }; Transformable.prototype.setLocalTransform = function(m) { if (!m) return; var sx = m[0] * m[0] + m[1] * m[1]; var sy = m[2] * m[2] + m[3] * m[3]; var rotation = Math.atan2(m[1], m[0]); var shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]); sy = Math.sqrt(sy) * Math.cos(shearX); sx = Math.sqrt(sx); this.skewX = shearX; this.skewY = 0; this.rotation = -rotation; this.x = +m[4]; this.y = +m[5]; this.scaleX = sx; this.scaleY = sy; this.originX = 0; this.originY = 0; }; Transformable.prototype.decomposeTransform = function() { if (!this.transform) return; var parent = this.parent; var m = this.transform; if (parent && parent.transform) { parent.invTransform = parent.invTransform || create$1(); mul(tmpTransform, parent.invTransform, m); m = tmpTransform; } var ox = this.originX; var oy = this.originY; if (ox || oy) { originTransform[4] = ox; originTransform[5] = oy; mul(tmpTransform, m, originTransform); tmpTransform[4] -= ox; tmpTransform[5] -= oy; m = tmpTransform; } this.setLocalTransform(m); }; Transformable.prototype.getGlobalScale = function(out) { var m = this.transform; out = out || []; if (!m) { out[0] = 1; out[1] = 1; return out; } out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]); out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]); if (m[0] < 0) out[0] = -out[0]; if (m[3] < 0) out[1] = -out[1]; return out; }; Transformable.prototype.transformCoordToLocal = function(x, y) { var v2 = [x, y]; var invTransform = this.invTransform; if (invTransform) applyTransform$1(v2, v2, invTransform); return v2; }; Transformable.prototype.transformCoordToGlobal = function(x, y) { var v2 = [x, y]; var transform = this.transform; if (transform) applyTransform$1(v2, v2, transform); return v2; }; Transformable.prototype.getLineScale = function() { var m = this.transform; return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) : 1; }; Transformable.prototype.copyTransform = function(source) { copyTransform(this, source); }; Transformable.getLocalTransform = function(target, m) { m = m || []; var ox = target.originX || 0; var oy = target.originY || 0; var sx = target.scaleX; var sy = target.scaleY; var ax = target.anchorX; var ay = target.anchorY; var rotation = target.rotation || 0; var x = target.x; var y = target.y; var skewX = target.skewX ? Math.tan(target.skewX) : 0; var skewY = target.skewY ? Math.tan(-target.skewY) : 0; if (ox || oy || ax || ay) { var dx = ox + ax; var dy = oy + ay; m[4] = -dx * sx - skewX * dy * sy; m[5] = -dy * sy - skewY * dx * sx; } else m[4] = m[5] = 0; m[0] = sx; m[3] = sy; m[1] = skewY * sx; m[2] = skewX * sy; rotation && rotate(m, m, rotation); m[4] += ox + x; m[5] += oy + y; return m; }; Transformable.initDefaultProps = (function() { var proto = Transformable.prototype; proto.scaleX = proto.scaleY = proto.globalScaleRatio = 1; proto.x = proto.y = proto.originX = proto.originY = proto.skewX = proto.skewY = proto.rotation = proto.anchorX = proto.anchorY = 0; })(); return Transformable; }(); var transformableGetLocalTransform = Transformable.getLocalTransform; function transformableCreate() { return new Transformable(); } var TRANSFORMABLE_PROPS = [ "x", "y", "originX", "originY", "anchorX", "anchorY", "rotation", "scaleX", "scaleY", "skewX", "skewY" ]; function copyTransform(target, source) { return assignProps(target, source, TRANSFORMABLE_PROPS); } //#endregion //#region node_modules/zrender/lib/contain/text.js function ensureFontMeasureInfo(font) { if (!_fontMeasureInfoCache) _fontMeasureInfoCache = new LRU(100); font = font || "12px sans-serif"; var measureInfo = _fontMeasureInfoCache.get(font); if (!measureInfo) { measureInfo = { font, strWidthCache: new LRU(500), asciiWidthMap: null, asciiWidthMapTried: false, stWideCharWidth: platformApi.measureText("国", font).width, asciiCharWidth: platformApi.measureText("a", font).width }; _fontMeasureInfoCache.put(font, measureInfo); } return measureInfo; } var _fontMeasureInfoCache; function tryCreateASCIIWidthMap(font) { if (_getASCIIWidthMapLongCount >= GET_ASCII_WIDTH_LONG_COUNT_MAX) return; font = font || "12px sans-serif"; var asciiWidthMap = []; var start = +/* @__PURE__ */ new Date(); for (var code = 0; code <= 127; code++) asciiWidthMap[code] = platformApi.measureText(String.fromCharCode(code), font).width; var cost = +/* @__PURE__ */ new Date() - start; if (cost > 16) _getASCIIWidthMapLongCount = GET_ASCII_WIDTH_LONG_COUNT_MAX; else if (cost > 2) _getASCIIWidthMapLongCount++; return asciiWidthMap; } var _getASCIIWidthMapLongCount = 0; var GET_ASCII_WIDTH_LONG_COUNT_MAX = 5; function measureCharWidth(fontMeasureInfo, charCode) { if (!fontMeasureInfo.asciiWidthMapTried) { fontMeasureInfo.asciiWidthMap = tryCreateASCIIWidthMap(fontMeasureInfo.font); fontMeasureInfo.asciiWidthMapTried = true; } return 0 <= charCode && charCode <= 127 ? fontMeasureInfo.asciiWidthMap != null ? fontMeasureInfo.asciiWidthMap[charCode] : fontMeasureInfo.asciiCharWidth : fontMeasureInfo.stWideCharWidth; } function measureWidth(fontMeasureInfo, text) { var strWidthCache = fontMeasureInfo.strWidthCache; var width = strWidthCache.get(text); if (width == null) { width = platformApi.measureText(text, fontMeasureInfo.font).width; strWidthCache.put(text, width); } return width; } function innerGetBoundingRect(text, font, textAlign, textBaseline) { var width = measureWidth(ensureFontMeasureInfo(font), text); var height = getLineHeight(font); return new BoundingRect(adjustTextX(0, width, textAlign), adjustTextY(0, height, textBaseline), width, height); } function getBoundingRect(text, font, textAlign, textBaseline) { var textLines = ((text || "") + "").split("\n"); if (textLines.length === 1) return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline); else { var uniondRect = new BoundingRect(0, 0, 0, 0); for (var i = 0; i < textLines.length; i++) { var rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline); i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect); } return uniondRect; } } function adjustTextX(x, width, textAlign, inverse) { if (textAlign === "right") !inverse ? x -= width : x += width; else if (textAlign === "center") !inverse ? x -= width / 2 : x += width / 2; return x; } function adjustTextY(y, height, verticalAlign, inverse) { if (verticalAlign === "middle") !inverse ? y -= height / 2 : y += height / 2; else if (verticalAlign === "bottom") !inverse ? y -= height : y += height; return y; } function getLineHeight(font) { return ensureFontMeasureInfo(font).stWideCharWidth; } function parsePercent$1(value, maxValue) { if (typeof value === "string") { if (value.lastIndexOf("%") >= 0) return parseFloat(value) / 100 * maxValue; return parseFloat(value); } return value; } function calculateTextPosition(out, opts, rect) { var textPosition = opts.position || "inside"; var distance = opts.distance != null ? opts.distance : 5; var height = rect.height; var width = rect.width; var halfHeight = height / 2; var x = rect.x; var y = rect.y; var textAlign = "left"; var textVerticalAlign = "top"; if (textPosition instanceof Array) { x += parsePercent$1(textPosition[0], rect.width); y += parsePercent$1(textPosition[1], rect.height); textAlign = null; textVerticalAlign = null; } else switch (textPosition) { case "left": x -= distance; y += halfHeight; textAlign = "right"; textVerticalAlign = "middle"; break; case "right": x += distance + width; y += halfHeight; textVerticalAlign = "middle"; break; case "top": x += width / 2; y -= distance; textAlign = "center"; textVerticalAlign = "bottom"; break; case "bottom": x += width / 2; y += height + distance; textAlign = "center"; break; case "inside": x += width / 2; y += halfHeight; textAlign = "center"; textVerticalAlign = "middle"; break; case "insideLeft": x += distance; y += halfHeight; textVerticalAlign = "middle"; break; case "insideRight": x += width - distance; y += halfHeight; textAlign = "right"; textVerticalAlign = "middle"; break; case "insideTop": x += width / 2; y += distance; textAlign = "center"; break; case "insideBottom": x += width / 2; y += height - distance; textAlign = "center"; textVerticalAlign = "bottom"; break; case "insideTopLeft": x += distance; y += distance; break; case "insideTopRight": x += width - distance; y += distance; textAlign = "right"; break; case "insideBottomLeft": x += distance; y += height - distance; textVerticalAlign = "bottom"; break; case "insideBottomRight": x += width - distance; y += height - distance; textAlign = "right"; textVerticalAlign = "bottom"; } out = out || {}; out.x = x; out.y = y; out.align = textAlign; out.verticalAlign = textVerticalAlign; return out; } //#endregion //#region node_modules/zrender/lib/Element.js var PRESERVED_NORMAL_STATE = "__zr_normal__"; var PRIMARY_STATES_KEYS$1 = TRANSFORMABLE_PROPS.concat(["ignore"]); var DEFAULT_ANIMATABLE_MAP = reduce(TRANSFORMABLE_PROPS, function(obj, key) { obj[key] = true; return obj; }, { ignore: false }); var tmpTextPosCalcRes = {}; var tmpBoundingRect = new BoundingRect(0, 0, 0, 0); var tmpInnerTextTrans = []; var Element = function() { function Element(props) { this.id = guid(); this.animators = []; this.currentStates = []; this.states = {}; this._init(props); } Element.prototype._init = function(props) { this.attr(props); }; Element.prototype.drift = function(dx, dy, e) { switch (this.draggable) { case "horizontal": dy = 0; break; case "vertical": dx = 0; } var m = this.transform; if (!m) m = this.transform = [ 1, 0, 0, 1, 0, 0 ]; m[4] += dx; m[5] += dy; this.decomposeTransform(); this.markRedraw(); }; Element.prototype.beforeUpdate = function() {}; Element.prototype.afterUpdate = function() {}; Element.prototype.update = function() { this.updateTransform(); if (this.__dirty) this.updateInnerText(); }; Element.prototype.updateInnerText = function(forceUpdate) { var textEl = this._textContent; if (textEl && (!textEl.ignore || forceUpdate)) { if (!this.textConfig) this.textConfig = {}; var textConfig = this.textConfig; var isLocal = textConfig.local; var innerTransformable = textEl.innerTransformable; var textAlign = void 0; var textVerticalAlign = void 0; var textStyleChanged = false; innerTransformable.parent = isLocal ? this : null; var innerOrigin = false; innerTransformable.copyTransform(textEl); var hasPosition = textConfig.position != null; var autoOverflowArea = textConfig.autoOverflowArea; var layoutRect = void 0; if (autoOverflowArea || hasPosition) { layoutRect = tmpBoundingRect; if (textConfig.layoutRect) layoutRect.copy(textConfig.layoutRect); else layoutRect.copy(this.getBoundingRect()); if (!isLocal) layoutRect.applyTransform(this.transform); } if (hasPosition) { if (this.calculateTextPosition) this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect); else calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect); innerTransformable.x = tmpTextPosCalcRes.x; innerTransformable.y = tmpTextPosCalcRes.y; textAlign = tmpTextPosCalcRes.align; textVerticalAlign = tmpTextPosCalcRes.verticalAlign; var textOrigin = textConfig.origin; if (textOrigin && textConfig.rotation != null) { var relOriginX = void 0; var relOriginY = void 0; if (textOrigin === "center") { relOriginX = layoutRect.width * .5; relOriginY = layoutRect.height * .5; } else { relOriginX = parsePercent$1(textOrigin[0], layoutRect.width); relOriginY = parsePercent$1(textOrigin[1], layoutRect.height); } innerOrigin = true; innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x); innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y); } } if (textConfig.rotation != null) innerTransformable.rotation = textConfig.rotation; var textOffset = textConfig.offset; if (textOffset) { innerTransformable.x += textOffset[0]; innerTransformable.y += textOffset[1]; if (!innerOrigin) { innerTransformable.originX = -textOffset[0]; innerTransformable.originY = -textOffset[1]; } } var innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {}); if (autoOverflowArea) { var overflowRect = innerTextDefaultStyle.overflowRect = innerTextDefaultStyle.overflowRect || new BoundingRect(0, 0, 0, 0); innerTransformable.getLocalTransform(tmpInnerTextTrans); invert(tmpInnerTextTrans, tmpInnerTextTrans); BoundingRect.copy(overflowRect, layoutRect); overflowRect.applyTransform(tmpInnerTextTrans); } else innerTextDefaultStyle.overflowRect = null; var isInside = textConfig.inside == null ? typeof textConfig.position === "string" && textConfig.position.indexOf("inside") >= 0 : textConfig.inside; var textFill = void 0; var textStroke = void 0; var autoStroke = void 0; if (isInside && this.canBeInsideText()) { textFill = textConfig.insideFill; textStroke = textConfig.insideStroke; if (textFill == null || textFill === "auto") textFill = this.getInsideTextFill(); if (textStroke == null || textStroke === "auto") { textStroke = this.getInsideTextStroke(textFill); autoStroke = true; } } else { textFill = textConfig.outsideFill; textStroke = textConfig.outsideStroke; if (textFill == null || textFill === "auto") textFill = this.getOutsideFill(); if (textStroke == null || textStroke === "auto") { textStroke = this.getOutsideStroke(textFill); autoStroke = true; } } textFill = textFill || "#000"; if (textFill !== innerTextDefaultStyle.fill || textStroke !== innerTextDefaultStyle.stroke || autoStroke !== innerTextDefaultStyle.autoStroke || textAlign !== innerTextDefaultStyle.align || textVerticalAlign !== innerTextDefaultStyle.verticalAlign) { textStyleChanged = true; innerTextDefaultStyle.fill = textFill; innerTextDefaultStyle.stroke = textStroke; innerTextDefaultStyle.autoStroke = autoStroke; innerTextDefaultStyle.align = textAlign; innerTextDefaultStyle.verticalAlign = textVerticalAlign; textEl.setDefaultTextStyle(innerTextDefaultStyle); } textEl.__dirty |= 1; if (textStyleChanged) textEl.dirtyStyle(true); } }; Element.prototype.canBeInsideText = function() { return true; }; Element.prototype.getInsideTextFill = function() { return "#fff"; }; Element.prototype.getInsideTextStroke = function(textFill) { return "#000"; }; Element.prototype.getOutsideFill = function() { return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR; }; Element.prototype.getOutsideStroke = function(textFill) { var backgroundColor = this.__zr && this.__zr.getBackgroundColor(); var colorArr = typeof backgroundColor === "string" && parse(backgroundColor); if (!colorArr) colorArr = [ 255, 255, 255, 1 ]; var alpha = colorArr[3]; var isDark = this.__zr.isDarkMode(); for (var i = 0; i < 3; i++) colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha); colorArr[3] = 1; return stringify(colorArr, "rgba"); }; Element.prototype.traverse = function(cb, context) {}; Element.prototype.attrKV = function(key, value) { if (key === "textConfig") this.setTextConfig(value); else if (key === "textContent") this.setTextContent(value); else if (key === "clipPath") this.setClipPath(value); else if (key === "extra") { this.extra = this.extra || {}; extend(this.extra, value); } else this[key] = value; }; Element.prototype.hide = function() { this.ignore = true; this.markRedraw(); }; Element.prototype.show = function() { this.ignore = false; this.markRedraw(); }; Element.prototype.attr = function(keyOrObj, value) { if (typeof keyOrObj === "string") this.attrKV(keyOrObj, value); else if (isObject$3(keyOrObj)) { var keysArr = keys(keyOrObj); for (var i = 0; i < keysArr.length; i++) { var key = keysArr[i]; this.attrKV(key, keyOrObj[key]); } } this.markRedraw(); return this; }; Element.prototype.saveCurrentToNormalState = function(toState) { this._innerSaveToNormal(toState); var normalState = this._normalState; for (var i = 0; i < this.animators.length; i++) { var animator = this.animators[i]; var fromStateTransition = animator.__fromStateTransition; if (animator.getLoop() || fromStateTransition && fromStateTransition !== "__zr_normal__") continue; var targetName = animator.targetName; var target = targetName ? normalState[targetName] : normalState; animator.saveTo(target); } }; Element.prototype._innerSaveToNormal = function(toState) { var normalState = this._normalState; if (!normalState) normalState = this._normalState = {}; if (toState.textConfig && !normalState.textConfig) normalState.textConfig = this.textConfig; this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS$1); }; Element.prototype._savePrimaryToNormal = function(toState, normalState, primaryKeys) { for (var i = 0; i < primaryKeys.length; i++) { var key = primaryKeys[i]; if (toState[key] != null && !(key in normalState)) normalState[key] = this[key]; } }; Element.prototype.hasState = function() { return this.currentStates.length > 0; }; Element.prototype.getState = function(name) { return this.states[name]; }; Element.prototype.ensureState = function(name) { var states = this.states; if (!states[name]) states[name] = {}; return states[name]; }; Element.prototype.clearStates = function(noAnimation) { this.useState(PRESERVED_NORMAL_STATE, false, noAnimation); }; Element.prototype.useState = function(stateName, keepCurrentStates, noAnimation, forceUseHoverLayer) { var toNormalState = stateName === PRESERVED_NORMAL_STATE; if (!this.hasState() && toNormalState) return; var currentStates = this.currentStates; var animationCfg = this.stateTransition; if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) return; var state; if (this.stateProxy && !toNormalState) state = this.stateProxy(stateName); if (!state) state = this.states && this.states[stateName]; if (!state && !toNormalState) { logError("State " + stateName + " not exists."); return; } if (!toNormalState) this.saveCurrentToNormalState(state); var textContent = this._textContent; var useHoverLayer = shouldUseHoverLayer(this, textContent, state, forceUseHoverLayer); if (useHoverLayer && !this.__inHover) this.__inHover = useHoverLayer; this._applyStateObj(stateName, state, this._normalState, keepCurrentStates, canTransition(this, noAnimation, animationCfg), animationCfg); var textGuide = this._textGuide; if (textContent) textContent.useState(stateName, keepCurrentStates, noAnimation, !!useHoverLayer); if (textGuide) textGuide.useState(stateName, keepCurrentStates, noAnimation, !!useHoverLayer); if (toNormalState) { this.currentStates = []; this._normalState = {}; } else if (!keepCurrentStates) this.currentStates = [stateName]; else this.currentStates.push(stateName); this._updateAnimationTargets(); this.markRedraw(); if (!useHoverLayer && this.__inHover) { this.__inHover = 0; this.__dirty &= -2; } return state; }; Element.prototype.useStates = function(states, noAnimation, forceUseHoverLayer) { if (!states.length) this.clearStates(); else { var stateObjects = []; var currentStates = this.currentStates; var len = states.length; var notChange = len === currentStates.length; if (notChange) { for (var i = 0; i < len; i++) if (states[i] !== currentStates[i]) { notChange = false; break; } } if (notChange) return; for (var i = 0; i < len; i++) { var stateName = states[i]; var stateObj = void 0; if (this.stateProxy) stateObj = this.stateProxy(stateName, states); if (!stateObj) stateObj = this.states[stateName]; if (stateObj) stateObjects.push(stateObj); } var lastStateObj = stateObjects[len - 1]; var textContent = this._textContent; var useHoverLayer = shouldUseHoverLayer(this, textContent, lastStateObj, forceUseHoverLayer); if (useHoverLayer && !this.__inHover) this.__inHover = useHoverLayer; var mergedState = this._mergeStates(stateObjects); var animationCfg = this.stateTransition; this.saveCurrentToNormalState(mergedState); this._applyStateObj(states.join(","), mergedState, this._normalState, false, canTransition(this, noAnimation, animationCfg), animationCfg); var textGuide = this._textGuide; if (textContent) textContent.useStates(states, noAnimation, !!useHoverLayer); if (textGuide) textGuide.useStates(states, noAnimation, !!useHoverLayer); this._updateAnimationTargets(); this.currentStates = states.slice(); this.markRedraw(); if (!useHoverLayer && this.__inHover) { this.__inHover = 0; this.__dirty &= -2; } } }; Element.prototype.isSilent = function() { var el = this; while (el) { if (el.silent) return true; var hostEl = el.__hostTarget; el = hostEl ? el.ignoreHostSilent ? null : hostEl : el.parent; } return false; }; Element.prototype._updateAnimationTargets = function() { for (var i = 0; i < this.animators.length; i++) { var animator = this.animators[i]; if (animator.targetName) animator.changeTarget(this[animator.targetName]); } }; Element.prototype.removeState = function(state) { var idx = indexOf(this.currentStates, state); if (idx >= 0) { var currentStates = this.currentStates.slice(); currentStates.splice(idx, 1); this.useStates(currentStates); } }; Element.prototype.replaceState = function(oldState, newState, forceAdd) { var currentStates = this.currentStates.slice(); var idx = indexOf(currentStates, oldState); var newStateExists = indexOf(currentStates, newState) >= 0; if (idx >= 0) { if (!newStateExists) currentStates[idx] = newState; else currentStates.splice(idx, 1); } else if (forceAdd && !newStateExists) currentStates.push(newState); this.useStates(currentStates); }; Element.prototype.toggleState = function(state, enable) { if (enable) this.useState(state, true); else this.removeState(state); }; Element.prototype._mergeStates = function(states) { var mergedState = {}; var mergedTextConfig; for (var i = 0; i < states.length; i++) { var state = states[i]; extend(mergedState, state); if (state.textConfig) { mergedTextConfig = mergedTextConfig || {}; extend(mergedTextConfig, state.textConfig); } } if (mergedTextConfig) mergedState.textConfig = mergedTextConfig; return mergedState; }; Element.prototype._applyStateObj = function(stateName, state, normalState, keepCurrentStates, transition, animationCfg) { if (this.__inHover === 1) return; var needsRestoreToNormal = !(state && keepCurrentStates); if (state && state.textConfig) { this.textConfig = extend({}, keepCurrentStates ? this.textConfig : normalState.textConfig); extend(this.textConfig, state.textConfig); } else if (needsRestoreToNormal) { if (normalState.textConfig) this.textConfig = normalState.textConfig; } var transitionTarget = {}; var hasTransition = false; for (var i = 0; i < PRIMARY_STATES_KEYS$1.length; i++) { var key = PRIMARY_STATES_KEYS$1[i]; var propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key]; if (state && state[key] != null) { if (propNeedsTransition) { hasTransition = true; transitionTarget[key] = state[key]; } else this[key] = state[key]; } else if (needsRestoreToNormal) { if (normalState[key] != null) { if (propNeedsTransition) { hasTransition = true; transitionTarget[key] = normalState[key]; } else this[key] = normalState[key]; } } } if (!transition) for (var i = 0; i < this.animators.length; i++) { var animator = this.animators[i]; var targetName = animator.targetName; if (!animator.getLoop()) animator.__changeFinalValue(targetName ? (state || normalState)[targetName] : state || normalState); } if (hasTransition) this._transitionState(stateName, transitionTarget, animationCfg); }; Element.prototype._attachComponent = function(componentEl) { if (componentEl.__zr && !componentEl.__hostTarget) throw new Error("Text element has been added to zrender."); if (componentEl === this) throw new Error("Recursive component attachment."); var zr = this.__zr; if (zr) componentEl.addSelfToZr(zr); componentEl.__zr = zr; componentEl.__hostTarget = this; }; Element.prototype._detachComponent = function(componentEl) { if (componentEl.__zr) componentEl.removeSelfFromZr(componentEl.__zr); componentEl.__zr = null; componentEl.__hostTarget = null; }; Element.prototype.getClipPath = function() { return this._clipPath; }; Element.prototype.setClipPath = function(clipPath) { if (this._clipPath && this._clipPath !== clipPath) this.removeClipPath(); this._attachComponent(clipPath); this._clipPath = clipPath; this.markRedraw(); }; Element.prototype.removeClipPath = function() { var clipPath = this._clipPath; if (clipPath) { this._detachComponent(clipPath); this._clipPath = null; this.markRedraw(); } }; Element.prototype.getTextContent = function() { return this._textContent; }; Element.prototype.setTextContent = function(textEl) { var previousTextContent = this._textContent; if (previousTextContent === textEl) return; if (previousTextContent && previousTextContent !== textEl) this.removeTextContent(); if (textEl.__zr && !textEl.__hostTarget) throw new Error("Text element has been added to zrender."); textEl.innerTransformable = new Transformable(); this._attachComponent(textEl); this._textContent = textEl; this.markRedraw(); }; Element.prototype.setTextConfig = function(cfg) { if (!this.textConfig) this.textConfig = {}; extend(this.textConfig, cfg); this.markRedraw(); }; Element.prototype.removeTextConfig = function() { this.textConfig = null; this.markRedraw(); }; Element.prototype.removeTextContent = function() { var textEl = this._textContent; if (textEl) { textEl.innerTransformable = null; this._detachComponent(textEl); this._textContent = null; this._innerTextDefaultStyle = null; this.markRedraw(); } }; Element.prototype.getTextGuideLine = function() { return this._textGuide; }; Element.prototype.setTextGuideLine = function(guideLine) { if (this._textGuide && this._textGuide !== guideLine) this.removeTextGuideLine(); this._attachComponent(guideLine); this._textGuide = guideLine; this.markRedraw(); }; Element.prototype.removeTextGuideLine = function() { var textGuide = this._textGuide; if (textGuide) { this._detachComponent(textGuide); this._textGuide = null; this.markRedraw(); } }; Element.prototype.markRedraw = function() { this.__dirty |= 1; var zr = this.__zr; if (zr) { if (this.__inHover) zr.refreshHover(); else zr.refresh(); } if (this.__hostTarget) this.__hostTarget.markRedraw(); }; Element.prototype.dirty = function() { this.markRedraw(); }; Element.prototype.addSelfToZr = function(zr) { if (this.__zr === zr) return; this.__zr = zr; var animators = this.animators; if (animators) for (var i = 0; i < animators.length; i++) zr.animation.addAnimator(animators[i]); if (this._clipPath) this._clipPath.addSelfToZr(zr); if (this._textContent) this._textContent.addSelfToZr(zr); if (this._textGuide) this._textGuide.addSelfToZr(zr); }; Element.prototype.removeSelfFromZr = function(zr) { if (!this.__zr) return; this.__zr = null; var animators = this.animators; if (animators) for (var i = 0; i < animators.length; i++) zr.animation.removeAnimator(animators[i]); if (this._clipPath) this._clipPath.removeSelfFromZr(zr); if (this._textContent) this._textContent.removeSelfFromZr(zr); if (this._textGuide) this._textGuide.removeSelfFromZr(zr); }; Element.prototype.animate = function(key, loop, allowDiscreteAnimation) { var target = key ? this[key] : this; if (!target) { logError("Property \"" + key + "\" is not existed in element " + this.id); return; } var animator = new Animator(target, loop, allowDiscreteAnimation); key && (animator.targetName = key); this.addAnimator(animator, key); return animator; }; Element.prototype.addAnimator = function(animator, key) { var zr = this.__zr; var el = this; animator.during(function() { el.updateDuringAnimation(key); }).done(function() { var animators = el.animators; var idx = indexOf(animators, animator); if (idx >= 0) animators.splice(idx, 1); }); this.animators.push(animator); if (zr) zr.animation.addAnimator(animator); zr && zr.wakeUp(); }; Element.prototype.updateDuringAnimation = function(key) { this.markRedraw(); }; Element.prototype.stopAnimation = function(scope, forwardToLast) { var animators = this.animators; var len = animators.length; var leftAnimators = []; for (var i = 0; i < len; i++) { var animator = animators[i]; if (!scope || scope === animator.scope) animator.stop(forwardToLast); else leftAnimators.push(animator); } this.animators = leftAnimators; return this; }; Element.prototype.animateTo = function(target, cfg, animationProps) { animateTo(this, target, cfg, animationProps); }; Element.prototype.animateFrom = function(target, cfg, animationProps) { animateTo(this, target, cfg, animationProps, true); }; Element.prototype._transitionState = function(stateName, target, cfg, animationProps) { var animators = animateTo(this, target, cfg, animationProps); for (var i = 0; i < animators.length; i++) animators[i].__fromStateTransition = stateName; }; Element.prototype.getBoundingRect = function() { return null; }; Element.prototype.getPaintRect = function() { return null; }; Element.initDefaultProps = (function() { var elProto = Element.prototype; elProto.type = "element"; elProto.name = ""; elProto.ignore = elProto.silent = elProto.ignoreHostSilent = elProto.isGroup = elProto.draggable = elProto.dragging = elProto.ignoreClip = false; elProto.__inHover = 0; elProto.__dirty = 1; var logs = {}; function logDeprecatedError(key, xKey, yKey) { if (!logs[key + xKey + yKey]) { console.warn("DEPRECATED: '" + key + "' has been deprecated. use '" + xKey + "', '" + yKey + "' instead"); logs[key + xKey + yKey] = true; } } function createLegacyProperty(key, privateKey, xKey, yKey) { Object.defineProperty(elProto, key, { get: function() { logDeprecatedError(key, xKey, yKey); if (!this[privateKey]) { var pos = this[privateKey] = []; enhanceArray(this, pos); } return this[privateKey]; }, set: function(pos) { logDeprecatedError(key, xKey, yKey); this[xKey] = pos[0]; this[yKey] = pos[1]; this[privateKey] = pos; enhanceArray(this, pos); } }); function enhanceArray(self, pos) { Object.defineProperty(pos, 0, { get: function() { return self[xKey]; }, set: function(val) { self[xKey] = val; } }); Object.defineProperty(pos, 1, { get: function() { return self[yKey]; }, set: function(val) { self[yKey] = val; } }); } } if (Object.defineProperty) { createLegacyProperty("position", "_legacyPos", "x", "y"); createLegacyProperty("scale", "_legacyScale", "scaleX", "scaleY"); createLegacyProperty("origin", "_legacyOrigin", "originX", "originY"); } })(); return Element; }(); mixin(Element, Eventful); mixin(Element, Transformable); function animateTo(animatable, target, cfg, animationProps, reverse) { cfg = cfg || {}; var animators = []; animateToShallow(animatable, "", animatable, target, cfg, animationProps, animators, reverse); var finishCount = animators.length; var doneHappened = false; var cfgDone = cfg.done; var cfgAborted = cfg.aborted; var doneCb = function() { doneHappened = true; finishCount--; if (finishCount <= 0) doneHappened ? cfgDone && cfgDone() : cfgAborted && cfgAborted(); }; var abortedCb = function() { finishCount--; if (finishCount <= 0) doneHappened ? cfgDone && cfgDone() : cfgAborted && cfgAborted(); }; if (!finishCount) cfgDone && cfgDone(); if (animators.length > 0 && cfg.during) animators[0].during(function(target, percent) { cfg.during(percent); }); for (var i = 0; i < animators.length; i++) { var animator = animators[i]; if (doneCb) animator.done(doneCb); if (abortedCb) animator.aborted(abortedCb); if (cfg.force) animator.duration(cfg.duration); animator.start(cfg.easing); } return animators; } function copyArrShallow(source, target, len) { for (var i = 0; i < len; i++) source[i] = target[i]; } function is2DArray(value) { return isArrayLike(value[0]); } function copyValue(target, source, key) { if (isArrayLike(source[key])) { if (!isArrayLike(target[key])) target[key] = []; if (isTypedArray(source[key])) { var len = source[key].length; if (target[key].length !== len) { target[key] = new source[key].constructor(len); copyArrShallow(target[key], source[key], len); } } else { var sourceArr = source[key]; var targetArr = target[key]; var len0 = sourceArr.length; if (is2DArray(sourceArr)) { var len1 = sourceArr[0].length; for (var i = 0; i < len0; i++) if (!targetArr[i]) targetArr[i] = Array.prototype.slice.call(sourceArr[i]); else copyArrShallow(targetArr[i], sourceArr[i], len1); } else copyArrShallow(targetArr, sourceArr, len0); targetArr.length = sourceArr.length; } } else target[key] = source[key]; } function isValueSame(val1, val2) { return val1 === val2 || isArrayLike(val1) && isArrayLike(val2) && is1DArraySame(val1, val2); } function is1DArraySame(arr0, arr1) { var len = arr0.length; if (len !== arr1.length) return false; for (var i = 0; i < len; i++) if (arr0[i] !== arr1[i]) return false; return true; } function animateToShallow(animatable, topKey, animateObj, target, cfg, animationProps, animators, reverse) { var targetKeys = keys(target); var duration = cfg.duration; var delay = cfg.delay; var additive = cfg.additive; var setToFinal = cfg.setToFinal; var animateAll = !isObject$3(animationProps); var existsAnimators = animatable.animators; var animationKeys = []; for (var k = 0; k < targetKeys.length; k++) { var innerKey = targetKeys[k]; var targetVal = target[innerKey]; if (targetVal != null && animateObj[innerKey] != null && (animateAll || animationProps[innerKey])) { if (isObject$3(targetVal) && !isArrayLike(targetVal) && !isGradientObject(targetVal)) { if (topKey) { if (!reverse) { animateObj[innerKey] = targetVal; animatable.updateDuringAnimation(topKey); } continue; } animateToShallow(animatable, innerKey, animateObj[innerKey], targetVal, cfg, animationProps && animationProps[innerKey], animators, reverse); } else animationKeys.push(innerKey); } else if (!reverse) { animateObj[innerKey] = targetVal; animatable.updateDuringAnimation(topKey); animationKeys.push(innerKey); } } var keyLen = animationKeys.length; if (!additive && keyLen) for (var i = 0; i < existsAnimators.length; i++) { var animator = existsAnimators[i]; if (animator.targetName === topKey) { if (animator.stopTracks(animationKeys)) { var idx = indexOf(existsAnimators, animator); existsAnimators.splice(idx, 1); } } } if (!cfg.force) { animationKeys = filter(animationKeys, function(key) { return !isValueSame(target[key], animateObj[key]); }); keyLen = animationKeys.length; } if (keyLen > 0 || cfg.force && !animators.length) { var revertedSource = void 0; var reversedTarget = void 0; var sourceClone = void 0; if (reverse) { reversedTarget = {}; if (setToFinal) revertedSource = {}; for (var i = 0; i < keyLen; i++) { var innerKey = animationKeys[i]; reversedTarget[innerKey] = animateObj[innerKey]; if (setToFinal) revertedSource[innerKey] = target[innerKey]; else animateObj[innerKey] = target[innerKey]; } } else if (setToFinal) { sourceClone = {}; for (var i = 0; i < keyLen; i++) { var innerKey = animationKeys[i]; sourceClone[innerKey] = cloneValue(animateObj[innerKey]); copyValue(animateObj, target, innerKey); } } var animator = new Animator(animateObj, false, false, additive ? filter(existsAnimators, function(animator) { return animator.targetName === topKey; }) : null); animator.targetName = topKey; if (cfg.scope) animator.scope = cfg.scope; if (setToFinal && revertedSource) animator.whenWithKeys(0, revertedSource, animationKeys); if (sourceClone) animator.whenWithKeys(0, sourceClone, animationKeys); animator.whenWithKeys(duration == null ? 500 : duration, reverse ? reversedTarget : target, animationKeys).delay(delay || 0); animatable.addAnimator(animator, topKey); animators.push(animator); } } function shouldUseHoverLayer(el, textContent, nextState, forceUseHoverLayer) { return !(nextState && nextState.hoverLayer || forceUseHoverLayer) || isTextRelatedEl(el) || textContent && isTextRelatedEl(textContent) ? 0 : 1; } function isTextRelatedEl(el) { return el.type === "text" || el.type === "tspan"; } function canTransition(el, noAnimation, animationCfg) { return !noAnimation && !el.__inHover && animationCfg && animationCfg.duration > 0; } //#endregion //#region node_modules/zrender/lib/graphic/Group.js var Group$3 = function(_super) { __extends(Group, _super); function Group(opts) { var _this = _super.call(this) || this; _this.isGroup = true; _this._children = []; _this.attr(opts); return _this; } Group.prototype.childrenRef = function() { return this._children; }; Group.prototype.children = function() { return this._children.slice(); }; Group.prototype.childAt = function(idx) { return this._children[idx]; }; Group.prototype.childOfName = function(name) { var children = this._children; for (var i = 0; i < children.length; i++) if (children[i].name === name) return children[i]; }; Group.prototype.childCount = function() { return this._children.length; }; Group.prototype.add = function(child) { if (child) { if (child !== this && child.parent !== this) { this._children.push(child); this._doAdd(child); } if (child.__hostTarget) throw "This elemenet has been used as an attachment"; } return this; }; Group.prototype.addBefore = function(child, nextSibling) { if (child && child !== this && child.parent !== this && nextSibling && nextSibling.parent === this) { var children = this._children; var idx = children.indexOf(nextSibling); if (idx >= 0) { children.splice(idx, 0, child); this._doAdd(child); } } return this; }; Group.prototype.replace = function(oldChild, newChild) { var idx = indexOf(this._children, oldChild); if (idx >= 0) this.replaceAt(newChild, idx); return this; }; Group.prototype.replaceAt = function(child, index) { var children = this._children; var old = children[index]; if (child && child !== this && child.parent !== this && child !== old) { children[index] = child; old.parent = null; var zr = this.__zr; if (zr) old.removeSelfFromZr(zr); this._doAdd(child); } return this; }; Group.prototype._doAdd = function(child) { if (child.parent) child.parent.remove(child); child.parent = this; var zr = this.__zr; if (zr && zr !== child.__zr) child.addSelfToZr(zr); zr && zr.refresh(); }; Group.prototype.remove = function(child) { var zr = this.__zr; var children = this._children; var idx = indexOf(children, child); if (idx < 0) return this; children.splice(idx, 1); child.parent = null; if (zr) child.removeSelfFromZr(zr); zr && zr.refresh(); return this; }; Group.prototype.removeAll = function() { var children = this._children; var zr = this.__zr; for (var i = 0; i < children.length; i++) { var child = children[i]; if (zr) child.removeSelfFromZr(zr); child.parent = null; } children.length = 0; return this; }; Group.prototype.eachChild = function(cb, context) { var children = this._children; for (var i = 0; i < children.length; i++) { var child = children[i]; cb.call(context, child, i); } return this; }; Group.prototype.traverse = function(cb, context) { for (var i = 0; i < this._children.length; i++) { var child = this._children[i]; var stopped = cb.call(context, child); if (child.isGroup && !stopped) child.traverse(cb, context); } return this; }; Group.prototype.addSelfToZr = function(zr) { _super.prototype.addSelfToZr.call(this, zr); for (var i = 0; i < this._children.length; i++) this._children[i].addSelfToZr(zr); }; Group.prototype.removeSelfFromZr = function(zr) { _super.prototype.removeSelfFromZr.call(this, zr); for (var i = 0; i < this._children.length; i++) this._children[i].removeSelfFromZr(zr); }; Group.prototype.getBoundingRect = function(includeChildren) { var tmpRect = new BoundingRect(0, 0, 0, 0); var children = includeChildren || this._children; var tmpMat = []; var rect = null; for (var i = 0; i < children.length; i++) { var child = children[i]; if (child.ignore || child.invisible) continue; var childRect = child.getBoundingRect(); var transform = child.getLocalTransform(tmpMat); if (transform) { BoundingRect.applyTransform(tmpRect, childRect, transform); rect = rect || tmpRect.clone(); rect.union(tmpRect); } else { rect = rect || childRect.clone(); rect.union(childRect); } } return rect || tmpRect; }; return Group; }(Element); Group$3.prototype.type = "group"; //#endregion //#region node_modules/zrender/lib/zrender.js /*! * ZRender, a high performance 2d drawing library. * * Copyright (c) 2013, Baidu Inc. * All rights reserved. * * LICENSE * https://github.com/ecomfe/zrender/blob/master/LICENSE */ var zrender_exports = /* @__PURE__ */ __exportAll({ dispose: () => dispose$1, disposeAll: () => disposeAll, getElementSSRData: () => getElementSSRData, getInstance: () => getInstance, init: () => init$2, registerPainter: () => registerPainter, registerSSRDataGetter: () => registerSSRDataGetter, version: () => version$1 }); var painterCtors = {}; var instances$1 = {}; function delInstance(id) { delete instances$1[id]; } function isDarkMode(backgroundColor) { if (!backgroundColor) return false; if (typeof backgroundColor === "string") return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD; else if (backgroundColor.colorStops) { var colorStops = backgroundColor.colorStops; var totalLum = 0; var len = colorStops.length; for (var i = 0; i < len; i++) totalLum += lum(colorStops[i].color, 1); totalLum /= len; return totalLum < DARK_MODE_THRESHOLD; } return false; } var ZRender = function() { function ZRender(id, dom, opts) { var _this = this; this._sleepAfterStill = 10; this._stillFrameAccum = 0; this._needsRefresh = true; this._needsRefreshHover = false; this._darkMode = false; opts = opts || {}; this.dom = dom; this.id = id; var storage = new Storage(); var rendererType = opts.renderer || "canvas"; if (!painterCtors[rendererType]) rendererType = keys(painterCtors)[0]; if (!painterCtors[rendererType]) throw new Error("Renderer '" + rendererType + "' is not imported. Please import it first."); opts.useDirtyRect = opts.useDirtyRect == null ? false : opts.useDirtyRect; var painter = new painterCtors[rendererType](dom, storage, opts, id); var ssrMode = opts.ssr || painter.ssrOnly; this.storage = storage; this.painter = painter; var handlerProxy = !env.node && !env.worker && !ssrMode ? new HandlerDomProxy(painter.getViewportRoot(), painter.root) : null; var useCoarsePointer = opts.useCoarsePointer; var usePointerSize = useCoarsePointer == null || useCoarsePointer === "auto" ? env.touchEventsSupported : !!useCoarsePointer; var defaultPointerSize = 44; var pointerSize; if (usePointerSize) pointerSize = retrieve2(opts.pointerSize, defaultPointerSize); this.handler = new Handler(storage, painter, handlerProxy, painter.root, pointerSize); this.animation = new Animation({ stage: { update: ssrMode ? null : function() { return _this._flush(false); } } }); if (!ssrMode) this.animation.start(); } ZRender.prototype.add = function(el) { if (this._disposed || !el) return; this.storage.addRoot(el); el.addSelfToZr(this); this.refresh(); }; ZRender.prototype.remove = function(el) { if (this._disposed || !el) return; this.storage.delRoot(el); el.removeSelfFromZr(this); this.refresh(); }; ZRender.prototype.configLayer = function(zLevel, config) { if (this._disposed) return; if (this.painter.configLayer) this.painter.configLayer(zLevel, config); this.refresh(); }; ZRender.prototype.setBackgroundColor = function(backgroundColor) { if (this._disposed) return; if (this.painter.setBackgroundColor) this.painter.setBackgroundColor(backgroundColor); this.refresh(); this._backgroundColor = backgroundColor; this._darkMode = isDarkMode(backgroundColor); }; ZRender.prototype.getBackgroundColor = function() { return this._backgroundColor; }; ZRender.prototype.setDarkMode = function(darkMode) { this._darkMode = darkMode; }; ZRender.prototype.isDarkMode = function() { return this._darkMode; }; ZRender.prototype.refreshImmediately = function(noAnimationUpdate) { if (this._disposed) return; this._refresh({ animUpdate: !noAnimationUpdate, refresh: true, refreshHover: false }); }; ZRender.prototype._refresh = function(opt) { if (opt.animUpdate) this.animation.update(true); this._needsRefresh = this._needsRefreshHover = false; this.painter.refresh({ refresh: opt.refresh, refreshHover: opt.refreshHover }); this._needsRefresh = this._needsRefreshHover = false; }; ZRender.prototype.refresh = function() { if (this._disposed) return; this._needsRefresh = true; this.animation.start(); }; ZRender.prototype.flush = function() { if (this._disposed) return; this._flush(true); }; ZRender.prototype._flush = function(animationUpdate) { var triggerRendered; var start = getTime(); var needsRefresh = this._needsRefresh; var needsRefreshHover = this._needsRefreshHover; if (needsRefresh || needsRefreshHover) { triggerRendered = true; this._refresh({ animUpdate: animationUpdate, refresh: needsRefresh, refreshHover: needsRefreshHover }); } var end = getTime(); if (triggerRendered) { this._stillFrameAccum = 0; this.trigger("rendered", { elapsedTime: end - start }); } else if (this._sleepAfterStill > 0) { this._stillFrameAccum++; if (this._stillFrameAccum > this._sleepAfterStill) this.animation.stop(); } }; ZRender.prototype.setSleepAfterStill = function(stillFramesCount) { this._sleepAfterStill = stillFramesCount; }; ZRender.prototype.wakeUp = function() { if (this._disposed) return; this.animation.start(); this._stillFrameAccum = 0; }; ZRender.prototype.refreshHover = function() { this._needsRefreshHover = true; }; ZRender.prototype.refreshHoverImmediately = function() { if (this._disposed) return; this._refresh({ animUpdate: false, refresh: false, refreshHover: true }); }; ZRender.prototype.resize = function(opts) { if (this._disposed) return; opts = opts || {}; this.painter.resize(opts.width, opts.height); this.handler.resize(); }; ZRender.prototype.clearAnimation = function() { if (this._disposed) return; this.animation.clear(); }; ZRender.prototype.getWidth = function() { if (this._disposed) return; return this.painter.getWidth(); }; ZRender.prototype.getHeight = function() { if (this._disposed) return; return this.painter.getHeight(); }; ZRender.prototype.setCursorStyle = function(cursorStyle) { if (this._disposed) return; this.handler.setCursorStyle(cursorStyle); }; ZRender.prototype.findHover = function(x, y) { if (this._disposed) return; return this.handler.findHover(x, y); }; ZRender.prototype.on = function(eventName, eventHandler, context) { if (!this._disposed) this.handler.on(eventName, eventHandler, context); return this; }; ZRender.prototype.off = function(eventName, eventHandler) { if (this._disposed) return; this.handler.off(eventName, eventHandler); }; ZRender.prototype.trigger = function(eventName, event) { if (this._disposed) return; this.handler.trigger(eventName, event); }; ZRender.prototype.clear = function() { if (this._disposed) return; var roots = this.storage.getRoots(); for (var i = 0; i < roots.length; i++) if (roots[i] instanceof Group$3) roots[i].removeSelfFromZr(this); this.storage.delAllRoots(); this.painter.clear(); }; ZRender.prototype.dispose = function() { if (this._disposed) return; this.animation.stop(); this.clear(); this.storage.dispose(); this.painter.dispose(); this.handler.dispose(); this.animation = this.storage = this.painter = this.handler = null; this._disposed = true; delInstance(this.id); }; return ZRender; }(); function init$2(dom, opts) { var zr = new ZRender(guid(), dom, opts); instances$1[zr.id] = zr; return zr; } function dispose$1(zr) { zr.dispose(); } function disposeAll() { for (var key in instances$1) if (instances$1.hasOwnProperty(key)) instances$1[key].dispose(); instances$1 = {}; } function getInstance(id) { return instances$1[id]; } function registerPainter(name, Ctor) { painterCtors[name] = Ctor; } var ssrDataGetter; function getElementSSRData(el) { if (typeof ssrDataGetter === "function") return ssrDataGetter(el); } function registerSSRDataGetter(getter) { ssrDataGetter = getter; } var version$1 = "6.1.0"; //#endregion //#region node_modules/echarts/lib/util/number.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RADIAN_EPSILON = 1e-4; var TO_FIXED_SUPPORTED_PRECISION_MAX = 20; function _trim(str) { return str.replace(/^\s+|\s+$/g, ""); } var mathMin$9 = Math.min; var mathMax$9 = Math.max; var mathAbs$4 = Math.abs; var mathRound$1 = Math.round; var mathFloor = Math.floor; var mathCeil = Math.ceil; var mathPow$1 = Math.pow; var mathLog = Math.log; var mathLN10 = Math.LN10; var mathPI = Math.PI; var mathRandom = Math.random; /** * Linear mapping a value from domain to range * @param val * @param domain Domain extent domain[0] can be bigger than domain[1] * @param range Range extent range[0] can be bigger than range[1] * @param clamp Default to be false */ function linearMap$2(val, domain, range, clamp) { var d0 = domain[0]; var d1 = domain[1]; var r0 = range[0]; var r1 = range[1]; var subDomain = d1 - d0; var subRange = r1 - r0; if (subDomain === 0) return subRange === 0 ? r0 : (r0 + r1) / 2; if (clamp) { if (subDomain > 0) { if (val <= d0) return r0; else if (val >= d1) return r1; } else if (val >= d0) return r0; else if (val <= d1) return r1; } else { if (val === d0) return r0; if (val === d1) return r1; } return (val - d0) / subDomain * subRange + r0; } /** * Preserve the name `parsePercent` for backward compatibility, * and it's effectively published as `echarts.number.parsePercent`. */ var parsePercent = parsePositionOption; /** * @see {parsePositionSizeOption} and also accept a string preset. * @see {PositionSizeOption} */ function parsePositionOption(option, percentBase, percentOffset) { switch (option) { case "center": case "middle": option = "50%"; break; case "left": case "top": option = "0%"; break; case "right": case "bottom": option = "100%"; } return parsePositionSizeOption(option, percentBase, percentOffset); } /** * Accept number, or numeric string (`'123'`), or percentage ('100%'), as x/y/width/height pixel number. * If null/undefined or invalid, return NaN. * (But allow JS type coercion (`+option`) due to backward compatibility) * @see {PositionSizeOption} */ function parsePositionSizeOption(option, percentBase, percentOffset) { if (isString(option)) { if (isOptionStringPercent(option)) return parseFloat(option) / 100 * percentBase + (percentOffset || 0); return parseFloat(option); } return option == null ? NaN : +option; } /** * Perserve the same rule with `parsePositionSizeOption`. */ function isPositionSizeOptionPercent(option) { return isString(option) && isOptionStringPercent(option); } function isOptionStringPercent(option) { return !!_trim(option).match(/%$/); } function round$3(x, precision, returnStr) { assert(precision != null); if (isNaN(precision)) return returnStr ? "" + x : +x; precision = mathMin$9(mathMax$9(0, precision), TO_FIXED_SUPPORTED_PRECISION_MAX); x = (+x).toFixed(precision); return returnStr ? x : +x; } function roundLegacy(x, precision, returnStr) { if (precision == null) precision = 10; return round$3(x, precision, returnStr); } /** * Inplacd asc sort arr. * The input arr will be modified. */ function asc$1(arr) { arr.sort(function(a, b) { return a - b; }); return arr; } /** * Get precision. * e.g. `getPrecisionSafe(100.123)` return `3`. * e.g. `getPrecisionSafe(100)` return `0`. */ function getPrecision(val) { val = +val; if (isNaN(val)) return 0; if (val > 1e-14) { var e = 1; for (var i = 0; i < 15; i++, e *= 10) if (mathRound$1(val * e) / e === val) return i; } return getPrecisionSafe(val); } /** * Get precision with slow but safe method * e.g. `getPrecisionSafe(100.123)` return `3`. * e.g. `getPrecisionSafe(100)` return `0`. */ function getPrecisionSafe(val) { var str = val.toString().toLowerCase(); var eIndex = str.indexOf("e"); var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0; var significandPartLen = eIndex > 0 ? eIndex : str.length; var dotIndex = str.indexOf("."); return mathMax$9(0, (dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex) - exp); } /** * @deprecated Use `getAcceptableTickPrecision` instead. See bad case in `test/ut/spec/util/number.test.ts` * NOTE: originally introduced in commit `ff93e3e7f9ff24902e10d4469fd3187393b05feb` * * Minimal discernible data precision according to a single pixel. */ function getPixelPrecision(dataExtent, pixelExtent) { var dataQuantity = mathFloor(mathLog(dataExtent[1] - dataExtent[0]) / mathLN10); var sizeQuantity = mathRound$1(mathLog(mathAbs$4(pixelExtent[1] - pixelExtent[0])) / mathLN10); var precision = mathMin$9(mathMax$9(-dataQuantity + sizeQuantity, 0), TO_FIXED_SUPPORTED_PRECISION_MAX); return !isFinite(precision) ? TO_FIXED_SUPPORTED_PRECISION_MAX : precision; } /** * This method chooses a reasonable "data" precision that can be used in `round` method. * A reasonable precision is suitable for display; it may cause cumulative error but acceptable. * * "data" is linearly mapped to pixel according to the ratio determined by `dataSpan` and `pxSpan`. * The diff from the original "data" to the rounded "data" (with the result precision) should be * equal or less than `pxDiffAcceptable`, which is typically `1` pixel. * And the result precision should be as small as possible for a concise display. * * [NOTICE]: using arbitrary parameters is NOT preferable - a discernible misalign (e.g., over 1px) * may occur, especially when `splitLine` is displayed. * * PENDING: Only the linear case is addressed for now; other mapping methods (like logarithm) will * not be covered until necessary. */ function getAcceptableTickPrecision(dataExtent, pxSpan, pxDiffAcceptable) { var dataSpan = mathAbs$4(dataExtent[1] - dataExtent[0]); if (!isFinite(dataSpan) || dataSpan === 0) return NaN; var dataExp2 = mathLog(2 * mathAbs$4(pxDiffAcceptable || 1) * mathAbs$4(dataSpan)) / mathLN10; var pxExp = mathLog(mathAbs$4(pxSpan)) / mathLN10; var precision = mathMax$9(0, mathCeil(-dataExp2 + pxExp)); if (!isFinite(precision)) precision = NaN; return precision; } /** * Get a data of given precision, assuring the sum of percentages * in valueList is 1. * The largest remainder method is used. * https://en.wikipedia.org/wiki/Largest_remainder_method * * @param valueList a list of all data * @param idx index of the data to be processed in valueList * @param precision integer number showing digits of precision * @return percent ranging from 0 to 100 */ function getPercentWithPrecision(valueList, idx, precision) { if (!valueList[idx]) return 0; return getPercentSeats(valueList, precision)[idx] || 0; } /** * Get a data of given precision, assuring the sum of percentages * in valueList is 1. * The largest remainder method is used. * https://en.wikipedia.org/wiki/Largest_remainder_method * * @param valueList a list of all data * @param precision integer number showing digits of precision * @return {Array} */ function getPercentSeats(valueList, precision) { var sum = reduce(valueList, function(acc, val) { return acc + (isNaN(val) ? 0 : val); }, 0); if (sum === 0) return []; var digits = mathPow$1(10, precision); var votesPerQuota = map$1(valueList, function(val) { return (isNaN(val) ? 0 : val) / sum * digits * 100; }); var targetSeats = digits * 100; var seats = map$1(votesPerQuota, function(votes) { return mathFloor(votes); }); var currentSum = reduce(seats, function(acc, val) { return acc + val; }, 0); var remainder = map$1(votesPerQuota, function(votes, idx) { return votes - seats[idx]; }); while (currentSum < targetSeats) { var max = Number.NEGATIVE_INFINITY; var maxId = null; for (var i = 0, len = remainder.length; i < len; ++i) if (remainder[i] > max) { max = remainder[i]; maxId = i; } ++seats[maxId]; remainder[maxId] = 0; ++currentSum; } return map$1(seats, function(seat) { return seat / digits; }); } /** * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004 * See */ function addSafe(val0, val1) { var maxPrecision = mathMax$9(getPrecision(val0), getPrecision(val1)); var sum = val0 + val1; return maxPrecision > TO_FIXED_SUPPORTED_PRECISION_MAX ? sum : round$3(sum, maxPrecision); } var MAX_SAFE_INTEGER = mathPow$1(2, 53) - 1; /** * To 0 - 2 * PI, considering negative radian. */ function remRadian(radian) { var pi2 = mathPI * 2; return (radian % pi2 + pi2) % pi2; } /** * @param {type} radian * @return {boolean} */ function isRadianAroundZero(val) { return val > -RADIAN_EPSILON && val < RADIAN_EPSILON; } var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d{1,2})(?::(\d{1,2})(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; /** * @param value valid type: number | string | Date, otherwise return `new Date(NaN)` * These values can be accepted: * + An instance of Date, represent a time in its own time zone. * + Or string in a subset of ISO 8601, only including: * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06', * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123', * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00', * all of which will be treated as local time if time zone is not specified * (see ). * + Or other string format, including (all of which will be treated as local time): * '2012', '2012-3-1', '2012/3/1', '2012/03/01', * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123' * + a timestamp, which represent a time in UTC. * @return date Never be null/undefined. If invalid, return `new Date(NaN)`. */ function parseDate(value) { if (value instanceof Date) return value; else if (isString(value)) { var match = TIME_REG.exec(value); if (!match) return /* @__PURE__ */ new Date(NaN); if (!match[8]) return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0); else { var hour = +match[4] || 0; if (match[8].toUpperCase() !== "Z") hour -= +match[8].slice(0, 3); return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0)); } } else if (value == null) return /* @__PURE__ */ new Date(NaN); return new Date(mathRound$1(value)); } /** * Quantity of a number. e.g. 0.1, 1, 10, 100 * * @param val * @return */ function quantity(val) { return mathPow$1(10, quantityExponent(val)); } /** * Exponent of the quantity of a number * e.g., 9876 equals to 9.876*10^3, so quantityExponent(9876) is 3 * e.g., 0.09876 equals to 9.876*10^-2, so quantityExponent(0.09876) is -2 * * @param val non-negative value * @return */ function quantityExponent(val) { if (val === 0) return 0; var exp = mathFloor(mathLog(val) / mathLN10); /** * exp is expected to be the rounded-down result of the base-10 log of val. * But due to the precision loss with Math.log(val), we need to restore it * using 10^exp to make sure we can get val back from exp. #11249 */ if (val / mathPow$1(10, exp) >= 10) exp++; return exp; } /** * find a “nice” number approximately equal to x. Round the number if 'round', * take ceiling if 'round'. The primary observation is that the “nicest” * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers. * * See "Nice Numbers for Graph Labels" of Graphic Gems. * * @param val Non-negative value. * @return Niced number */ function nice(val, mode) { var exponent = quantityExponent(val); var exp10 = mathPow$1(10, exponent); var f = val / exp10; var nf; if (mode === 2) nf = 1; else if (mode) { if (f < 1.5) nf = 1; else if (f < 2.5) nf = 2; else if (f < 4) nf = 3; else if (f < 7) nf = 5; else nf = 10; } else if (f < 1) nf = 1; else if (f < 2) nf = 2; else if (f < 3) nf = 3; else if (f < 5) nf = 5; else nf = 10; val = nf * exp10; return round$3(val, -exponent); } /** * This code was copied from "d3.js" * . * See the license statement at the head of this file. * @param ascArr */ function quantile(ascArr, p) { var H = (ascArr.length - 1) * p + 1; var h = mathFloor(H); var v = +ascArr[h - 1]; var e = H - h; return e ? v + e * (ascArr[h] - v) : v; } /** * Order intervals asc, and split them when overlap. * expect(numberUtil.reformIntervals([ * {interval: [18, 62], close: [1, 1]}, * {interval: [-Infinity, -70], close: [0, 0]}, * {interval: [-70, -26], close: [1, 1]}, * {interval: [-26, 18], close: [1, 1]}, * {interval: [62, 150], close: [1, 1]}, * {interval: [106, 150], close: [1, 1]}, * {interval: [150, Infinity], close: [0, 0]} * ])).toEqual([ * {interval: [-Infinity, -70], close: [0, 0]}, * {interval: [-70, -26], close: [1, 1]}, * {interval: [-26, 18], close: [0, 1]}, * {interval: [18, 62], close: [0, 1]}, * {interval: [62, 150], close: [0, 1]}, * {interval: [150, Infinity], close: [0, 0]} * ]); * @param list, where `close` mean open or close * of the interval, and Infinity can be used. * @return The origin list, which has been reformed. */ function reformIntervals(list) { list.sort(function(a, b) { return littleThan(a, b, 0) ? -1 : 1; }); var curr = -Infinity; var currClose = 1; for (var i = 0; i < list.length;) { var interval = list[i].interval; var close_1 = list[i].close; for (var lg = 0; lg < 2; lg++) { if (interval[lg] <= curr) { interval[lg] = curr; close_1[lg] = !lg ? 1 - currClose : 1; } curr = interval[lg]; currClose = close_1[lg]; } if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) list.splice(i, 1); else i++; } return list; function littleThan(a, b, lg) { return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1)); } } /** * [Numeric is defined as]: * `parseFloat(val) == val` * For example: * numeric: * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity, * and they rounded by white-spaces or line-terminal like ' -123 \n ' (see es spec) * not-numeric: * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab', * empty string, string with only white-spaces or line-terminal (see es spec), * 0x12, '0x12', '-0x12', 012, '012', '-012', * non-string, ... * * @test See full test cases in `test/ut/spec/util/number.js`. * @return Must be a typeof number. If not numeric, return NaN. */ function numericToNumber(val) { var valFloat = parseFloat(val); return valFloat == val && (valFloat !== 0 || !isString(val) || val.indexOf("x") <= 0) ? valFloat : NaN; } /** * Definition of "numeric": see `numericToNumber`. */ function isNumeric(val) { return !isNaN(numericToNumber(val)); } /** * Use random base to prevent users hard code depending on * this auto generated marker id. * @return An positive integer. */ function getRandomIdBase() { return mathRound$1(mathRandom() * 9); } /** * Get the greatest common divisor. * * @param {number} a one number * @param {number} b the other number */ function getGreatestCommonDividor(a, b) { if (b === 0) return a; return getGreatestCommonDividor(b, a % b); } /** * Get the least common multiple. * * @param {number} a one number * @param {number} b the other number */ function getLeastCommonMultiple(a, b) { if (a == null) return b; if (b == null) return a; return a * b / getGreatestCommonDividor(a, b); } /** * NOTICE: Assume the input `val` is number or null/undefined, no type check, no support of BitInt. * Therefore, it is NOT suitable for processing user input, but sufficient for * internal usage in most cases. * For platform-agnosticism, `Number.isFinite` is not used. */ function isNullableNumberFinite(val) { return val != null && isFinite(val); } //#endregion //#region node_modules/echarts/lib/util/log.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ECHARTS_PREFIX = "[ECharts] "; var storedLogs = {}; var hasConsole = typeof console !== "undefined" && console.warn && console.log; function outputLog(type, str, onlyOnce) { if (hasConsole) { if (onlyOnce) { if (storedLogs[str]) return; storedLogs[str] = true; } console[type](ECHARTS_PREFIX + str); } } function log(str, onlyOnce) { outputLog("log", str, onlyOnce); } function warn(str, onlyOnce) { outputLog("warn", str, onlyOnce); } function error(str, onlyOnce) { outputLog("error", str, onlyOnce); } function deprecateLog(str) { outputLog("warn", "DEPRECATED: " + str, true); } function deprecateReplaceLog(oldOpt, newOpt, scope) { deprecateLog((scope ? "[" + scope + "]" : "") + (oldOpt + " is deprecated; use " + newOpt + " instead.")); } /** * If in __DEV__ environment, get console printable message for users hint. * Parameters are separated by ' '. * @usage * makePrintable('This is an error on', someVar, someObj); * * @param hintInfo anything about the current execution context to hint users. * @throws Error */ function makePrintable() { var hintInfo = []; for (var _i = 0; _i < arguments.length; _i++) hintInfo[_i] = arguments[_i]; var msg = ""; var makePrintableStringIfPossible_1 = function(val) { return val === void 0 ? "undefined" : val === Infinity ? "Infinity" : val === -Infinity ? "-Infinity" : eqNaN(val) ? "NaN" : val instanceof Date ? "Date(" + val.toISOString() + ")" : isFunction(val) ? "function () { ... }" : isRegExp(val) ? val + "" : null; }; msg = map$1(hintInfo, function(arg) { if (isString(arg)) return arg; else { var printableStr = makePrintableStringIfPossible_1(arg); if (printableStr != null) return printableStr; else if (typeof JSON !== "undefined" && JSON.stringify) try { return JSON.stringify(arg, function(n, val) { var printableStr = makePrintableStringIfPossible_1(val); return printableStr == null ? val : printableStr; }); } catch (err) { return "?"; } else return "?"; } }).join(" "); return msg; } /** * @throws Error */ function throwError(msg) { throw new Error(msg); } //#endregion //#region node_modules/echarts/lib/util/model.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function interpolateNumber(p0, p1, percent) { return (p1 - p0) * percent + p0; } /** * Make the name displayable. But we should * make sure it is not duplicated with user * specified name, so use '\0'; */ var DUMMY_COMPONENT_NAME_PREFIX = "series\0"; var INTERNAL_COMPONENT_ID_PREFIX = "\0_ec_\0"; /** * If value is not array, then translate it to array. * @param {*} value * @return {Array} [value] or value */ function normalizeToArray(value) { return value instanceof Array ? value : value == null ? [] : [value]; } /** * Sync default option between normal and emphasis like `position` and `show` * In case some one will write code like * label: { * show: false, * position: 'outside', * fontSize: 18 * }, * emphasis: { * label: { show: true } * } */ function defaultEmphasis(opt, key, subOpts) { if (opt) { opt[key] = opt[key] || {}; opt.emphasis = opt.emphasis || {}; opt.emphasis[key] = opt.emphasis[key] || {}; for (var i = 0, len = subOpts.length; i < len; i++) { var subOptName = subOpts[i]; if (!opt.emphasis[key].hasOwnProperty(subOptName) && opt[key].hasOwnProperty(subOptName)) opt.emphasis[key][subOptName] = opt[key][subOptName]; } } } var TEXT_STYLE_OPTIONS = [ "fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding" ]; /** * The method does not ensure performance. * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] * This helper method retrieves value from data. */ function getDataItemValue(dataItem) { return isObject$3(dataItem) && !isArray$1(dataItem) && !(dataItem instanceof Date) ? dataItem.value : dataItem; } /** * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] * This helper method determine if dataItem has extra option besides value */ function isDataItemOption(dataItem) { return isObject$3(dataItem) && !(dataItem instanceof Array); } /** * Mapping to existings for merge. * * Mode "normalMege": * The mapping result (merge result) will keep the order of the existing * component, rather than the order of new option. Because we should ensure * some specified index reference (like xAxisIndex) keep work. * And in most cases, "merge option" is used to update partial option but not * be expected to change the order. * * Mode "replaceMege": * (1) Only the id mapped components will be merged. * (2) Other existing components (except internal components) will be removed. * (3) Other new options will be used to create new component. * (4) The index of the existing components will not be modified. * That means their might be "hole" after the removal. * The new components are created first at those available index. * * Mode "replaceAll": * This mode try to support that reproduce an echarts instance from another * echarts instance (via `getOption`) in some simple cases. * In this scenario, the `result` index are exactly the consistent with the `newCmptOptions`, * which ensures the component index referring (like `xAxisIndex: ?`) corrent. That is, * the "hole" in `newCmptOptions` will also be kept. * On the contrary, other modes try best to eliminate holes. * PENDING: This is an experimental mode yet. * * @return See the comment of . */ function mappingToExists(existings, newCmptOptions, mode) { var isNormalMergeMode = mode === "normalMerge"; var isReplaceMergeMode = mode === "replaceMerge"; var isReplaceAllMode = mode === "replaceAll"; existings = existings || []; newCmptOptions = (newCmptOptions || []).slice(); var existingIdIdxMap = createHashMap(); each$12(newCmptOptions, function(cmptOption, index) { if (!isObject$3(cmptOption)) { newCmptOptions[index] = null; return; } if (cmptOption.id != null && !isValidIdOrName(cmptOption.id)) warnInvalidateIdOrName(cmptOption.id); if (cmptOption.name != null && !isValidIdOrName(cmptOption.name)) warnInvalidateIdOrName(cmptOption.name); }); var result = prepareResult(existings, existingIdIdxMap, mode); if (isNormalMergeMode || isReplaceMergeMode) mappingById(result, existings, existingIdIdxMap, newCmptOptions); if (isNormalMergeMode) mappingByName(result, newCmptOptions); if (isNormalMergeMode || isReplaceMergeMode) mappingByIndex(result, newCmptOptions, isReplaceMergeMode); else if (isReplaceAllMode) mappingInReplaceAllMode(result, newCmptOptions); makeIdAndName(result); return result; } function prepareResult(existings, existingIdIdxMap, mode) { var result = []; if (mode === "replaceAll") return result; for (var index = 0; index < existings.length; index++) { var existing = existings[index]; if (existing && existing.id != null) existingIdIdxMap.set(existing.id, index); result.push({ existing: mode === "replaceMerge" || isComponentIdInternal(existing) ? null : existing, newOption: null, keyInfo: null, brandNew: null }); } return result; } function mappingById(result, existings, existingIdIdxMap, newCmptOptions) { each$12(newCmptOptions, function(cmptOption, index) { if (!cmptOption || cmptOption.id == null) return; var optionId = makeComparableKey(cmptOption.id); var existingIdx = existingIdIdxMap.get(optionId); if (existingIdx != null) { var resultItem = result[existingIdx]; assert(!resultItem.newOption, "Duplicated option on id \"" + optionId + "\"."); resultItem.newOption = cmptOption; resultItem.existing = existings[existingIdx]; newCmptOptions[index] = null; } }); } function mappingByName(result, newCmptOptions) { each$12(newCmptOptions, function(cmptOption, index) { if (!cmptOption || cmptOption.name == null) return; for (var i = 0; i < result.length; i++) { var existing = result[i].existing; if (!result[i].newOption && existing && (existing.id == null || cmptOption.id == null) && !isComponentIdInternal(cmptOption) && !isComponentIdInternal(existing) && keyExistAndEqual("name", existing, cmptOption)) { result[i].newOption = cmptOption; newCmptOptions[index] = null; return; } } }); } function mappingByIndex(result, newCmptOptions, brandNew) { each$12(newCmptOptions, function(cmptOption) { if (!cmptOption) return; var resultItem; var nextIdx = 0; while ((resultItem = result[nextIdx]) && (resultItem.newOption || isComponentIdInternal(resultItem.existing) || resultItem.existing && cmptOption.id != null && !keyExistAndEqual("id", cmptOption, resultItem.existing))) nextIdx++; if (resultItem) { resultItem.newOption = cmptOption; resultItem.brandNew = brandNew; } else result.push({ newOption: cmptOption, brandNew, existing: null, keyInfo: null }); nextIdx++; }); } function mappingInReplaceAllMode(result, newCmptOptions) { each$12(newCmptOptions, function(cmptOption) { result.push({ newOption: cmptOption, brandNew: true, existing: null, keyInfo: null }); }); } /** * Make id and name for mapping result (result of mappingToExists) * into `keyInfo` field. */ function makeIdAndName(mapResult) { var idMap = createHashMap(); each$12(mapResult, function(item) { var existing = item.existing; existing && idMap.set(existing.id, item); }); each$12(mapResult, function(item) { var opt = item.newOption; assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, "id duplicates: " + (opt && opt.id)); opt && opt.id != null && idMap.set(opt.id, item); !item.keyInfo && (item.keyInfo = {}); }); each$12(mapResult, function(item, index) { var existing = item.existing; var opt = item.newOption; var keyInfo = item.keyInfo; if (!isObject$3(opt)) return; keyInfo.name = opt.name != null ? makeComparableKey(opt.name) : existing ? existing.name : DUMMY_COMPONENT_NAME_PREFIX + index; if (existing) keyInfo.id = makeComparableKey(existing.id); else if (opt.id != null) keyInfo.id = makeComparableKey(opt.id); else { var idNum = 0; do keyInfo.id = "\0" + keyInfo.name + "\0" + idNum++; while (idMap.get(keyInfo.id)); } idMap.set(keyInfo.id, item); }); } function keyExistAndEqual(attr, obj1, obj2) { var key1 = convertOptionIdName(obj1[attr], null); var key2 = convertOptionIdName(obj2[attr], null); return key1 != null && key2 != null && key1 === key2; } /** * @return return null if not exist. */ function makeComparableKey(val) { if (val == null) throw new Error(); return convertOptionIdName(val, ""); } function convertOptionIdName(idOrName, defaultValue) { if (idOrName == null) return defaultValue; return isString(idOrName) ? idOrName : isNumber(idOrName) || isStringSafe(idOrName) ? idOrName + "" : defaultValue; } function warnInvalidateIdOrName(idOrName) { warn("`" + idOrName + "` is invalid id or name. Must be a string or number."); } function isValidIdOrName(idOrName) { return isStringSafe(idOrName) || isNumeric(idOrName); } function isNameSpecified(componentModel) { var name = componentModel.name; return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX)); } /** * @public * @param {Object} cmptOption * @return {boolean} */ function isComponentIdInternal(cmptOption) { return cmptOption && cmptOption.id != null && makeComparableKey(cmptOption.id).indexOf(INTERNAL_COMPONENT_ID_PREFIX) === 0; } function makeInternalComponentId(idSuffix) { return INTERNAL_COMPONENT_ID_PREFIX + idSuffix; } function setComponentTypeToKeyInfo(mappingResult, mainType, componentModelCtor) { each$12(mappingResult, function(item) { var newOption = item.newOption; if (isObject$3(newOption)) { item.keyInfo.mainType = mainType; item.keyInfo.subType = determineSubType(mainType, newOption, item.existing, componentModelCtor); } }); } function determineSubType(mainType, newCmptOption, existComponent, componentModelCtor) { return newCmptOption.type ? newCmptOption.type : existComponent ? existComponent.subType : componentModelCtor.determineSubType(mainType, newCmptOption); } /** * A helper for removing duplicate items between batchA and batchB, * and in themselves, and categorize by series. * * @param batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] * @param batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] * @return result: [resultBatchA, resultBatchB] */ function compressBatches(batchA, batchB) { var mapA = {}; var mapB = {}; makeMap(batchA || [], mapA); makeMap(batchB || [], mapB, mapA); return [mapToArray(mapA), mapToArray(mapB)]; function makeMap(sourceBatch, map, otherMap) { for (var i = 0, len = sourceBatch.length; i < len; i++) { var seriesId = convertOptionIdName(sourceBatch[i].seriesId, null); if (seriesId == null) return; var dataIndices = normalizeToArray(sourceBatch[i].dataIndex); var otherDataIndices = otherMap && otherMap[seriesId]; for (var j = 0, lenj = dataIndices.length; j < lenj; j++) { var dataIndex = dataIndices[j]; if (otherDataIndices && otherDataIndices[dataIndex]) otherDataIndices[dataIndex] = null; else (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1; } } } function mapToArray(map, isData) { var result = []; for (var i in map) if (map.hasOwnProperty(i) && map[i] != null) { if (isData) result.push(+i); else { var dataIndices = mapToArray(map[i], true); dataIndices.length && result.push({ seriesId: i, dataIndex: dataIndices }); } } return result; } } /** * @param payload Contains dataIndex (means rawIndex) / dataIndexInside / name * each of which can be Array or primary type. * @return dataIndex If not found, return undefined/null. */ function queryDataIndex(data, payload) { if (payload.dataIndexInside != null) return payload.dataIndexInside; else if (payload.dataIndex != null) return isArray$1(payload.dataIndex) ? map$1(payload.dataIndex, function(value) { return data.indexOfRawIndex(value); }) : data.indexOfRawIndex(payload.dataIndex); else if (payload.name != null) return isArray$1(payload.name) ? map$1(payload.name, function(value) { return data.indexOfName(value); }) : data.indexOfName(payload.name); } /** * [CAVEAT]: * DO NOT use it in performance-sensitive scenarios. * Likely a hash map lookup; not inline-cache friendly. * * Enable property storage to any host object. * Notice: Serialization is not supported. * * For example: * let inner = makeInner(); * * function some1(hostObj) { * inner(hostObj).someProperty = 1212; * ... * } * function some2() { * let fields = inner(this); * fields.someProperty1 = 1212; * fields.someProperty2 = 'xx'; * ... * } */ function makeInner() { var key = "__ec_inner_" + innerUniqueIndex++; return function(hostObj) { return hostObj[key] || (hostObj[key] = {}); }; } var innerUniqueIndex = getRandomIdBase(); /** * The same behavior as `component.getReferringComponents`. */ function parseFinder$1(ecModel, finderInput, opt) { var _a = preParseFinder(finderInput, opt), mainTypeSpecified = _a.mainTypeSpecified, queryOptionMap = _a.queryOptionMap; var result = _a.others; var defaultMainType = opt ? opt.defaultMainType : null; if (!mainTypeSpecified && defaultMainType) queryOptionMap.set(defaultMainType, {}); queryOptionMap.each(function(queryOption, mainType) { var queryResult = queryReferringComponents(ecModel, mainType, queryOption, { useDefault: defaultMainType === mainType, enableAll: opt && opt.enableAll != null ? opt.enableAll : true, enableNone: opt && opt.enableNone != null ? opt.enableNone : true }); result[mainType + "Models"] = queryResult.models; result[mainType + "Model"] = queryResult.models[0]; }); return result; } function preParseFinder(finderInput, opt) { var finder; if (isString(finderInput)) { var obj = {}; obj[finderInput + "Index"] = 0; finder = obj; } else finder = finderInput; var queryOptionMap = createHashMap(); var others = {}; var mainTypeSpecified = false; each$12(finder, function(value, key) { if (key === "dataIndex" || key === "dataIndexInside") { others[key] = value; return; } var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || []; var mainType = parsedKey[1]; var queryType = (parsedKey[2] || "").toLowerCase(); if (!mainType || !queryType || opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) return; mainTypeSpecified = mainTypeSpecified || !!mainType; var queryOption = queryOptionMap.get(mainType) || queryOptionMap.set(mainType, {}); queryOption[queryType] = value; }); return { mainTypeSpecified, queryOptionMap, others }; } var SINGLE_REFERRING = { useDefault: true, enableAll: false, enableNone: false }; var MULTIPLE_REFERRING = { useDefault: false, enableAll: true, enableNone: true }; function queryReferringComponents(ecModel, mainType, userOption, opt) { opt = opt || SINGLE_REFERRING; var indexOption = userOption.index; var idOption = userOption.id; var nameOption = userOption.name; var result = { models: null, specified: indexOption != null || idOption != null || nameOption != null }; if (!result.specified) { var firstCmpt = void 0; result.models = opt.useDefault && (firstCmpt = ecModel.getComponent(mainType)) ? [firstCmpt] : []; return result; } if (indexOption === "none" || indexOption === false) { if (opt.enableNone) { result.models = []; return result; } else { error("`\"none\"` or `false` is not a valid value on index option."); indexOption = -1; } } if (indexOption === "all") { if (opt.enableAll) indexOption = idOption = nameOption = null; else { error("`\"all\"` is not a valid value on index option."); indexOption = -1; } } result.models = ecModel.queryComponents({ mainType, index: indexOption, id: idOption, name: nameOption }); return result; } /** * `{{mainType}Id, {mainType}Index, {mainType}Name}` takes precedence if provided in `payload`; * otherwise, query by `mainType`. * `subType` performs futher filtering if provided. */ function makeQueryConditionKindA(payload, mainType, subType) { assert(mainType); var query = {}; query[mainType + "Id"] = payload[mainType + "Id"]; query[mainType + "Index"] = payload[mainType + "Index"]; query[mainType + "Name"] = payload[mainType + "Name"]; var condition = { mainType, query }; subType && (condition.subType = subType); return condition; } function setAttribute(dom, key, value) { dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value; } function getAttribute(dom, key) { return dom.getAttribute ? dom.getAttribute(key) : dom[key]; } function getTooltipRenderMode(renderModeOption) { if (renderModeOption === "auto") return env.domSupported ? "html" : "richText"; else return renderModeOption || "html"; } /** * Group a list by key. */ function groupData(array, getKey) { var buckets = createHashMap(); var keys = []; each$12(array, function(item) { var key = getKey(item); (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item); }); return { keys, buckets }; } /** * Interpolate raw values of a series with percent * * @param data data * @param labelModel label model of the text element * @param sourceValue start value. May be null/undefined when init. * @param targetValue end value * @param percent 0~1 percentage; 0 uses start value while 1 uses end value * @return interpolated values * If `sourceValue` and `targetValue` are `number`, return `number`. * If `sourceValue` and `targetValue` are `string`, return `string`. * If `sourceValue` and `targetValue` are `(string | number)[]`, return `(string | number)[]`. * Other cases do not supported. */ function interpolateRawValues(data, precision, sourceValue, targetValue, percent) { var isAutoPrecision = precision == null || precision === "auto"; if (targetValue == null) return targetValue; if (isNumber(targetValue)) { var value = interpolateNumber(sourceValue || 0, targetValue, percent); return round$3(value, isAutoPrecision ? Math.max(getPrecision(sourceValue || 0), getPrecision(targetValue)) : precision); } else if (isString(targetValue)) return percent < 1 ? sourceValue : targetValue; else { var interpolated = []; var leftArr = sourceValue; var rightArr = targetValue; var length_1 = Math.max(leftArr ? leftArr.length : 0, rightArr.length); for (var i = 0; i < length_1; ++i) { var info = data.getDimensionInfo(i); if (info && info.type === "ordinal") interpolated[i] = (percent < 1 && leftArr ? leftArr : rightArr)[i]; else { var leftVal = leftArr && leftArr[i] ? leftArr[i] : 0; var rightVal = rightArr[i]; var value = interpolateNumber(leftVal, rightVal, percent); interpolated[i] = round$3(value, isAutoPrecision ? Math.max(getPrecision(leftVal), getPrecision(rightVal)) : precision); } } return interpolated; } } /** * Use an iterator to avoid exposing the internal list or duplicating it * for the outside traveller, and no extra heap allocation. * @usage * for (const it = resetIterator(); it.next();) { * const item = it.item; * const key = it.key; * const itIdx = it.itIdx; * // ... * } * @usage * const it = resetIterator(); * while (it.next()) { ... } * @usage * for (resetIterator(it); it.next();) { ... } */ var ListIterator = function() { function ListIterator() {} /** * The loop condition is `idx < end` if `step > 0`; * The loop condition is `idx >= end` if `step < 0`. * * @param end By default `list.length` if `step > 0`; `0` if `step < 0`. * @param step By default `1`. */ ListIterator.prototype.reset = function(list, start, end, step) { this._list = list; this._step = step = step || 1; this._idx = start; this._end = end != null ? end : step > 0 ? list.length : 0; this.item = null; this.key = NaN; return this; }; ListIterator.prototype.next = function() { if (this._step > 0 ? this._idx < this._end : this._idx >= this._end) { this.item = this._list[this._idx]; this.key = this._idx = this._idx + this._step; return true; } return false; }; return ListIterator; }(); function clearTmpModel(model) { model.option = model.parentModel = model.ecModel = null; } function initExtentForUnion() { return [Infinity, -Infinity]; } /** * NOTICE: * - The input `val` must be a number - type checking is not performed. * - `extent` should be initialized as `initExtentForUnion()`. */ function unionExtentFromNumber(extent, val) { if (isValidNumberForExtent(val)) { val < extent[0] && (extent[0] = val); val > extent[1] && (extent[1] = val); } } /** * NOTICE: * - The input `val` must be a number - type checking is not performed. * - `extent` should be initialized as `initExtentForUnion()`. */ function unionExtentStartFromNumber(extent, val) { if (isValidNumberForExtent(val) && val < extent[0]) extent[0] = val; } /** * NOTICE: * - The input `val` must be a number - type checking is not performed. * - `extent` should be initialized as `initExtentForUnion()`. */ function unionExtentEndFromNumber(extent, val) { if (isValidNumberForExtent(val) && val > extent[1]) extent[1] = val; } /** * NOTICE: * - `extent` should be initialized as `initExtentForUnion()`. */ function unionExtentFromExtent(tarExtent, srcExtent) { if (isValidBoundsForExtent(srcExtent[0], srcExtent[1])) { srcExtent[0] < tarExtent[0] && (tarExtent[0] = srcExtent[0]); srcExtent[1] > tarExtent[1] && (tarExtent[1] = srcExtent[1]); } } /** * PENDING: `Infinity` from user data is not necessarily meaningless, but visualizing it requires * special handling and it will not be supported until required. So we simply ignore it here. */ function isValidNumberForExtent(val) { return val != null && isFinite(val); } function isValidBoundsForExtent(start, end) { return isValidNumberForExtent(start) && isValidNumberForExtent(end) && start <= end; } /** * `extent` should be initialized by `initExtentForUnion()`, and unioned by `unionExtent()`. * `extent` may contain `Infinity` / `NaN`, but assume no `null`/`undefined`. */ function extentHasValue(extent) { var span = extent[1] - extent[0]; return isFinite(span) && span >= 0; } /** * NOTE: considered items are null/undefined/NaN - do nothing for this case. */ function ensureExtentAscSimply(extent) { if (isValidBoundsForExtent(extent[0], extent[1]) && extent[0] > extent[1]) extent[0] = extent[1]; } /** * A util for ensuring the callback is called only once. * @usage * const callOnlyOnce = makeCallOnlyOnce(); // Should be static (ESM top level). * function someFunc(registers: EChartsExtensionInstallRegisters): void { * callOnlyOnce(registers, function () { * // Do something immediately and only once per registers. * } * } */ function makeCallOnlyOnce() { var hiddenKey = "__ec_once_" + onceUniqueIndex++; return function(hostObj, cb) { assert(hostObj); if (!hasOwn(hostObj, hiddenKey)) { hostObj[hiddenKey] = 1; cb(); } }; } var onceUniqueIndex = getRandomIdBase(); /** * @usage * - The earlier item takes precedence for duplicate items. * - The input `arr` will be modified if `resolve` is null/undefined. * - Callers can use `resolve` to manually modify the `currItem`. * The input `arr` will not be modified if `resolve` is passed. * `resolve` will be called on every item. * - Callers need to handle null/undefined (if existing) in `getKey`. */ function removeDuplicates(arr, getKey, resolve) { var dupMap = createHashMap(); var writeIdx = 0; each$12(arr, function(item) { var key = getKey(item); assert(isString(key)); var count = dupMap.get(key) || 0; if (resolve) resolve(item, count); if (!count && !resolve) arr[writeIdx++] = item; dupMap.set(key, count + 1); }); if (!resolve) arr.length = writeIdx; } function removeDuplicatesGetKeyFromValueProp(item) { assert(item.value != null); return item.value + ""; } function removeDuplicatesGetKeyFromItemItself(item) { assert(item != null); return item + ""; } function getIncrementalId(seriesModel, useIncremental) { return retrieve2(useIncremental, true) ? seriesModel.seriesIndex + 2 : 0; } function preparePipelineContext(seriesModel, view, pipeline) { var dataLen = seriesModel.getData().count(); return { progressiveRender: pipeline.progressiveEnabled && view.incrementalPrepareRender && dataLen >= pipeline.threshold, large: seriesModel.get("large") && dataLen >= seriesModel.get("largeThreshold"), modDataCount: seriesModel.get("progressiveChunkMode") === "mod" ? seriesModel.getData().count() : null }; } /** * When some task "blocks" the upstream part of the pipeline, the upstream output (typically, a TypedArray * to carry layout points, e.g., `data.getLayout('points')`) range is from the start to the final end. * A downstream comsumer should either properly record cursors when reading from the upstream output, * or fail fast on that usage. * Otherwise, take the `data.getLayout('points')` as an example, repeatedly merging it with the existing * shape path can create a big path, which degrades performance but is hard to detect. * * This method provides an assertion for that. */ function validateUpstreamOutputRange(upstreamOutputRange, thisTaskPlannedRange) { assert(upstreamOutputRange.start === thisTaskPlannedRange.start && upstreamOutputRange.end === thisTaskPlannedRange.end); } function createSimpleOverallStageHandler(seriesType, overallReset) { return { seriesType, overallReset }; } function createSimpleOverallStageHandler2(overallReset) { return { overallReset }; } //#endregion //#region node_modules/echarts/lib/util/clazz.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TYPE_DELIMITER = "."; var IS_CONTAINER = "___EC__COMPONENT__CONTAINER___"; var IS_EXTENDED_CLASS = "___EC__EXTENDED_CLASS___"; /** * Notice, parseClassType('') should returns {main: '', sub: ''} * @public */ function parseClassType(componentType) { var ret = { main: "", sub: "" }; if (componentType) { var typeArr = componentType.split(TYPE_DELIMITER); ret.main = typeArr[0] || ""; ret.sub = typeArr[1] || ""; } return ret; } /** * @public */ function checkClassType(componentType) { assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), "componentType \"" + componentType + "\" illegal"); } function isExtendedClass(clz) { return !!(clz && clz[IS_EXTENDED_CLASS]); } /** * Implements `ExtendableConstructor` for `rootClz`. * * @usage * ```ts * class Xxx {} * type XxxConstructor = typeof Xxx & ExtendableConstructor * enableClassExtend(Xxx as XxxConstructor); * ``` */ function enableClassExtend(rootClz, mandatoryMethods) { rootClz.$constructor = rootClz; rootClz.extend = function(proto) { each$12(mandatoryMethods, function(method) { if (!proto[method]) console.warn("Method `" + method + "` should be implemented" + (proto.type ? " in " + proto.type : "") + "."); }); var superClass = this; var ExtendedClass; if (isESClass(superClass)) ExtendedClass = function(_super) { __extends(class_1, _super); function class_1() { return _super.apply(this, arguments) || this; } return class_1; }(superClass); else { ExtendedClass = function() { (proto.$constructor || superClass).apply(this, arguments); }; inherits(ExtendedClass, this); } extend(ExtendedClass.prototype, proto); ExtendedClass[IS_EXTENDED_CLASS] = true; ExtendedClass.extend = this.extend; ExtendedClass.superCall = superCall; ExtendedClass.superApply = superApply; ExtendedClass.superClass = superClass; return ExtendedClass; }; } function isESClass(fn) { return isFunction(fn) && /^class\s/.test(Function.prototype.toString.call(fn)); } /** * A work around to both support ts extend and this extend mechanism. * on sub-class. * @usage * ```ts * class Component { ... } * classUtil.enableClassExtend(Component); * classUtil.enableClassManagement(Component, {registerWhenExtend: true}); * * class Series extends Component { ... } * // Without calling `markExtend`, `registerWhenExtend` will not work. * Component.markExtend(Series); * ``` */ function mountExtend(SubClz, SupperClz) { SubClz.extend = SupperClz.extend; } var classBase = Math.round(Math.random() * 10); /** * Implements `CheckableConstructor` for `target`. * Can not use instanceof, consider different scope by * cross domain or es module import in ec extensions. * Mount a method "isInstance()" to Clz. * * @usage * ```ts * class Xxx {} * type XxxConstructor = typeof Xxx & CheckableConstructor; * enableClassCheck(Xxx as XxxConstructor) * ``` */ function enableClassCheck(target) { var classAttr = ["__\0is_clz", classBase++].join("_"); target.prototype[classAttr] = true; assert(!target.isInstance, "The method \"is\" can not be defined."); target.isInstance = function(obj) { return !!(obj && obj[classAttr]); }; } function superCall(context, methodName) { var args = []; for (var _i = 2; _i < arguments.length; _i++) args[_i - 2] = arguments[_i]; return this.superClass.prototype[methodName].apply(context, args); } function superApply(context, methodName, args) { return this.superClass.prototype[methodName].apply(context, args); } /** * Implements `ClassManager` for `target` * * @usage * ```ts * class Xxx {} * type XxxConstructor = typeof Xxx & ClassManager * enableClassManagement(Xxx as XxxConstructor); * ``` */ function enableClassManagement(target) { /** * Component model classes * key: componentType, * value: * componentClass, when componentType is 'a' * or Object., when componentType is 'a.b' */ var storage = {}; target.registerClass = function(clz) { var componentFullType = clz.type || clz.prototype.type; if (componentFullType) { checkClassType(componentFullType); clz.prototype.type = componentFullType; var componentTypeInfo = parseClassType(componentFullType); if (!componentTypeInfo.sub) { if (storage[componentTypeInfo.main]) console.warn(componentTypeInfo.main + " exists."); storage[componentTypeInfo.main] = clz; } else if (componentTypeInfo.sub !== IS_CONTAINER) { var container = makeContainer(componentTypeInfo); container[componentTypeInfo.sub] = clz; } } return clz; }; target.getClass = function(mainType, subType, throwWhenNotFound) { var clz = storage[mainType]; if (clz && clz[IS_CONTAINER]) clz = subType ? clz[subType] : null; if (throwWhenNotFound && !clz) throw new Error(!subType ? mainType + ".type should be specified." : "Component " + mainType + "." + (subType || "") + " is used but not imported."); return clz; }; target.getClassesByMainType = function(componentType) { var componentTypeInfo = parseClassType(componentType); var result = []; var obj = storage[componentTypeInfo.main]; if (obj && obj[IS_CONTAINER]) each$12(obj, function(o, type) { type !== IS_CONTAINER && result.push(o); }); else result.push(obj); return result; }; target.hasClass = function(componentType) { return !!storage[parseClassType(componentType).main]; }; /** * @return Like ['aa', 'bb'], but can not be ['aa.xx'] */ target.getAllClassMainTypes = function() { var types = []; each$12(storage, function(obj, type) { types.push(type); }); return types; }; /** * If a main type is container and has sub types */ target.hasSubTypes = function(componentType) { var obj = storage[parseClassType(componentType).main]; return obj && obj[IS_CONTAINER]; }; function makeContainer(componentTypeInfo) { var container = storage[componentTypeInfo.main]; if (!container || !container[IS_CONTAINER]) { container = storage[componentTypeInfo.main] = {}; container[IS_CONTAINER] = true; } return container; } } //#endregion //#region node_modules/echarts/lib/model/mixin/makeStyleMapper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function makeStyleMapper(properties, ignoreParent) { for (var i = 0; i < properties.length; i++) if (!properties[i][1]) properties[i][1] = properties[i][0]; ignoreParent = ignoreParent || false; return function(model, excludes, includes) { var style = {}; for (var i = 0; i < properties.length; i++) { var propName = properties[i][1]; if (excludes && indexOf(excludes, propName) >= 0 || includes && indexOf(includes, propName) < 0) continue; var val = model.getShallow(propName, ignoreParent); if (val != null) style[properties[i][0]] = val; } return style; }; } var getAreaStyle = makeStyleMapper([ ["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["opacity"], ["shadowColor"] ]); var AreaStyleMixin = function() { function AreaStyleMixin() {} AreaStyleMixin.prototype.getAreaStyle = function(excludes, includes) { return getAreaStyle(this, excludes, includes); }; return AreaStyleMixin; }(); //#endregion //#region node_modules/zrender/lib/graphic/helper/image.js var globalImageCache = new LRU(50); function findExistImage(newImageOrSrc) { if (typeof newImageOrSrc === "string") { var cachedImgObj = globalImageCache.get(newImageOrSrc); return cachedImgObj && cachedImgObj.image; } else return newImageOrSrc; } function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) { if (!newImageOrSrc) return image; else if (typeof newImageOrSrc === "string") { if (image && image.__zrImageSrc === newImageOrSrc || !hostEl) return image; var cachedImgObj = globalImageCache.get(newImageOrSrc); var pendingWrap = { hostEl, cb: onload, cbPayload }; if (cachedImgObj) { image = cachedImgObj.image; !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); } else { image = platformApi.loadImage(newImageOrSrc, imageOnLoad, imageOnLoad); image.__zrImageSrc = newImageOrSrc; globalImageCache.put(newImageOrSrc, image.__cachedImgObj = { image, pending: [pendingWrap] }); } return image; } else return newImageOrSrc; } function imageOnLoad() { var cachedImgObj = this.__cachedImgObj; this.onload = this.onerror = this.__cachedImgObj = null; for (var i = 0; i < cachedImgObj.pending.length; i++) { var pendingWrap = cachedImgObj.pending[i]; var cb = pendingWrap.cb; cb && cb(this, pendingWrap.cbPayload); pendingWrap.hostEl.dirty(); } cachedImgObj.pending.length = 0; } function isImageReady(image) { return image && image.width && image.height; } //#endregion //#region node_modules/zrender/lib/graphic/helper/parseText.js var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g; function truncateText(text, containerWidth, font, ellipsis, options) { var out = {}; truncateText2(out, text, containerWidth, font, ellipsis, options); return out.text; } function truncateText2(out, text, containerWidth, font, ellipsis, options) { if (!containerWidth) { out.text = ""; out.isTruncated = false; return; } var textLines = (text + "").split("\n"); options = prepareTruncateOptions(containerWidth, font, ellipsis, options); var isTruncated = false; var truncateOut = {}; for (var i = 0, len = textLines.length; i < len; i++) { truncateSingleLine(truncateOut, textLines[i], options); textLines[i] = truncateOut.textLine; isTruncated = isTruncated || truncateOut.isTruncated; } out.text = textLines.join("\n"); out.isTruncated = isTruncated; } function prepareTruncateOptions(containerWidth, font, ellipsis, options) { options = options || {}; var preparedOpts = extend({}, options); ellipsis = retrieve2(ellipsis, "..."); preparedOpts.maxIterations = retrieve2(options.maxIterations, 2); var minChar = preparedOpts.minChar = retrieve2(options.minChar, 0); var fontMeasureInfo = preparedOpts.fontMeasureInfo = ensureFontMeasureInfo(font); var ascCharWidth = fontMeasureInfo.asciiCharWidth; preparedOpts.placeholder = retrieve2(options.placeholder, ""); var contentWidth = containerWidth = Math.max(0, containerWidth - 1); for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) contentWidth -= ascCharWidth; var ellipsisWidth = measureWidth(fontMeasureInfo, ellipsis); if (ellipsisWidth > contentWidth) { ellipsis = ""; ellipsisWidth = 0; } contentWidth = containerWidth - ellipsisWidth; preparedOpts.ellipsis = ellipsis; preparedOpts.ellipsisWidth = ellipsisWidth; preparedOpts.contentWidth = contentWidth; preparedOpts.containerWidth = containerWidth; return preparedOpts; } function truncateSingleLine(out, textLine, options) { var containerWidth = options.containerWidth; var contentWidth = options.contentWidth; var fontMeasureInfo = options.fontMeasureInfo; if (!containerWidth) { out.textLine = ""; out.isTruncated = false; return; } var lineWidth = measureWidth(fontMeasureInfo, textLine); if (lineWidth <= containerWidth) { out.textLine = textLine; out.isTruncated = false; return; } for (var j = 0;; j++) { if (lineWidth <= contentWidth || j >= options.maxIterations) { textLine += options.ellipsis; break; } var subLength = j === 0 ? estimateLength(textLine, contentWidth, fontMeasureInfo) : lineWidth > 0 ? Math.floor(textLine.length * contentWidth / lineWidth) : 0; textLine = textLine.substr(0, subLength); lineWidth = measureWidth(fontMeasureInfo, textLine); } if (textLine === "") textLine = options.placeholder; out.textLine = textLine; out.isTruncated = true; } function estimateLength(text, contentWidth, fontMeasureInfo) { var width = 0; var i = 0; for (var len = text.length; i < len && width < contentWidth; i++) width += measureCharWidth(fontMeasureInfo, text.charCodeAt(i)); return i; } function parsePlainText(rawText, style, defaultOuterWidth, defaultOuterHeight) { var text = formatText(rawText); var overflow = style.overflow; var padding = style.padding; var paddingH = padding ? padding[1] + padding[3] : 0; var paddingV = padding ? padding[0] + padding[2] : 0; var font = style.font; var truncate = overflow === "truncate"; var calculatedLineHeight = getLineHeight(font); var lineHeight = retrieve2(style.lineHeight, calculatedLineHeight); var truncateLineOverflow = style.lineOverflow === "truncate"; var isTruncated = false; var width = style.width; if (width == null && defaultOuterWidth != null) width = defaultOuterWidth - paddingH; var height = style.height; if (height == null && defaultOuterHeight != null) height = defaultOuterHeight - paddingV; var lines; if (width != null && (overflow === "break" || overflow === "breakAll")) lines = text ? wrapText(text, style.font, width, overflow === "breakAll", 0).lines : []; else lines = text ? text.split("\n") : []; var contentHeight = lines.length * lineHeight; if (height == null) height = contentHeight; if (contentHeight > height && truncateLineOverflow) { var lineCount = Math.floor(height / lineHeight); isTruncated = isTruncated || lines.length > lineCount; lines = lines.slice(0, lineCount); contentHeight = lines.length * lineHeight; } if (text && truncate && width != null) { var options = prepareTruncateOptions(width, font, style.ellipsis, { minChar: style.truncateMinChar, placeholder: style.placeholder }); var singleOut = {}; for (var i = 0; i < lines.length; i++) { truncateSingleLine(singleOut, lines[i], options); lines[i] = singleOut.textLine; isTruncated = isTruncated || singleOut.isTruncated; } } var outerHeight = height; var contentWidth = 0; var fontMeasureInfo = ensureFontMeasureInfo(font); for (var i = 0; i < lines.length; i++) contentWidth = Math.max(measureWidth(fontMeasureInfo, lines[i]), contentWidth); if (width == null) width = contentWidth; var outerWidth = width; outerHeight += paddingV; outerWidth += paddingH; return { lines, height, outerWidth, outerHeight, lineHeight, calculatedLineHeight, contentWidth, contentHeight, width, isTruncated }; } var RichTextToken = function() { function RichTextToken() {} return RichTextToken; }(); var RichTextLine = function() { function RichTextLine(tokens) { this.tokens = []; if (tokens) this.tokens = tokens; } return RichTextLine; }(); var RichTextContentBlock = function() { function RichTextContentBlock() { this.width = 0; this.height = 0; this.contentWidth = 0; this.contentHeight = 0; this.outerWidth = 0; this.outerHeight = 0; this.lines = []; this.isTruncated = false; } return RichTextContentBlock; }(); function parseRichText(rawText, style, defaultOuterWidth, defaultOuterHeight, topTextAlign) { var contentBlock = new RichTextContentBlock(); var text = formatText(rawText); if (!text) return contentBlock; var stlPadding = style.padding; var stlPaddingH = stlPadding ? stlPadding[1] + stlPadding[3] : 0; var stlPaddingV = stlPadding ? stlPadding[0] + stlPadding[2] : 0; var topWidth = style.width; if (topWidth == null && defaultOuterWidth != null) topWidth = defaultOuterWidth - stlPaddingH; var topHeight = style.height; if (topHeight == null && defaultOuterHeight != null) topHeight = defaultOuterHeight - stlPaddingV; var overflow = style.overflow; var wrapInfo = (overflow === "break" || overflow === "breakAll") && topWidth != null ? { width: topWidth, accumWidth: 0, breakAll: overflow === "breakAll" } : null; var lastIndex = STYLE_REG.lastIndex = 0; var result; while ((result = STYLE_REG.exec(text)) != null) { var matchedIndex = result.index; if (matchedIndex > lastIndex) pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo); pushTokens(contentBlock, result[2], style, wrapInfo, result[1]); lastIndex = STYLE_REG.lastIndex; } if (lastIndex < text.length) pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo); var pendingList = []; var calculatedHeight = 0; var calculatedWidth = 0; var truncate = overflow === "truncate"; var truncateLine = style.lineOverflow === "truncate"; var tmpTruncateOut = {}; function finishLine(line, lineWidth, lineHeight) { line.width = lineWidth; line.lineHeight = lineHeight; calculatedHeight += lineHeight; calculatedWidth = Math.max(calculatedWidth, lineWidth); } outer: for (var i = 0; i < contentBlock.lines.length; i++) { var line = contentBlock.lines[i]; var lineHeight = 0; var lineWidth = 0; for (var j = 0; j < line.tokens.length; j++) { var token = line.tokens[j]; var tokenStyle = token.styleName && style.rich[token.styleName] || {}; var textPadding = token.textPadding = tokenStyle.padding; var paddingH = textPadding ? textPadding[1] + textPadding[3] : 0; var font = token.font = tokenStyle.font || style.font; token.contentHeight = getLineHeight(font); var tokenHeight = retrieve2(tokenStyle.height, token.contentHeight); token.innerHeight = tokenHeight; textPadding && (tokenHeight += textPadding[0] + textPadding[2]); token.height = tokenHeight; token.lineHeight = retrieve3(tokenStyle.lineHeight, style.lineHeight, tokenHeight); token.align = tokenStyle && tokenStyle.align || topTextAlign; token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || "middle"; if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) { var originalLength = contentBlock.lines.length; if (j > 0) { line.tokens = line.tokens.slice(0, j); finishLine(line, lineWidth, lineHeight); contentBlock.lines = contentBlock.lines.slice(0, i + 1); } else contentBlock.lines = contentBlock.lines.slice(0, i); contentBlock.isTruncated = contentBlock.isTruncated || contentBlock.lines.length < originalLength; break outer; } var styleTokenWidth = tokenStyle.width; var tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === "auto"; if (typeof styleTokenWidth === "string" && styleTokenWidth.charAt(styleTokenWidth.length - 1) === "%") { token.percentWidth = styleTokenWidth; pendingList.push(token); token.contentWidth = measureWidth(ensureFontMeasureInfo(font), token.text); } else { if (tokenWidthNotSpecified) { var textBackgroundColor = tokenStyle.backgroundColor; var bgImg = textBackgroundColor && textBackgroundColor.image; if (bgImg) { bgImg = findExistImage(bgImg); if (isImageReady(bgImg)) token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height); } } var remainTruncWidth = truncate && topWidth != null ? topWidth - lineWidth : null; if (remainTruncWidth != null && remainTruncWidth < token.width) { if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) { token.text = ""; token.width = token.contentWidth = 0; } else { truncateText2(tmpTruncateOut, token.text, remainTruncWidth - paddingH, font, style.ellipsis, { minChar: style.truncateMinChar }); token.text = tmpTruncateOut.text; contentBlock.isTruncated = contentBlock.isTruncated || tmpTruncateOut.isTruncated; token.width = token.contentWidth = measureWidth(ensureFontMeasureInfo(font), token.text); } } else token.contentWidth = measureWidth(ensureFontMeasureInfo(font), token.text); } token.width += paddingH; lineWidth += token.width; tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight)); } finishLine(line, lineWidth, lineHeight); } contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth); contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight); contentBlock.contentHeight = calculatedHeight; contentBlock.contentWidth = calculatedWidth; contentBlock.outerWidth += stlPaddingH; contentBlock.outerHeight += stlPaddingV; for (var i = 0; i < pendingList.length; i++) { var token = pendingList[i]; var percentWidth = token.percentWidth; token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width; } return contentBlock; } function pushTokens(block, str, style, wrapInfo, styleName) { var isEmptyStr = str === ""; var tokenStyle = styleName && style.rich[styleName] || {}; var lines = block.lines; var font = tokenStyle.font || style.font; var newLine = false; var strLines; var linesWidths; if (wrapInfo) { var tokenPadding = tokenStyle.padding; var tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0; if (tokenStyle.width != null && tokenStyle.width !== "auto") { var outerWidth_1 = parsePercent$1(tokenStyle.width, wrapInfo.width) + tokenPaddingH; if (lines.length > 0) { if (outerWidth_1 + wrapInfo.accumWidth > wrapInfo.width) { strLines = str.split("\n"); newLine = true; } } wrapInfo.accumWidth = outerWidth_1; } else { var res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth); wrapInfo.accumWidth = res.accumWidth + tokenPaddingH; linesWidths = res.linesWidths; strLines = res.lines; } } if (!strLines) strLines = str.split("\n"); var fontMeasureInfo = ensureFontMeasureInfo(font); for (var i = 0; i < strLines.length; i++) { var text = strLines[i]; var token = new RichTextToken(); token.styleName = styleName; token.text = text; token.isLineHolder = !text && !isEmptyStr; if (typeof tokenStyle.width === "number") token.width = tokenStyle.width; else token.width = linesWidths ? linesWidths[i] : measureWidth(fontMeasureInfo, text); if (!i && !newLine) { var tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens; var tokensLen = tokens.length; tokensLen === 1 && tokens[0].isLineHolder ? tokens[0] = token : (text || !tokensLen || isEmptyStr) && tokens.push(token); } else lines.push(new RichTextLine([token])); } } function isAlphabeticLetter(ch) { var code = ch.charCodeAt(0); return code >= 32 && code <= 591 || code >= 880 && code <= 4351 || code >= 4608 && code <= 5119 || code >= 7680 && code <= 8303; } var breakCharMap = reduce(",&?/;] ".split(""), function(obj, ch) { obj[ch] = true; return obj; }, {}); function isWordBreakChar(ch) { if (isAlphabeticLetter(ch)) { if (breakCharMap[ch]) return true; return false; } return true; } function wrapText(text, font, lineWidth, isBreakAll, lastAccumWidth) { var lines = []; var linesWidths = []; var line = ""; var currentWord = ""; var currentWordWidth = 0; var accumWidth = 0; var fontMeasureInfo = ensureFontMeasureInfo(font); for (var i = 0; i < text.length; i++) { var ch = text.charAt(i); if (ch === "\n") { if (currentWord) { line += currentWord; accumWidth += currentWordWidth; } lines.push(line); linesWidths.push(accumWidth); line = ""; currentWord = ""; currentWordWidth = 0; accumWidth = 0; continue; } var chWidth = measureCharWidth(fontMeasureInfo, ch.charCodeAt(0)); var inWord = isBreakAll ? false : !isWordBreakChar(ch); if (!lines.length ? lastAccumWidth + accumWidth + chWidth > lineWidth : accumWidth + chWidth > lineWidth) { if (!accumWidth) { if (inWord) { lines.push(currentWord); linesWidths.push(currentWordWidth); currentWord = ch; currentWordWidth = chWidth; } else { lines.push(ch); linesWidths.push(chWidth); } } else if (line || currentWord) { if (inWord) { if (!line) { line = currentWord; currentWord = ""; currentWordWidth = 0; accumWidth = currentWordWidth; } lines.push(line); linesWidths.push(accumWidth - currentWordWidth); currentWord += ch; currentWordWidth += chWidth; line = ""; accumWidth = currentWordWidth; } else { if (currentWord) { line += currentWord; currentWord = ""; currentWordWidth = 0; } lines.push(line); linesWidths.push(accumWidth); line = ch; accumWidth = chWidth; } } continue; } accumWidth += chWidth; if (inWord) { currentWord += ch; currentWordWidth += chWidth; } else { if (currentWord) { line += currentWord; currentWord = ""; currentWordWidth = 0; } line += ch; } } if (currentWord) line += currentWord; if (line) { lines.push(line); linesWidths.push(accumWidth); } if (lines.length === 1) accumWidth += lastAccumWidth; return { accumWidth, lines, linesWidths }; } function calcInnerTextOverflowArea(out, overflowRect, baseX, baseY, textAlign, textVerticalAlign) { out.baseX = baseX; out.baseY = baseY; out.outerWidth = out.outerHeight = null; if (!overflowRect) return; var textWidth = overflowRect.width * 2; var textHeight = overflowRect.height * 2; BoundingRect.set(tmpCITCTextRect, adjustTextX(baseX, textWidth, textAlign), adjustTextY(baseY, textHeight, textVerticalAlign), textWidth, textHeight); BoundingRect.intersect(overflowRect, tmpCITCTextRect, null, tmpCITCIntersectRectOpt); var outIntersectRect = tmpCITCIntersectRectOpt.outIntersectRect; out.outerWidth = outIntersectRect.width; out.outerHeight = outIntersectRect.height; out.baseX = adjustTextX(outIntersectRect.x, outIntersectRect.width, textAlign, true); out.baseY = adjustTextY(outIntersectRect.y, outIntersectRect.height, textVerticalAlign, true); } var tmpCITCTextRect = new BoundingRect(0, 0, 0, 0); var tmpCITCIntersectRectOpt = { outIntersectRect: {}, clamp: true }; function formatText(text) { return text != null ? text += "" : text = ""; } function tSpanCreateBoundingRect(style) { var text = formatText(style.text); var font = style.font; return tSpanCreateBoundingRect2(style, measureWidth(ensureFontMeasureInfo(font), text), getLineHeight(font), null); } function tSpanCreateBoundingRect2(style, contentWidth, contentHeight, forceLineWidth) { var rect = new BoundingRect(adjustTextX(style.x || 0, contentWidth, style.textAlign), adjustTextY(style.y || 0, contentHeight, style.textBaseline), contentWidth, contentHeight); var lineWidth = forceLineWidth != null ? forceLineWidth : tSpanHasStroke(style) ? style.lineWidth : 0; if (lineWidth > 0) { rect.x -= lineWidth / 2; rect.y -= lineWidth / 2; rect.width += lineWidth; rect.height += lineWidth; } return rect; } function tSpanHasStroke(style) { var stroke = style.stroke; return stroke != null && stroke !== "none" && style.lineWidth > 0; } //#endregion //#region node_modules/zrender/lib/graphic/Displayable.js var STYLE_MAGIC_KEY = "__zr_style_" + Math.round(Math.random() * 10); var DEFAULT_COMMON_STYLE = { shadowBlur: 0, shadowOffsetX: 0, shadowOffsetY: 0, shadowColor: "#000", opacity: 1, blend: "source-over" }; var DEFAULT_COMMON_ANIMATION_PROPS = { style: { shadowBlur: true, shadowOffsetX: true, shadowOffsetY: true, shadowColor: true, opacity: true } }; DEFAULT_COMMON_STYLE[STYLE_MAGIC_KEY] = true; var PRIMARY_STATES_KEYS = [ "z", "z2", "invisible" ]; var PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ["invisible"]; var Displayable = function(_super) { __extends(Displayable, _super); function Displayable(props) { return _super.call(this, props) || this; } Displayable.prototype._init = function(props) { var keysArr = keys(props); for (var i = 0; i < keysArr.length; i++) { var key = keysArr[i]; if (key === "style") this.useStyle(props[key]); else _super.prototype.attrKV.call(this, key, props[key]); } if (!this.style) this.useStyle({}); }; Displayable.prototype.beforeBrush = function(param) {}; Displayable.prototype.afterBrush = function() {}; Displayable.prototype.innerBeforeBrush = function() {}; Displayable.prototype.innerAfterBrush = function() {}; Displayable.prototype.shouldBePainted = function(viewWidth, viewHeight, considerClipPath, considerAncestors) { var m = this.transform; if (this.ignore || this.invisible || this.style.opacity === 0 || this.culling && isDisplayableCulled(this, viewWidth, viewHeight) || m && !m[0] && !m[3]) return false; if (considerClipPath && this.__clipPaths && this.__clipPaths.length) { for (var i = 0; i < this.__clipPaths.length; ++i) if (this.__clipPaths[i].isZeroArea()) return false; } if (considerAncestors && this.parent) { var parent_1 = this.parent; while (parent_1) { if (parent_1.ignore) return false; parent_1 = parent_1.parent; } } return true; }; Displayable.prototype.contain = function(x, y) { return this.rectContain(x, y); }; Displayable.prototype.traverse = function(cb, context) { cb.call(context, this); }; Displayable.prototype.rectContain = function(x, y) { var coord = this.transformCoordToLocal(x, y); return this.getBoundingRect().contain(coord[0], coord[1]); }; Displayable.prototype.getPaintRect = function() { var rect = this._paintRect; if (!this._paintRect || this.__dirty) { var transform = this.transform; var elRect = this.getBoundingRect(); var style = this.style; var shadowSize = style.shadowBlur || 0; var shadowOffsetX = style.shadowOffsetX || 0; var shadowOffsetY = style.shadowOffsetY || 0; rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0)); if (transform) BoundingRect.applyTransform(rect, elRect, transform); else rect.copy(elRect); if (shadowSize || shadowOffsetX || shadowOffsetY) { rect.width += shadowSize * 2 + Math.abs(shadowOffsetX); rect.height += shadowSize * 2 + Math.abs(shadowOffsetY); rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize); rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize); } var tolerance = this.dirtyRectTolerance; if (!rect.isZero()) { rect.x = Math.floor(rect.x - tolerance); rect.y = Math.floor(rect.y - tolerance); rect.width = Math.ceil(rect.width + 1 + tolerance * 2); rect.height = Math.ceil(rect.height + 1 + tolerance * 2); } } return rect; }; Displayable.prototype.setPrevPaintRect = function(paintRect) { if (paintRect) { this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0); this._prevPaintRect.copy(paintRect); } else this._prevPaintRect = null; }; Displayable.prototype.getPrevPaintRect = function() { return this._prevPaintRect; }; Displayable.prototype.animateStyle = function(loop) { return this.animate("style", loop); }; Displayable.prototype.updateDuringAnimation = function(targetKey) { if (targetKey === "style") this.dirtyStyle(); else this.markRedraw(); }; Displayable.prototype.attrKV = function(key, value) { if (key !== "style") _super.prototype.attrKV.call(this, key, value); else if (!this.style) this.useStyle(value); else this.setStyle(value); }; Displayable.prototype.setStyle = function(keyOrObj, value) { if (typeof keyOrObj === "string") this.style[keyOrObj] = value; else extend(this.style, keyOrObj); this.dirtyStyle(); return this; }; Displayable.prototype.dirtyStyle = function(notRedraw) { if (!notRedraw) this.markRedraw(); this.__dirty |= 2; if (this._rect) this._rect = null; }; Displayable.prototype.dirty = function() { this.dirtyStyle(); }; Displayable.prototype.styleChanged = function() { return !!(this.__dirty & 2); }; Displayable.prototype.styleUpdated = function() { this.__dirty &= -3; }; Displayable.prototype.createStyle = function(obj) { return createObject(DEFAULT_COMMON_STYLE, obj); }; Displayable.prototype.useStyle = function(obj) { if (!obj[STYLE_MAGIC_KEY]) obj = this.createStyle(obj); this.style = obj; this.dirtyStyle(); }; Displayable.prototype._useHoverStyle = function(obj) { this.__hoverStyle = obj; }; Displayable.prototype.isStyleObject = function(obj) { return obj[STYLE_MAGIC_KEY]; }; Displayable.prototype._innerSaveToNormal = function(toState) { _super.prototype._innerSaveToNormal.call(this, toState); var normalState = this._normalState; if (toState.style && !normalState.style) normalState.style = this._mergeStyle(this.createStyle(), this.style); this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS); }; Displayable.prototype._applyStateObj = function(stateName, state, normalState, keepCurrentStates, transition, animationCfg) { _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg); var needsRestoreToNormal = !(state && keepCurrentStates); var inHoverOnlyStyleChange = this.__inHover === 1; var targetStyle; if (state && state.style) { if (transition) { if (keepCurrentStates) targetStyle = state.style; else { targetStyle = this._mergeStyle(this.createStyle(), normalState.style); this._mergeStyle(targetStyle, state.style); } } else { targetStyle = this._mergeStyle(this.createStyle(), keepCurrentStates ? this.style : normalState.style); this._mergeStyle(targetStyle, state.style); } } else if (needsRestoreToNormal) targetStyle = normalState.style; if (targetStyle) { if (transition) { var sourceStyle = this.style; this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle); if (needsRestoreToNormal) { var changedKeys = keys(sourceStyle); for (var i = 0; i < changedKeys.length; i++) { var key = changedKeys[i]; if (key in targetStyle) { targetStyle[key] = targetStyle[key]; this.style[key] = sourceStyle[key]; } } } var targetKeys = keys(targetStyle); for (var i = 0; i < targetKeys.length; i++) { var key = targetKeys[i]; this.style[key] = this.style[key]; } this._transitionState(stateName, { style: targetStyle }, animationCfg, this.getAnimationStyleProps()); } else if (inHoverOnlyStyleChange) this._useHoverStyle(targetStyle); else this.useStyle(targetStyle); } if (!inHoverOnlyStyleChange) { var statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS; for (var i = 0; i < statesKeys.length; i++) { var key = statesKeys[i]; if (state && state[key] != null) this[key] = state[key]; else if (needsRestoreToNormal) { if (normalState[key] != null) this[key] = normalState[key]; } } } }; Displayable.prototype._mergeStates = function(states) { var mergedState = _super.prototype._mergeStates.call(this, states); var mergedStyle; for (var i = 0; i < states.length; i++) { var state = states[i]; if (state.style) { mergedStyle = mergedStyle || {}; this._mergeStyle(mergedStyle, state.style); } } if (mergedStyle) mergedState.style = mergedStyle; return mergedState; }; Displayable.prototype._mergeStyle = function(targetStyle, sourceStyle) { extend(targetStyle, sourceStyle); return targetStyle; }; Displayable.prototype.getAnimationStyleProps = function() { return DEFAULT_COMMON_ANIMATION_PROPS; }; Displayable.initDefaultProps = (function() { var dispProto = Displayable.prototype; dispProto.type = "displayable"; dispProto.invisible = false; dispProto.z = 0; dispProto.z2 = 0; dispProto.zlevel = 0; dispProto.culling = false; dispProto.cursor = "pointer"; dispProto.rectHover = false; dispProto.incremental = 0; dispProto._rect = null; dispProto.dirtyRectTolerance = 0; dispProto.__dirty = 3; })(); return Displayable; }(Element); var tmpRect = new BoundingRect(0, 0, 0, 0); var viewRect = new BoundingRect(0, 0, 0, 0); function isDisplayableCulled(el, width, height) { tmpRect.copy(el.getBoundingRect()); if (el.transform) tmpRect.applyTransform(el.transform); viewRect.width = width; viewRect.height = height; return !tmpRect.intersect(viewRect); } //#endregion //#region node_modules/zrender/lib/core/bbox.js var mathMin$8 = Math.min; var mathMax$8 = Math.max; var mathSin$4 = Math.sin; var mathCos$4 = Math.cos; var PI2$8 = Math.PI * 2; var start = create$2(); var end = create$2(); var extremity = create$2(); function fromPoints(points, min, max) { if (points.length === 0) return; var p = points[0]; var left = p[0]; var right = p[0]; var top = p[1]; var bottom = p[1]; for (var i = 1; i < points.length; i++) { p = points[i]; left = mathMin$8(left, p[0]); right = mathMax$8(right, p[0]); top = mathMin$8(top, p[1]); bottom = mathMax$8(bottom, p[1]); } min[0] = left; min[1] = top; max[0] = right; max[1] = bottom; } function fromLine(x0, y0, x1, y1, min, max) { min[0] = mathMin$8(x0, x1); min[1] = mathMin$8(y0, y1); max[0] = mathMax$8(x0, x1); max[1] = mathMax$8(y0, y1); } var xDim = []; var yDim = []; function fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) { var cubicExtrema$1 = cubicExtrema; var cubicAt$1 = cubicAt; var n = cubicExtrema$1(x0, x1, x2, x3, xDim); min[0] = Infinity; min[1] = Infinity; max[0] = -Infinity; max[1] = -Infinity; for (var i = 0; i < n; i++) { var x = cubicAt$1(x0, x1, x2, x3, xDim[i]); min[0] = mathMin$8(x, min[0]); max[0] = mathMax$8(x, max[0]); } n = cubicExtrema$1(y0, y1, y2, y3, yDim); for (var i = 0; i < n; i++) { var y = cubicAt$1(y0, y1, y2, y3, yDim[i]); min[1] = mathMin$8(y, min[1]); max[1] = mathMax$8(y, max[1]); } min[0] = mathMin$8(x0, min[0]); max[0] = mathMax$8(x0, max[0]); min[0] = mathMin$8(x3, min[0]); max[0] = mathMax$8(x3, max[0]); min[1] = mathMin$8(y0, min[1]); max[1] = mathMax$8(y0, max[1]); min[1] = mathMin$8(y3, min[1]); max[1] = mathMax$8(y3, max[1]); } function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) { var quadraticExtremum$1 = quadraticExtremum; var quadraticAt = quadraticAt$1; var tx = mathMax$8(mathMin$8(quadraticExtremum$1(x0, x1, x2), 1), 0); var ty = mathMax$8(mathMin$8(quadraticExtremum$1(y0, y1, y2), 1), 0); var x = quadraticAt(x0, x1, x2, tx); var y = quadraticAt(y0, y1, y2, ty); min[0] = mathMin$8(x0, x2, x); min[1] = mathMin$8(y0, y2, y); max[0] = mathMax$8(x0, x2, x); max[1] = mathMax$8(y0, y2, y); } function fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max) { var vec2Min = min$1; var vec2Max = max$1; var diff = Math.abs(startAngle - endAngle); if (diff % PI2$8 < 1e-4 && diff > 1e-4) { min[0] = x - rx; min[1] = y - ry; max[0] = x + rx; max[1] = y + ry; return; } start[0] = mathCos$4(startAngle) * rx + x; start[1] = mathSin$4(startAngle) * ry + y; end[0] = mathCos$4(endAngle) * rx + x; end[1] = mathSin$4(endAngle) * ry + y; vec2Min(min, start, end); vec2Max(max, start, end); startAngle = startAngle % PI2$8; if (startAngle < 0) startAngle = startAngle + PI2$8; endAngle = endAngle % PI2$8; if (endAngle < 0) endAngle = endAngle + PI2$8; if (startAngle > endAngle && !anticlockwise) endAngle += PI2$8; else if (startAngle < endAngle && anticlockwise) startAngle += PI2$8; if (anticlockwise) { var tmp = endAngle; endAngle = startAngle; startAngle = tmp; } for (var angle = 0; angle < endAngle; angle += Math.PI / 2) if (angle > startAngle) { extremity[0] = mathCos$4(angle) * rx + x; extremity[1] = mathSin$4(angle) * ry + y; vec2Min(min, extremity, min); vec2Max(max, extremity, max); } } //#endregion //#region node_modules/zrender/lib/core/PathProxy.js var CMD$4 = { M: 1, L: 2, C: 3, Q: 4, A: 5, Z: 6, R: 7 }; var tmpOutX = []; var tmpOutY = []; var min = []; var max = []; var min2 = []; var max2 = []; var mathMin$7 = Math.min; var mathMax$7 = Math.max; var mathCos$3 = Math.cos; var mathSin$3 = Math.sin; var mathAbs$3 = Math.abs; var PI$7 = Math.PI; var PI2$7 = PI$7 * 2; var hasTypedArray = typeof Float32Array !== "undefined"; var tmpAngles = []; function modPI2(radian) { return Math.round(radian / PI$7 * 1e8) / 1e8 % 2 * PI$7; } function normalizeArcAngles(angles, anticlockwise) { var newStartAngle = modPI2(angles[0]); if (newStartAngle < 0) newStartAngle += PI2$7; var delta = newStartAngle - angles[0]; var newEndAngle = angles[1]; newEndAngle += delta; if (!anticlockwise && newEndAngle - newStartAngle >= PI2$7) newEndAngle = newStartAngle + PI2$7; else if (anticlockwise && newStartAngle - newEndAngle >= PI2$7) newEndAngle = newStartAngle - PI2$7; else if (!anticlockwise && newStartAngle > newEndAngle) newEndAngle = newStartAngle + (PI2$7 - modPI2(newStartAngle - newEndAngle)); else if (anticlockwise && newStartAngle < newEndAngle) newEndAngle = newStartAngle - (PI2$7 - modPI2(newEndAngle - newStartAngle)); angles[0] = newStartAngle; angles[1] = newEndAngle; } var PathProxy = function() { function PathProxy(notSaveData) { this.dpr = 1; this._xi = 0; this._yi = 0; this._x0 = 0; this._y0 = 0; this._len = 0; if (notSaveData) this._saveData = false; if (this._saveData) this.data = []; } PathProxy.prototype.increaseVersion = function() { this._version++; }; PathProxy.prototype.getVersion = function() { return this._version; }; PathProxy.prototype.setScale = function(sx, sy, segmentIgnoreThreshold) { segmentIgnoreThreshold = segmentIgnoreThreshold || 0; if (segmentIgnoreThreshold > 0) { this._ux = mathAbs$3(segmentIgnoreThreshold / devicePixelRatio / sx) || 0; this._uy = mathAbs$3(segmentIgnoreThreshold / devicePixelRatio / sy) || 0; } }; PathProxy.prototype.setDPR = function(dpr) { this.dpr = dpr; }; PathProxy.prototype.setContext = function(ctx) { this._ctx = ctx; }; PathProxy.prototype.getContext = function() { return this._ctx; }; PathProxy.prototype.beginPath = function() { this._ctx && this._ctx.beginPath(); this.reset(); return this; }; PathProxy.prototype.reset = function() { if (this._saveData) this._len = 0; if (this._pathSegLen) { this._pathSegLen = null; this._pathLen = 0; } this._version++; }; PathProxy.prototype.moveTo = function(x, y) { this._drawPendingPt(); this.addData(CMD$4.M, x, y); this._ctx && this._ctx.moveTo(x, y); this._x0 = x; this._y0 = y; this._xi = x; this._yi = y; return this; }; PathProxy.prototype.lineTo = function(x, y) { var dx = mathAbs$3(x - this._xi); var dy = mathAbs$3(y - this._yi); var exceedUnit = dx > this._ux || dy > this._uy; this.addData(CMD$4.L, x, y); if (this._ctx && exceedUnit) this._ctx.lineTo(x, y); if (exceedUnit) { this._xi = x; this._yi = y; this._pendingPtDist = 0; } else { var d2 = dx * dx + dy * dy; if (d2 > this._pendingPtDist) { this._pendingPtX = x; this._pendingPtY = y; this._pendingPtDist = d2; } } return this; }; PathProxy.prototype.bezierCurveTo = function(x1, y1, x2, y2, x3, y3) { this._drawPendingPt(); this.addData(CMD$4.C, x1, y1, x2, y2, x3, y3); if (this._ctx) this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); this._xi = x3; this._yi = y3; return this; }; PathProxy.prototype.quadraticCurveTo = function(x1, y1, x2, y2) { this._drawPendingPt(); this.addData(CMD$4.Q, x1, y1, x2, y2); if (this._ctx) this._ctx.quadraticCurveTo(x1, y1, x2, y2); this._xi = x2; this._yi = y2; return this; }; PathProxy.prototype.arc = function(cx, cy, r, startAngle, endAngle, anticlockwise) { this._drawPendingPt(); tmpAngles[0] = startAngle; tmpAngles[1] = endAngle; normalizeArcAngles(tmpAngles, anticlockwise); startAngle = tmpAngles[0]; endAngle = tmpAngles[1]; var delta = endAngle - startAngle; this.addData(CMD$4.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1); this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); this._xi = mathCos$3(endAngle) * r + cx; this._yi = mathSin$3(endAngle) * r + cy; return this; }; PathProxy.prototype.arcTo = function(x1, y1, x2, y2, radius) { this._drawPendingPt(); if (this._ctx) this._ctx.arcTo(x1, y1, x2, y2, radius); return this; }; PathProxy.prototype.rect = function(x, y, w, h) { this._drawPendingPt(); this._ctx && this._ctx.rect(x, y, w, h); this.addData(CMD$4.R, x, y, w, h); return this; }; PathProxy.prototype.closePath = function() { this._drawPendingPt(); this.addData(CMD$4.Z); var ctx = this._ctx; var x0 = this._x0; var y0 = this._y0; if (ctx) ctx.closePath(); this._xi = x0; this._yi = y0; return this; }; PathProxy.prototype.fill = function(ctx) { ctx && ctx.fill(); this.toStatic(); }; PathProxy.prototype.stroke = function(ctx) { ctx && ctx.stroke(); this.toStatic(); }; PathProxy.prototype.len = function() { return this._len; }; PathProxy.prototype.setData = function(data) { if (!this._saveData) return; var len = data.length; if (!(this.data && this.data.length === len) && hasTypedArray) this.data = new Float32Array(len); for (var i = 0; i < len; i++) this.data[i] = data[i]; this._len = len; }; PathProxy.prototype.appendPath = function(path) { if (!this._saveData) return; if (!(path instanceof Array)) path = [path]; var len = path.length; var appendSize = 0; var offset = this._len; for (var i = 0; i < len; i++) appendSize += path[i].len(); var oldData = this.data; if (hasTypedArray && (oldData instanceof Float32Array || !oldData)) { this.data = new Float32Array(offset + appendSize); if (offset > 0 && oldData) for (var k = 0; k < offset; k++) this.data[k] = oldData[k]; } for (var i = 0; i < len; i++) { var appendPathData = path[i].data; for (var k = 0; k < appendPathData.length; k++) this.data[offset++] = appendPathData[k]; } this._len = offset; }; PathProxy.prototype.addData = function(cmd, a, b, c, d, e, f, g, h) { if (!this._saveData) return; var data = this.data; if (this._len + arguments.length > data.length) { this._expandData(); data = this.data; } for (var i = 0; i < arguments.length; i++) data[this._len++] = arguments[i]; }; PathProxy.prototype._drawPendingPt = function() { if (this._pendingPtDist > 0) { this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY); this._pendingPtDist = 0; } }; PathProxy.prototype._expandData = function() { if (!(this.data instanceof Array)) { var newData = []; for (var i = 0; i < this._len; i++) newData[i] = this.data[i]; this.data = newData; } }; PathProxy.prototype.toStatic = function() { if (!this._saveData) return; this._drawPendingPt(); var data = this.data; if (data instanceof Array) { data.length = this._len; if (hasTypedArray && this._len > 11) this.data = new Float32Array(data); } }; PathProxy.prototype.getBoundingRect = function() { min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE; max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE; var data = this.data; var xi = 0; var yi = 0; var x0 = 0; var y0 = 0; var i; for (i = 0; i < this._len;) { var cmd = data[i++]; var isFirst = i === 1; if (isFirst) { xi = data[i]; yi = data[i + 1]; x0 = xi; y0 = yi; } switch (cmd) { case CMD$4.M: xi = x0 = data[i++]; yi = y0 = data[i++]; min2[0] = x0; min2[1] = y0; max2[0] = x0; max2[1] = y0; break; case CMD$4.L: fromLine(xi, yi, data[i], data[i + 1], min2, max2); xi = data[i++]; yi = data[i++]; break; case CMD$4.C: fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2); xi = data[i++]; yi = data[i++]; break; case CMD$4.Q: fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2); xi = data[i++]; yi = data[i++]; break; case CMD$4.A: var cx = data[i++]; var cy = data[i++]; var rx = data[i++]; var ry = data[i++]; var startAngle = data[i++]; var endAngle = data[i++] + startAngle; i += 1; var anticlockwise = !data[i++]; if (isFirst) { x0 = mathCos$3(startAngle) * rx + cx; y0 = mathSin$3(startAngle) * ry + cy; } fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2); xi = mathCos$3(endAngle) * rx + cx; yi = mathSin$3(endAngle) * ry + cy; break; case CMD$4.R: x0 = xi = data[i++]; y0 = yi = data[i++]; var width = data[i++]; var height = data[i++]; fromLine(x0, y0, x0 + width, y0 + height, min2, max2); break; case CMD$4.Z: xi = x0; yi = y0; } min$1(min, min, min2); max$1(max, max, max2); } if (i === 0) min[0] = min[1] = max[0] = max[1] = 0; return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); }; PathProxy.prototype._calculateLength = function() { var data = this.data; var len = this._len; var ux = this._ux; var uy = this._uy; var xi = 0; var yi = 0; var x0 = 0; var y0 = 0; if (!this._pathSegLen) this._pathSegLen = []; var pathSegLen = this._pathSegLen; var pathTotalLen = 0; var segCount = 0; for (var i = 0; i < len;) { var cmd = data[i++]; var isFirst = i === 1; if (isFirst) { xi = data[i]; yi = data[i + 1]; x0 = xi; y0 = yi; } var l = -1; switch (cmd) { case CMD$4.M: xi = x0 = data[i++]; yi = y0 = data[i++]; break; case CMD$4.L: var x2 = data[i++]; var y2 = data[i++]; var dx = x2 - xi; var dy = y2 - yi; if (mathAbs$3(dx) > ux || mathAbs$3(dy) > uy || i === len - 1) { l = Math.sqrt(dx * dx + dy * dy); xi = x2; yi = y2; } break; case CMD$4.C: var x1 = data[i++]; var y1 = data[i++]; var x2 = data[i++]; var y2 = data[i++]; var x3 = data[i++]; var y3 = data[i++]; l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10); xi = x3; yi = y3; break; case CMD$4.Q: var x1 = data[i++]; var y1 = data[i++]; var x2 = data[i++]; var y2 = data[i++]; l = quadraticLength(xi, yi, x1, y1, x2, y2, 10); xi = x2; yi = y2; break; case CMD$4.A: var cx = data[i++]; var cy = data[i++]; var rx = data[i++]; var ry = data[i++]; var startAngle = data[i++]; var delta = data[i++]; var endAngle = delta + startAngle; i += 1; if (isFirst) { x0 = mathCos$3(startAngle) * rx + cx; y0 = mathSin$3(startAngle) * ry + cy; } l = mathMax$7(rx, ry) * mathMin$7(PI2$7, Math.abs(delta)); xi = mathCos$3(endAngle) * rx + cx; yi = mathSin$3(endAngle) * ry + cy; break; case CMD$4.R: x0 = xi = data[i++]; y0 = yi = data[i++]; var width = data[i++]; var height = data[i++]; l = width * 2 + height * 2; break; case CMD$4.Z: var dx = x0 - xi; var dy = y0 - yi; l = Math.sqrt(dx * dx + dy * dy); xi = x0; yi = y0; } if (l >= 0) { pathSegLen[segCount++] = l; pathTotalLen += l; } } this._pathLen = pathTotalLen; return pathTotalLen; }; PathProxy.prototype.rebuildPath = function(ctx, percent) { var d = this.data; var ux = this._ux; var uy = this._uy; var len = this._len; var x0; var y0; var xi; var yi; var x; var y; var drawPart = percent < 1; var pathSegLen; var pathTotalLen; var accumLength = 0; var segCount = 0; var displayedLength; var pendingPtDist = 0; var pendingPtX; var pendingPtY; if (drawPart) { if (!this._pathSegLen) this._calculateLength(); pathSegLen = this._pathSegLen; pathTotalLen = this._pathLen; displayedLength = percent * pathTotalLen; if (!displayedLength) return; } lo: for (var i = 0; i < len;) { var cmd = d[i++]; var isFirst = i === 1; if (isFirst) { xi = d[i]; yi = d[i + 1]; x0 = xi; y0 = yi; } if (cmd !== CMD$4.L && pendingPtDist > 0) { ctx.lineTo(pendingPtX, pendingPtY); pendingPtDist = 0; } switch (cmd) { case CMD$4.M: x0 = xi = d[i++]; y0 = yi = d[i++]; ctx.moveTo(xi, yi); break; case CMD$4.L: x = d[i++]; y = d[i++]; var dx = mathAbs$3(x - xi); var dy = mathAbs$3(y - yi); if (dx > ux || dy > uy) { if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { var t = (displayedLength - accumLength) / l; ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t); break lo; } accumLength += l; } ctx.lineTo(x, y); xi = x; yi = y; pendingPtDist = 0; } else { var d2 = dx * dx + dy * dy; if (d2 > pendingPtDist) { pendingPtX = x; pendingPtY = y; pendingPtDist = d2; } } break; case CMD$4.C: var x1 = d[i++]; var y1 = d[i++]; var x2 = d[i++]; var y2 = d[i++]; var x3 = d[i++]; var y3 = d[i++]; if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { var t = (displayedLength - accumLength) / l; cubicSubdivide(xi, x1, x2, x3, t, tmpOutX); cubicSubdivide(yi, y1, y2, y3, t, tmpOutY); ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]); break lo; } accumLength += l; } ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); xi = x3; yi = y3; break; case CMD$4.Q: var x1 = d[i++]; var y1 = d[i++]; var x2 = d[i++]; var y2 = d[i++]; if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { var t = (displayedLength - accumLength) / l; quadraticSubdivide(xi, x1, x2, t, tmpOutX); quadraticSubdivide(yi, y1, y2, t, tmpOutY); ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]); break lo; } accumLength += l; } ctx.quadraticCurveTo(x1, y1, x2, y2); xi = x2; yi = y2; break; case CMD$4.A: var cx = d[i++]; var cy = d[i++]; var rx = d[i++]; var ry = d[i++]; var startAngle = d[i++]; var delta = d[i++]; var psi = d[i++]; var anticlockwise = !d[i++]; var r = rx > ry ? rx : ry; var isEllipse = mathAbs$3(rx - ry) > .001; var endAngle = startAngle + delta; var breakBuild = false; if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { endAngle = startAngle + delta * (displayedLength - accumLength) / l; breakBuild = true; } accumLength += l; } if (isEllipse && ctx.ellipse) ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise); else ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); if (breakBuild) break lo; if (isFirst) { x0 = mathCos$3(startAngle) * rx + cx; y0 = mathSin$3(startAngle) * ry + cy; } xi = mathCos$3(endAngle) * rx + cx; yi = mathSin$3(endAngle) * ry + cy; break; case CMD$4.R: x0 = xi = d[i]; y0 = yi = d[i + 1]; x = d[i++]; y = d[i++]; var width = d[i++]; var height = d[i++]; if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { var d_1 = displayedLength - accumLength; ctx.moveTo(x, y); ctx.lineTo(x + mathMin$7(d_1, width), y); d_1 -= width; if (d_1 > 0) ctx.lineTo(x + width, y + mathMin$7(d_1, height)); d_1 -= height; if (d_1 > 0) ctx.lineTo(x + mathMax$7(width - d_1, 0), y + height); d_1 -= width; if (d_1 > 0) ctx.lineTo(x, y + mathMax$7(height - d_1, 0)); break lo; } accumLength += l; } ctx.rect(x, y, width, height); break; case CMD$4.Z: if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { var t = (displayedLength - accumLength) / l; ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t); break lo; } accumLength += l; } ctx.closePath(); xi = x0; yi = y0; } } }; PathProxy.prototype.clone = function() { var newProxy = new PathProxy(); var data = this.data; newProxy.data = data.slice ? data.slice() : Array.prototype.slice.call(data); newProxy._len = this._len; return newProxy; }; PathProxy.prototype.canSave = function() { return !!this._saveData; }; PathProxy.CMD = CMD$4; PathProxy.initDefaultProps = (function() { var proto = PathProxy.prototype; proto._saveData = true; proto._ux = 0; proto._uy = 0; proto._pendingPtDist = 0; proto._version = 0; })(); return PathProxy; }(); //#endregion //#region node_modules/zrender/lib/contain/line.js function containStroke$4(x0, y0, x1, y1, lineWidth, x, y) { if (lineWidth === 0) return false; var _l = lineWidth; var _a = 0; var _b = x0; if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) return false; if (x0 !== x1) { _a = (y0 - y1) / (x0 - x1); _b = (x0 * y1 - x1 * y0) / (x0 - x1); } else return Math.abs(x - x0) <= _l / 2; var tmp = _a * x - y + _b; return tmp * tmp / (_a * _a + 1) <= _l / 2 * _l / 2; } //#endregion //#region node_modules/zrender/lib/contain/cubic.js function containStroke$3(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) { if (lineWidth === 0) return false; var _l = lineWidth; if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) return false; return cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null) <= _l / 2; } //#endregion //#region node_modules/zrender/lib/contain/quadratic.js function containStroke$2(x0, y0, x1, y1, x2, y2, lineWidth, x, y) { if (lineWidth === 0) return false; var _l = lineWidth; if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) return false; return quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null) <= _l / 2; } //#endregion //#region node_modules/zrender/lib/contain/util.js var PI2$6 = Math.PI * 2; function normalizeRadian(angle) { angle %= PI2$6; if (angle < 0) angle += PI2$6; return angle; } //#endregion //#region node_modules/zrender/lib/contain/arc.js var PI2$5 = Math.PI * 2; function containStroke$1(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) { if (lineWidth === 0) return false; var _l = lineWidth; x -= cx; y -= cy; var d = Math.sqrt(x * x + y * y); if (d - _l > r || d + _l < r) return false; if (Math.abs(startAngle - endAngle) % PI2$5 < 1e-4) return true; if (anticlockwise) { var tmp = startAngle; startAngle = normalizeRadian(endAngle); endAngle = normalizeRadian(tmp); } else { startAngle = normalizeRadian(startAngle); endAngle = normalizeRadian(endAngle); } if (startAngle > endAngle) endAngle += PI2$5; var angle = Math.atan2(y, x); if (angle < 0) angle += PI2$5; return angle >= startAngle && angle <= endAngle || angle + PI2$5 >= startAngle && angle + PI2$5 <= endAngle; } //#endregion //#region node_modules/zrender/lib/contain/windingLine.js function windingLine(x0, y0, x1, y1, x, y) { if (y > y0 && y > y1 || y < y0 && y < y1) return 0; if (y1 === y0) return 0; var t = (y - y0) / (y1 - y0); var dir = y1 < y0 ? 1 : -1; if (t === 1 || t === 0) dir = y1 < y0 ? .5 : -.5; var x_ = t * (x1 - x0) + x0; return x_ === x ? Infinity : x_ > x ? dir : 0; } //#endregion //#region node_modules/zrender/lib/contain/path.js var CMD$3 = PathProxy.CMD; var PI2$4 = Math.PI * 2; var EPSILON$1 = 1e-4; function isAroundEqual$1(a, b) { return Math.abs(a - b) < EPSILON$1; } var roots = [ -1, -1, -1 ]; var extrema = [-1, -1]; function swapExtrema() { var tmp = extrema[0]; extrema[0] = extrema[1]; extrema[1] = tmp; } function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) { if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) return 0; var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots); if (nRoots === 0) return 0; else { var w = 0; var nExtrema = -1; var y0_ = void 0; var y1_ = void 0; for (var i = 0; i < nRoots; i++) { var t = roots[i]; var unit = t === 0 || t === 1 ? .5 : 1; if (cubicAt(x0, x1, x2, x3, t) < x) continue; if (nExtrema < 0) { nExtrema = cubicExtrema(y0, y1, y2, y3, extrema); if (extrema[1] < extrema[0] && nExtrema > 1) swapExtrema(); y0_ = cubicAt(y0, y1, y2, y3, extrema[0]); if (nExtrema > 1) y1_ = cubicAt(y0, y1, y2, y3, extrema[1]); } if (nExtrema === 2) { if (t < extrema[0]) w += y0_ < y0 ? unit : -unit; else if (t < extrema[1]) w += y1_ < y0_ ? unit : -unit; else w += y3 < y1_ ? unit : -unit; } else if (t < extrema[0]) w += y0_ < y0 ? unit : -unit; else w += y3 < y0_ ? unit : -unit; } return w; } } function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) { if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) return 0; var nRoots = quadraticRootAt(y0, y1, y2, y, roots); if (nRoots === 0) return 0; else { var t = quadraticExtremum(y0, y1, y2); if (t >= 0 && t <= 1) { var w = 0; var y_ = quadraticAt$1(y0, y1, y2, t); for (var i = 0; i < nRoots; i++) { var unit = roots[i] === 0 || roots[i] === 1 ? .5 : 1; var x_ = quadraticAt$1(x0, x1, x2, roots[i]); if (x_ < x) continue; if (roots[i] < t) w += y_ < y0 ? unit : -unit; else w += y2 < y_ ? unit : -unit; } return w; } else { var unit = roots[0] === 0 || roots[0] === 1 ? .5 : 1; var x_ = quadraticAt$1(x0, x1, x2, roots[0]); if (x_ < x) return 0; return y2 < y0 ? unit : -unit; } } } function windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) { y -= cy; if (y > r || y < -r) return 0; var tmp = Math.sqrt(r * r - y * y); roots[0] = -tmp; roots[1] = tmp; var dTheta = Math.abs(startAngle - endAngle); if (dTheta < 1e-4) return 0; if (dTheta >= PI2$4 - 1e-4) { startAngle = 0; endAngle = PI2$4; var dir = anticlockwise ? 1 : -1; if (x >= roots[0] + cx && x <= roots[1] + cx) return dir; else return 0; } if (startAngle > endAngle) { var tmp_1 = startAngle; startAngle = endAngle; endAngle = tmp_1; } if (startAngle < 0) { startAngle += PI2$4; endAngle += PI2$4; } var w = 0; for (var i = 0; i < 2; i++) { var x_ = roots[i]; if (x_ + cx > x) { var angle = Math.atan2(y, x_); var dir = anticlockwise ? 1 : -1; if (angle < 0) angle = PI2$4 + angle; if (angle >= startAngle && angle <= endAngle || angle + PI2$4 >= startAngle && angle + PI2$4 <= endAngle) { if (angle > Math.PI / 2 && angle < Math.PI * 1.5) dir = -dir; w += dir; } } } return w; } function containPath(path, lineWidth, isStroke, x, y) { var data = path.data; var len = path.len(); var w = 0; var xi = 0; var yi = 0; var x0 = 0; var y0 = 0; var x1; var y1; for (var i = 0; i < len;) { var cmd = data[i++]; var isFirst = i === 1; if (cmd === CMD$3.M && i > 1) { if (!isStroke) w += windingLine(xi, yi, x0, y0, x, y); } if (isFirst) { xi = data[i]; yi = data[i + 1]; x0 = xi; y0 = yi; } switch (cmd) { case CMD$3.M: x0 = data[i++]; y0 = data[i++]; xi = x0; yi = y0; break; case CMD$3.L: if (isStroke) { if (containStroke$4(xi, yi, data[i], data[i + 1], lineWidth, x, y)) return true; } else w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0; xi = data[i++]; yi = data[i++]; break; case CMD$3.C: if (isStroke) { if (containStroke$3(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) return true; } else w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0; xi = data[i++]; yi = data[i++]; break; case CMD$3.Q: if (isStroke) { if (containStroke$2(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) return true; } else w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0; xi = data[i++]; yi = data[i++]; break; case CMD$3.A: var cx = data[i++]; var cy = data[i++]; var rx = data[i++]; var ry = data[i++]; var theta = data[i++]; var dTheta = data[i++]; i += 1; var anticlockwise = !!(1 - data[i++]); x1 = Math.cos(theta) * rx + cx; y1 = Math.sin(theta) * ry + cy; if (!isFirst) w += windingLine(xi, yi, x1, y1, x, y); else { x0 = x1; y0 = y1; } var _x = (x - cx) * ry / rx + cx; if (isStroke) { if (containStroke$1(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) return true; } else w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y); xi = Math.cos(theta + dTheta) * rx + cx; yi = Math.sin(theta + dTheta) * ry + cy; break; case CMD$3.R: x0 = xi = data[i++]; y0 = yi = data[i++]; var width = data[i++]; var height = data[i++]; x1 = x0 + width; y1 = y0 + height; if (isStroke) { if (containStroke$4(x0, y0, x1, y0, lineWidth, x, y) || containStroke$4(x1, y0, x1, y1, lineWidth, x, y) || containStroke$4(x1, y1, x0, y1, lineWidth, x, y) || containStroke$4(x0, y1, x0, y0, lineWidth, x, y)) return true; } else { w += windingLine(x1, y0, x1, y1, x, y); w += windingLine(x0, y1, x0, y0, x, y); } break; case CMD$3.Z: if (isStroke) { if (containStroke$4(xi, yi, x0, y0, lineWidth, x, y)) return true; } else w += windingLine(xi, yi, x0, y0, x, y); xi = x0; yi = y0; } } if (!isStroke && !isAroundEqual$1(yi, y0)) w += windingLine(xi, yi, x0, y0, x, y) || 0; return w !== 0; } function contain$1(pathProxy, x, y) { return containPath(pathProxy, 0, false, x, y); } function containStroke(pathProxy, lineWidth, x, y) { return containPath(pathProxy, lineWidth, true, x, y); } //#endregion //#region node_modules/zrender/lib/graphic/Path.js var DEFAULT_PATH_STYLE = defaults({ fill: "#000", stroke: null, strokePercent: 1, fillOpacity: 1, strokeOpacity: 1, lineDashOffset: 0, lineWidth: 1, lineCap: "butt", miterLimit: 10, strokeNoScale: false, strokeFirst: false }, DEFAULT_COMMON_STYLE); var DEFAULT_PATH_ANIMATION_PROPS = { style: defaults({ fill: true, stroke: true, strokePercent: true, fillOpacity: true, strokeOpacity: true, lineDashOffset: true, lineWidth: true, miterLimit: true }, DEFAULT_COMMON_ANIMATION_PROPS.style) }; var pathCopyParams = TRANSFORMABLE_PROPS.concat([ "invisible", "culling", "z", "z2", "zlevel", "parent" ]); var Path = function(_super) { __extends(Path, _super); function Path(opts) { return _super.call(this, opts) || this; } Path.prototype.update = function() { var _this = this; _super.prototype.update.call(this); var style = this.style; if (style.decal) { var decalEl = this._decalEl = this._decalEl || new Path(); if (decalEl.buildPath === Path.prototype.buildPath) decalEl.buildPath = function(ctx) { _this.buildPath(ctx, _this.shape); }; decalEl.silent = true; var decalElStyle = decalEl.style; for (var key in style) if (decalElStyle[key] !== style[key]) decalElStyle[key] = style[key]; decalElStyle.fill = style.fill ? style.decal : null; decalElStyle.decal = null; decalElStyle.shadowColor = null; style.strokeFirst && (decalElStyle.stroke = null); for (var i = 0; i < pathCopyParams.length; ++i) decalEl[pathCopyParams[i]] = this[pathCopyParams[i]]; decalEl.__dirty |= 1; } else if (this._decalEl) this._decalEl = null; }; Path.prototype.getDecalElement = function() { return this._decalEl; }; Path.prototype._init = function(props) { var keysArr = keys(props); this.shape = this.getDefaultShape(); var defaultStyle = this.getDefaultStyle(); if (defaultStyle) this.useStyle(defaultStyle); for (var i = 0; i < keysArr.length; i++) { var key = keysArr[i]; var value = props[key]; if (key === "style") { if (!this.style) this.useStyle(value); else extend(this.style, value); } else if (key === "shape") extend(this.shape, value); else _super.prototype.attrKV.call(this, key, value); } if (!this.style) this.useStyle({}); }; Path.prototype.getDefaultStyle = function() { return null; }; Path.prototype.getDefaultShape = function() { return {}; }; Path.prototype.canBeInsideText = function() { return this.hasFill(); }; Path.prototype.getInsideTextFill = function() { var pathFill = this.style.fill; if (pathFill !== "none") { if (isString(pathFill)) { var fillLum = lum(pathFill, 0); if (fillLum > .5) return DARK_LABEL_COLOR; else if (fillLum > .2) return LIGHTER_LABEL_COLOR; return LIGHT_LABEL_COLOR; } else if (pathFill) return LIGHT_LABEL_COLOR; } return DARK_LABEL_COLOR; }; Path.prototype.getInsideTextStroke = function(textFill) { var pathFill = this.style.fill; if (isString(pathFill)) { var zr = this.__zr; if (!!(zr && zr.isDarkMode()) === lum(textFill, 0) < .4) return pathFill; } }; Path.prototype.buildPath = function(ctx, shapeCfg, inBatch) {}; Path.prototype.pathUpdated = function() { this.__dirty &= -5; }; Path.prototype.getUpdatedPathProxy = function(inBatch) { !this.path && this.createPathProxy(); this.path.beginPath(); this.buildPath(this.path, this.shape, inBatch); return this.path; }; Path.prototype.createPathProxy = function() { this.path = new PathProxy(false); }; Path.prototype.hasStroke = function() { var style = this.style; var stroke = style.stroke; return !(stroke == null || stroke === "none" || !(style.lineWidth > 0)); }; Path.prototype.hasFill = function() { var fill = this.style.fill; return fill != null && fill !== "none"; }; Path.prototype.getBoundingRect = function() { var rect = this._rect; var style = this.style; var needsUpdateRect = !rect; if (needsUpdateRect) { var firstInvoke = false; if (!this.path) { firstInvoke = true; this.createPathProxy(); } var path = this.path; if (firstInvoke || this.__dirty & 4) { path.beginPath(); this.buildPath(path, this.shape, false); this.pathUpdated(); } rect = path.getBoundingRect(); } this._rect = rect; if (this.hasStroke() && this.path && this.path.len() > 0) { var rectStroke = this._rectStroke || (this._rectStroke = rect.clone()); if (this.__dirty || needsUpdateRect) { rectStroke.copy(rect); var lineScale = style.strokeNoScale ? this.getLineScale() : 1; var w = style.lineWidth; if (!this.hasFill()) { var strokeContainThreshold = this.strokeContainThreshold; w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold); } if (lineScale > 1e-10) { rectStroke.width += w / lineScale; rectStroke.height += w / lineScale; rectStroke.x -= w / lineScale / 2; rectStroke.y -= w / lineScale / 2; } } return rectStroke; } return rect; }; Path.prototype.contain = function(x, y) { var localPos = this.transformCoordToLocal(x, y); var rect = this.getBoundingRect(); var style = this.style; x = localPos[0]; y = localPos[1]; if (rect.contain(x, y)) { var pathProxy = this.path; if (this.hasStroke()) { var lineWidth = style.lineWidth; var lineScale = style.strokeNoScale ? this.getLineScale() : 1; if (lineScale > 1e-10) { if (!this.hasFill()) lineWidth = Math.max(lineWidth, this.strokeContainThreshold); if (containStroke(pathProxy, lineWidth / lineScale, x, y)) return true; } } if (this.hasFill()) return contain$1(pathProxy, x, y); } return false; }; Path.prototype.dirtyShape = function() { this.__dirty |= 4; if (this._rect) this._rect = null; if (this._decalEl) this._decalEl.dirtyShape(); this.markRedraw(); }; Path.prototype.dirty = function() { this.dirtyStyle(); this.dirtyShape(); }; Path.prototype.animateShape = function(loop) { return this.animate("shape", loop); }; Path.prototype.updateDuringAnimation = function(targetKey) { if (targetKey === "style") this.dirtyStyle(); else if (targetKey === "shape") this.dirtyShape(); else this.markRedraw(); }; Path.prototype.attrKV = function(key, value) { if (key === "shape") this.setShape(value); else _super.prototype.attrKV.call(this, key, value); }; Path.prototype.setShape = function(keyOrObj, value) { var shape = this.shape; if (!shape) shape = this.shape = {}; if (typeof keyOrObj === "string") shape[keyOrObj] = value; else extend(shape, keyOrObj); this.dirtyShape(); return this; }; Path.prototype.shapeChanged = function() { return !!(this.__dirty & 4); }; Path.prototype.createStyle = function(obj) { return createObject(DEFAULT_PATH_STYLE, obj); }; Path.prototype._innerSaveToNormal = function(toState) { _super.prototype._innerSaveToNormal.call(this, toState); var normalState = this._normalState; if (toState.shape && !normalState.shape) normalState.shape = extend({}, this.shape); }; Path.prototype._applyStateObj = function(stateName, state, normalState, keepCurrentStates, transition, animationCfg) { _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg); if (this.__inHover === 1) return; var needsRestoreToNormal = !(state && keepCurrentStates); var targetShape; if (state && state.shape) { if (transition) { if (keepCurrentStates) targetShape = state.shape; else { targetShape = extend({}, normalState.shape); extend(targetShape, state.shape); } } else { targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape); extend(targetShape, state.shape); } } else if (needsRestoreToNormal) targetShape = normalState.shape; if (targetShape) { if (transition) { this.shape = extend({}, this.shape); var targetShapePrimaryProps = {}; var shapeKeys = keys(targetShape); for (var i = 0; i < shapeKeys.length; i++) { var key = shapeKeys[i]; if (typeof targetShape[key] === "object") this.shape[key] = targetShape[key]; else targetShapePrimaryProps[key] = targetShape[key]; } this._transitionState(stateName, { shape: targetShapePrimaryProps }, animationCfg); } else { this.shape = targetShape; this.dirtyShape(); } } }; Path.prototype._mergeStates = function(states) { var mergedState = _super.prototype._mergeStates.call(this, states); var mergedShape; for (var i = 0; i < states.length; i++) { var state = states[i]; if (state.shape) { mergedShape = mergedShape || {}; this._mergeStyle(mergedShape, state.shape); } } if (mergedShape) mergedState.shape = mergedShape; return mergedState; }; Path.prototype.getAnimationStyleProps = function() { return DEFAULT_PATH_ANIMATION_PROPS; }; Path.prototype.isZeroArea = function() { return false; }; Path.extend = function(defaultProps) { var Sub = function(_super) { __extends(Sub, _super); function Sub(opts) { var _this = _super.call(this, opts) || this; defaultProps.init && defaultProps.init.call(_this, opts); return _this; } Sub.prototype.getDefaultStyle = function() { return clone$4(defaultProps.style); }; Sub.prototype.getDefaultShape = function() { return clone$4(defaultProps.shape); }; return Sub; }(Path); for (var key in defaultProps) if (typeof defaultProps[key] === "function") Sub.prototype[key] = defaultProps[key]; return Sub; }; Path.initDefaultProps = (function() { var pathProto = Path.prototype; pathProto.type = "path"; pathProto.strokeContainThreshold = 5; pathProto.segmentIgnoreThreshold = 0; pathProto.subPixelOptimize = false; pathProto.autoBatch = false; pathProto.__dirty = 7; })(); return Path; }(Displayable); //#endregion //#region node_modules/zrender/lib/graphic/TSpan.js var DEFAULT_TSPAN_STYLE = defaults({ strokeFirst: true, font: DEFAULT_FONT, x: 0, y: 0, textAlign: "left", textBaseline: "top", miterLimit: 2 }, DEFAULT_PATH_STYLE); var TSpan = function(_super) { __extends(TSpan, _super); function TSpan() { return _super !== null && _super.apply(this, arguments) || this; } TSpan.prototype.hasStroke = function() { return tSpanHasStroke(this.style); }; TSpan.prototype.hasFill = function() { var fill = this.style.fill; return fill != null && fill !== "none"; }; TSpan.prototype.createStyle = function(obj) { return createObject(DEFAULT_TSPAN_STYLE, obj); }; TSpan.prototype.setBoundingRect = function(rect) { this._rect = rect; }; TSpan.prototype.getBoundingRect = function() { if (!this._rect) this._rect = tSpanCreateBoundingRect(this.style); return this._rect; }; TSpan.initDefaultProps = (function() { var tspanProto = TSpan.prototype; tspanProto.dirtyRectTolerance = 10; })(); return TSpan; }(Displayable); TSpan.prototype.type = "tspan"; //#endregion //#region node_modules/zrender/lib/graphic/Image.js var DEFAULT_IMAGE_STYLE = defaults({ x: 0, y: 0 }, DEFAULT_COMMON_STYLE); var DEFAULT_IMAGE_ANIMATION_PROPS = { style: defaults({ x: true, y: true, width: true, height: true, sx: true, sy: true, sWidth: true, sHeight: true }, DEFAULT_COMMON_ANIMATION_PROPS.style) }; function isImageLike$1(source) { return !!(source && typeof source !== "string" && source.width && source.height); } var ZRImage = function(_super) { __extends(ZRImage, _super); function ZRImage() { return _super !== null && _super.apply(this, arguments) || this; } ZRImage.prototype.createStyle = function(obj) { return createObject(DEFAULT_IMAGE_STYLE, obj); }; ZRImage.prototype._getSize = function(dim) { var style = this.style; var size = style[dim]; if (size != null) return size; var imageSource = isImageLike$1(style.image) ? style.image : this.__image; if (!imageSource) return 0; var otherDim = dim === "width" ? "height" : "width"; var otherDimSize = style[otherDim]; if (otherDimSize == null) return imageSource[dim]; else return imageSource[dim] / imageSource[otherDim] * otherDimSize; }; ZRImage.prototype.getWidth = function() { return this._getSize("width"); }; ZRImage.prototype.getHeight = function() { return this._getSize("height"); }; ZRImage.prototype.getAnimationStyleProps = function() { return DEFAULT_IMAGE_ANIMATION_PROPS; }; ZRImage.prototype.getBoundingRect = function() { var style = this.style; if (!this._rect) this._rect = new BoundingRect(style.x || 0, style.y || 0, this.getWidth(), this.getHeight()); return this._rect; }; return ZRImage; }(Displayable); ZRImage.prototype.type = "image"; //#endregion //#region node_modules/zrender/lib/graphic/helper/roundRect.js function buildPath$2(ctx, shape) { var x = shape.x; var y = shape.y; var width = shape.width; var height = shape.height; var r = shape.r; var r1; var r2; var r3; var r4; if (width < 0) { x = x + width; width = -width; } if (height < 0) { y = y + height; height = -height; } if (typeof r === "number") r1 = r2 = r3 = r4 = r; else if (r instanceof Array) { if (r.length === 1) r1 = r2 = r3 = r4 = r[0]; else if (r.length === 2) { r1 = r3 = r[0]; r2 = r4 = r[1]; } else if (r.length === 3) { r1 = r[0]; r2 = r4 = r[1]; r3 = r[2]; } else { r1 = r[0]; r2 = r[1]; r3 = r[2]; r4 = r[3]; } } else r1 = r2 = r3 = r4 = 0; var total; if (r1 + r2 > width) { total = r1 + r2; r1 *= width / total; r2 *= width / total; } if (r3 + r4 > width) { total = r3 + r4; r3 *= width / total; r4 *= width / total; } if (r2 + r3 > height) { total = r2 + r3; r2 *= height / total; r3 *= height / total; } if (r1 + r4 > height) { total = r1 + r4; r1 *= height / total; r4 *= height / total; } ctx.moveTo(x + r1, y); ctx.lineTo(x + width - r2, y); r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0); ctx.lineTo(x + width, y + height - r3); r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2); ctx.lineTo(x + r4, y + height); r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI); ctx.lineTo(x, y + r1); r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5); ctx.closePath(); } //#endregion //#region node_modules/zrender/lib/graphic/helper/subPixelOptimize.js var round$2 = Math.round; function subPixelOptimizeLine$1(outputShape, inputShape, style) { if (!inputShape) return; var x1 = inputShape.x1; var x2 = inputShape.x2; var y1 = inputShape.y1; var y2 = inputShape.y2; outputShape.x1 = x1; outputShape.x2 = x2; outputShape.y1 = y1; outputShape.y2 = y2; var lineWidth = style && style.lineWidth; if (!lineWidth) return outputShape; if (round$2(x1 * 2) === round$2(x2 * 2)) outputShape.x1 = outputShape.x2 = subPixelOptimize$1(x1, lineWidth, true); if (round$2(y1 * 2) === round$2(y2 * 2)) outputShape.y1 = outputShape.y2 = subPixelOptimize$1(y1, lineWidth, true); return outputShape; } function subPixelOptimizeRect$1(outputShape, inputShape, style) { if (!inputShape) return; var originX = inputShape.x; var originY = inputShape.y; var originWidth = inputShape.width; var originHeight = inputShape.height; outputShape.x = originX; outputShape.y = originY; outputShape.width = originWidth; outputShape.height = originHeight; var lineWidth = style && style.lineWidth; if (!lineWidth) return outputShape; outputShape.x = subPixelOptimize$1(originX, lineWidth, true); outputShape.y = subPixelOptimize$1(originY, lineWidth, true); outputShape.width = Math.max(subPixelOptimize$1(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1); outputShape.height = Math.max(subPixelOptimize$1(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1); return outputShape; } function subPixelOptimize$1(position, lineWidth, positiveOrNegative) { if (!lineWidth) return position; var doubledPosition = round$2(position * 2); return (doubledPosition + round$2(lineWidth)) % 2 === 0 ? doubledPosition / 2 : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2; } //#endregion //#region node_modules/zrender/lib/graphic/shape/Rect.js var RectShape = function() { function RectShape() { this.x = 0; this.y = 0; this.width = 0; this.height = 0; } return RectShape; }(); var subPixelOptimizeOutputShape$1 = {}; var Rect$2 = function(_super) { __extends(Rect, _super); function Rect(opts) { return _super.call(this, opts) || this; } Rect.prototype.getDefaultShape = function() { return new RectShape(); }; Rect.prototype.buildPath = function(ctx, shape) { var x; var y; var width; var height; if (this.subPixelOptimize) { var optimizedShape = subPixelOptimizeRect$1(subPixelOptimizeOutputShape$1, shape, this.style); x = optimizedShape.x; y = optimizedShape.y; width = optimizedShape.width; height = optimizedShape.height; optimizedShape.r = shape.r; shape = optimizedShape; } else { x = shape.x; y = shape.y; width = shape.width; height = shape.height; } if (!shape.r) ctx.rect(x, y, width, height); else buildPath$2(ctx, shape); }; Rect.prototype.isZeroArea = function() { return !this.shape.width || !this.shape.height; }; return Rect; }(Path); Rect$2.prototype.type = "rect"; //#endregion //#region node_modules/zrender/lib/graphic/Text.js var DEFAULT_RICH_TEXT_COLOR = { fill: "#000" }; var DEFAULT_STROKE_LINE_WIDTH = 2; var tmpCITOverflowAreaOut = {}; var DEFAULT_TEXT_ANIMATION_PROPS = { style: defaults({ fill: true, stroke: true, fillOpacity: true, strokeOpacity: true, lineWidth: true, fontSize: true, lineHeight: true, width: true, height: true, textShadowColor: true, textShadowBlur: true, textShadowOffsetX: true, textShadowOffsetY: true, backgroundColor: true, padding: true, borderColor: true, borderWidth: true, borderRadius: true }, DEFAULT_COMMON_ANIMATION_PROPS.style) }; var ZRText = function(_super) { __extends(ZRText, _super); function ZRText(opts) { var _this = _super.call(this) || this; _this.type = "text"; _this._children = []; _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR; _this.attr(opts); return _this; } ZRText.prototype.childrenRef = function() { return this._children; }; ZRText.prototype.update = function() { _super.prototype.update.call(this); if (this.styleChanged()) this._updateSubTexts(); for (var i = 0; i < this._children.length; i++) { var child = this._children[i]; child.zlevel = this.zlevel; child.z = this.z; child.z2 = this.z2; child.culling = this.culling; child.cursor = this.cursor; child.invisible = this.invisible; } }; ZRText.prototype.updateTransform = function() { var innerTransformable = this.innerTransformable; if (innerTransformable) { innerTransformable.updateTransform(); if (innerTransformable.transform) this.transform = innerTransformable.transform; } else _super.prototype.updateTransform.call(this); }; ZRText.prototype.getLocalTransform = function(m) { var innerTransformable = this.innerTransformable; return innerTransformable ? innerTransformable.getLocalTransform(m) : _super.prototype.getLocalTransform.call(this, m); }; ZRText.prototype.getComputedTransform = function() { if (this.__hostTarget) { this.__hostTarget.getComputedTransform(); this.__hostTarget.updateInnerText(true); } return _super.prototype.getComputedTransform.call(this); }; ZRText.prototype._updateSubTexts = function() { this._childCursor = 0; normalizeTextStyle(this.style); this.style.rich ? this._updateRichTexts() : this._updatePlainTexts(); this._children.length = this._childCursor; this.styleUpdated(); }; ZRText.prototype.addSelfToZr = function(zr) { _super.prototype.addSelfToZr.call(this, zr); for (var i = 0; i < this._children.length; i++) this._children[i].__zr = zr; }; ZRText.prototype.removeSelfFromZr = function(zr) { _super.prototype.removeSelfFromZr.call(this, zr); for (var i = 0; i < this._children.length; i++) this._children[i].__zr = null; }; ZRText.prototype.getBoundingRect = function() { if (this.styleChanged()) this._updateSubTexts(); if (!this._rect) { var tmpRect = new BoundingRect(0, 0, 0, 0); var children = this._children; var tmpMat = []; var rect = null; for (var i = 0; i < children.length; i++) { var child = children[i]; var childRect = child.getBoundingRect(); var transform = child.getLocalTransform(tmpMat); if (transform) { tmpRect.copy(childRect); tmpRect.applyTransform(transform); rect = rect || tmpRect.clone(); rect.union(tmpRect); } else { rect = rect || childRect.clone(); rect.union(childRect); } } this._rect = rect || tmpRect; } return this._rect; }; ZRText.prototype.setDefaultTextStyle = function(defaultTextStyle) { this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR; }; ZRText.prototype.setTextContent = function(textContent) { throw new Error("Can't attach text on another text"); }; ZRText.prototype._mergeStyle = function(targetStyle, sourceStyle) { if (!sourceStyle) return targetStyle; var sourceRich = sourceStyle.rich; var targetRich = targetStyle.rich || sourceRich && {}; extend(targetStyle, sourceStyle); if (sourceRich && targetRich) { this._mergeRich(targetRich, sourceRich); targetStyle.rich = targetRich; } else if (targetRich) targetStyle.rich = targetRich; return targetStyle; }; ZRText.prototype._mergeRich = function(targetRich, sourceRich) { var richNames = keys(sourceRich); for (var i = 0; i < richNames.length; i++) { var richName = richNames[i]; targetRich[richName] = targetRich[richName] || {}; extend(targetRich[richName], sourceRich[richName]); } }; ZRText.prototype.getAnimationStyleProps = function() { return DEFAULT_TEXT_ANIMATION_PROPS; }; ZRText.prototype._getOrCreateChild = function(Ctor) { var child = this._children[this._childCursor]; if (!child || !(child instanceof Ctor)) child = new Ctor(); this._children[this._childCursor++] = child; child.__zr = this.__zr; child.parent = this; return child; }; ZRText.prototype._updatePlainTexts = function() { var style = this.style; var textFont = style.font || "12px sans-serif"; var textPadding = style.padding; var defaultStyle = this._defaultStyle; var baseX = style.x || 0; var baseY = style.y || 0; var textAlign = style.align || defaultStyle.align || "left"; var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || "top"; calcInnerTextOverflowArea(tmpCITOverflowAreaOut, defaultStyle.overflowRect, baseX, baseY, textAlign, verticalAlign); baseX = tmpCITOverflowAreaOut.baseX; baseY = tmpCITOverflowAreaOut.baseY; var contentBlock = parsePlainText(getStyleText(style), style, tmpCITOverflowAreaOut.outerWidth, tmpCITOverflowAreaOut.outerHeight); var needDrawBg = needDrawBackground(style); var bgColorDrawn = !!style.backgroundColor; var outerHeight = contentBlock.outerHeight; var outerWidth = contentBlock.outerWidth; var textLines = contentBlock.lines; var lineHeight = contentBlock.lineHeight; this.isTruncated = !!contentBlock.isTruncated; var textX = baseX; var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign); if (needDrawBg || textPadding) { var boxX = adjustTextX(baseX, outerWidth, textAlign); var boxY = adjustTextY(baseY, outerHeight, verticalAlign); needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight); } textY += lineHeight / 2; if (textPadding) { textX = getTextXForPadding(baseX, textAlign, textPadding); if (verticalAlign === "top") textY += textPadding[0]; else if (verticalAlign === "bottom") textY -= textPadding[2]; } var defaultLineWidth = 0; var usingDefaultStroke = false; var useDefaultFill = false; var textFill = getFill("fill" in style ? style.fill : (useDefaultFill = true, defaultStyle.fill)); var textStroke = getStroke("stroke" in style ? style.stroke : !bgColorDrawn && (!defaultStyle.autoStroke || useDefaultFill) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, usingDefaultStroke = true, defaultStyle.stroke) : null); var hasShadow = style.textShadowBlur > 0; for (var i = 0; i < textLines.length; i++) { var el = this._getOrCreateChild(TSpan); var subElStyle = el.createStyle(); el.useStyle(subElStyle); subElStyle.text = textLines[i]; subElStyle.x = textX; subElStyle.y = textY; if (textAlign) subElStyle.textAlign = textAlign; subElStyle.textBaseline = "middle"; subElStyle.opacity = style.opacity; subElStyle.strokeFirst = true; if (hasShadow) { subElStyle.shadowBlur = style.textShadowBlur || 0; subElStyle.shadowColor = style.textShadowColor || "transparent"; subElStyle.shadowOffsetX = style.textShadowOffsetX || 0; subElStyle.shadowOffsetY = style.textShadowOffsetY || 0; } subElStyle.stroke = textStroke; subElStyle.fill = textFill; if (textStroke) { subElStyle.lineWidth = style.lineWidth || defaultLineWidth; subElStyle.lineDash = style.lineDash; subElStyle.lineDashOffset = style.lineDashOffset || 0; } subElStyle.font = textFont; setSeparateFont(subElStyle, style); textY += lineHeight; el.setBoundingRect(tSpanCreateBoundingRect2(subElStyle, contentBlock.contentWidth, contentBlock.calculatedLineHeight, usingDefaultStroke ? 0 : null)); } }; ZRText.prototype._updateRichTexts = function() { var style = this.style; var defaultStyle = this._defaultStyle; var textAlign = style.align || defaultStyle.align; var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign; var baseX = style.x || 0; var baseY = style.y || 0; calcInnerTextOverflowArea(tmpCITOverflowAreaOut, defaultStyle.overflowRect, baseX, baseY, textAlign, verticalAlign); baseX = tmpCITOverflowAreaOut.baseX; baseY = tmpCITOverflowAreaOut.baseY; var contentBlock = parseRichText(getStyleText(style), style, tmpCITOverflowAreaOut.outerWidth, tmpCITOverflowAreaOut.outerHeight, textAlign); var contentWidth = contentBlock.width; var outerWidth = contentBlock.outerWidth; var outerHeight = contentBlock.outerHeight; var textPadding = style.padding; this.isTruncated = !!contentBlock.isTruncated; var boxX = adjustTextX(baseX, outerWidth, textAlign); var boxY = adjustTextY(baseY, outerHeight, verticalAlign); var xLeft = boxX; var lineTop = boxY; if (textPadding) { xLeft += textPadding[3]; lineTop += textPadding[0]; } var xRight = xLeft + contentWidth; if (needDrawBackground(style)) this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight); var bgColorDrawn = !!style.backgroundColor; for (var i = 0; i < contentBlock.lines.length; i++) { var line = contentBlock.lines[i]; var tokens = line.tokens; var tokenCount = tokens.length; var lineHeight = line.lineHeight; var remainedWidth = line.width; var leftIndex = 0; var lineXLeft = xLeft; var lineXRight = xRight; var rightIndex = tokenCount - 1; var token = void 0; while (leftIndex < tokenCount && (token = tokens[leftIndex], !token.align || token.align === "left")) { this._placeToken(token, style, lineHeight, lineTop, lineXLeft, "left", bgColorDrawn); remainedWidth -= token.width; lineXLeft += token.width; leftIndex++; } while (rightIndex >= 0 && (token = tokens[rightIndex], token.align === "right")) { this._placeToken(token, style, lineHeight, lineTop, lineXRight, "right", bgColorDrawn); remainedWidth -= token.width; lineXRight -= token.width; rightIndex--; } lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2; while (leftIndex <= rightIndex) { token = tokens[leftIndex]; this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, "center", bgColorDrawn); lineXLeft += token.width; leftIndex++; } lineTop += lineHeight; } }; ZRText.prototype._placeToken = function(token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) { var tokenStyle = style.rich[token.styleName] || {}; tokenStyle.text = token.text; var verticalAlign = token.verticalAlign; var y = lineTop + lineHeight / 2; if (verticalAlign === "top") y = lineTop + token.height / 2; else if (verticalAlign === "bottom") y = lineTop + lineHeight - token.height / 2; !token.isLineHolder && needDrawBackground(tokenStyle) && this._renderBackground(tokenStyle, style, textAlign === "right" ? x - token.width : textAlign === "center" ? x - token.width / 2 : x, y - token.height / 2, token.width, token.height); var bgColorDrawn = !!tokenStyle.backgroundColor; var textPadding = token.textPadding; if (textPadding) { x = getTextXForPadding(x, textAlign, textPadding); y -= token.height / 2 - textPadding[0] - token.innerHeight / 2; } var el = this._getOrCreateChild(TSpan); var subElStyle = el.createStyle(); el.useStyle(subElStyle); var defaultStyle = this._defaultStyle; var useDefaultFill = false; var defaultLineWidth = 0; var usingDefaultStroke = false; var textFill = getFill("fill" in tokenStyle ? tokenStyle.fill : "fill" in style ? style.fill : (useDefaultFill = true, defaultStyle.fill)); var textStroke = getStroke("stroke" in tokenStyle ? tokenStyle.stroke : "stroke" in style ? style.stroke : !bgColorDrawn && !parentBgColorDrawn && (!defaultStyle.autoStroke || useDefaultFill) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, usingDefaultStroke = true, defaultStyle.stroke) : null); var hasShadow = tokenStyle.textShadowBlur > 0 || style.textShadowBlur > 0; subElStyle.text = token.text; subElStyle.x = x; subElStyle.y = y; if (hasShadow) { subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0; subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || "transparent"; subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0; subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0; } subElStyle.textAlign = textAlign; subElStyle.textBaseline = "middle"; subElStyle.font = token.font || "12px sans-serif"; subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1); setSeparateFont(subElStyle, tokenStyle); if (textStroke) { subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth); subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash); subElStyle.lineDashOffset = style.lineDashOffset || 0; subElStyle.stroke = textStroke; } if (textFill) subElStyle.fill = textFill; el.setBoundingRect(tSpanCreateBoundingRect2(subElStyle, token.contentWidth, token.contentHeight, usingDefaultStroke ? 0 : null)); }; ZRText.prototype._renderBackground = function(style, topStyle, x, y, width, height) { var textBackgroundColor = style.backgroundColor; var textBorderWidth = style.borderWidth; var textBorderColor = style.borderColor; var isImageBg = textBackgroundColor && textBackgroundColor.image; var isPlainOrGradientBg = textBackgroundColor && !isImageBg; var textBorderRadius = style.borderRadius; var self = this; var rectEl; var imgEl; if (isPlainOrGradientBg || style.lineHeight || textBorderWidth && textBorderColor) { rectEl = this._getOrCreateChild(Rect$2); rectEl.useStyle(rectEl.createStyle()); rectEl.style.fill = null; var rectShape = rectEl.shape; rectShape.x = x; rectShape.y = y; rectShape.width = width; rectShape.height = height; rectShape.r = textBorderRadius; rectEl.dirtyShape(); } if (isPlainOrGradientBg) { var rectStyle = rectEl.style; rectStyle.fill = textBackgroundColor || null; rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1); } else if (isImageBg) { imgEl = this._getOrCreateChild(ZRImage); imgEl.onload = function() { self.dirtyStyle(); }; var imgStyle = imgEl.style; imgStyle.image = textBackgroundColor.image; imgStyle.x = x; imgStyle.y = y; imgStyle.width = width; imgStyle.height = height; } if (textBorderWidth && textBorderColor) { var rectStyle = rectEl.style; rectStyle.lineWidth = textBorderWidth; rectStyle.stroke = textBorderColor; rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1); rectStyle.lineDash = style.borderDash; rectStyle.lineDashOffset = style.borderDashOffset || 0; rectEl.strokeContainThreshold = 0; if (rectEl.hasFill() && rectEl.hasStroke()) { rectStyle.strokeFirst = true; rectStyle.lineWidth *= 2; } } var commonStyle = (rectEl || imgEl).style; commonStyle.shadowBlur = style.shadowBlur || 0; commonStyle.shadowColor = style.shadowColor || "transparent"; commonStyle.shadowOffsetX = style.shadowOffsetX || 0; commonStyle.shadowOffsetY = style.shadowOffsetY || 0; commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1); }; ZRText.makeFont = function(style) { var font = ""; if (hasSeparateFont(style)) font = [ style.fontStyle, style.fontWeight, parseFontSize(style.fontSize), style.fontFamily || "sans-serif" ].join(" "); return font && trim$1(font) || style.textFont || style.font; }; return ZRText; }(Displayable); var VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 }; var VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 }; var FONT_PARTS = [ "fontStyle", "fontWeight", "fontSize", "fontFamily" ]; function parseFontSize(fontSize) { if (typeof fontSize === "string" && (fontSize.indexOf("px") !== -1 || fontSize.indexOf("rem") !== -1 || fontSize.indexOf("em") !== -1)) return fontSize; else if (!isNaN(+fontSize)) return fontSize + "px"; else return "12px"; } function setSeparateFont(targetStyle, sourceStyle) { for (var i = 0; i < FONT_PARTS.length; i++) { var fontProp = FONT_PARTS[i]; var val = sourceStyle[fontProp]; if (val != null) targetStyle[fontProp] = val; } } function hasSeparateFont(style) { return style.fontSize != null || style.fontFamily || style.fontWeight; } function normalizeTextStyle(style) { normalizeStyle(style); each$12(style.rich, normalizeStyle); return style; } function normalizeStyle(style) { if (style) { style.font = ZRText.makeFont(style); var textAlign = style.align; textAlign === "middle" && (textAlign = "center"); style.align = textAlign == null || VALID_TEXT_ALIGN[textAlign] ? textAlign : "left"; var verticalAlign = style.verticalAlign; verticalAlign === "center" && (verticalAlign = "middle"); style.verticalAlign = verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign] ? verticalAlign : "top"; if (style.padding) style.padding = normalizeCssArray$1(style.padding); } } function getStroke(stroke, lineWidth) { return stroke == null || lineWidth <= 0 || stroke === "transparent" || stroke === "none" ? null : stroke.image || stroke.colorStops ? "#000" : stroke; } function getFill(fill) { return fill == null || fill === "none" ? null : fill.image || fill.colorStops ? "#000" : fill; } function getTextXForPadding(x, textAlign, textPadding) { return textAlign === "right" ? x - textPadding[1] : textAlign === "center" ? x + textPadding[3] / 2 - textPadding[1] / 2 : x + textPadding[3]; } function getStyleText(style) { var text = style.text; text != null && (text += ""); return text; } function needDrawBackground(style) { return !!(style.backgroundColor || style.lineHeight || style.borderWidth && style.borderColor); } //#endregion //#region node_modules/echarts/lib/util/innerStore.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var getECData = makeInner(); var setCommonECData = function(seriesIndex, dataType, dataIdx, el) { if (el) { var ecData = getECData(el); ecData.dataIndex = dataIdx; ecData.dataType = dataType; ecData.seriesIndex = seriesIndex; ecData.ssrType = "chart"; if (el.type === "group") el.traverse(function(child) { var childECData = getECData(child); childECData.seriesIndex = seriesIndex; childECData.dataIndex = dataIdx; childECData.dataType = dataType; childECData.ssrType = "chart"; }); } }; var COMPONENT_MAIN_TYPE_SERIES = "series"; var VISUAL_DIMENSIONS = createHashMap([ "tooltip", "label", "itemName", "itemId", "itemGroupId", "itemChildGroupId", "seriesName" ]); var SOURCE_FORMAT_ORIGINAL = "original"; var SOURCE_FORMAT_ARRAY_ROWS = "arrayRows"; var SOURCE_FORMAT_OBJECT_ROWS = "objectRows"; var SOURCE_FORMAT_KEYED_COLUMNS = "keyedColumns"; var SOURCE_FORMAT_TYPED_ARRAY = "typedArray"; var SOURCE_FORMAT_UNKNOWN = "unknown"; var SERIES_LAYOUT_BY_COLUMN = "column"; var ROAM_ACTION_TYPE_SUFFIX = "Roam"; //#endregion //#region node_modules/echarts/lib/core/ExtensionAPI.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var availableMethods = [ "getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isSSR", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getOption", "getId", "updateLabelLayout" ]; var ExtensionAPI = function() { function ExtensionAPI(ecInstance) { each$12(availableMethods, function(methodName) { this[methodName] = bind$1(ecInstance[methodName], ecInstance); }, this); } return ExtensionAPI; }(); function getViewOfComponentOrSeries(api, componentOrSeries) { return componentOrSeries.mainType === "series" ? api.getViewOfSeriesModel(componentOrSeries) : api.getViewOfComponentModel(componentOrSeries); } //#endregion //#region node_modules/echarts/lib/util/states.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var _highlightNextDigit = 1; var _highlightKeyMap = {}; var getSavedStates = makeInner(); var getComponentStates = makeInner(); var SPECIAL_STATES = [ "emphasis", "blur", "select" ]; var DISPLAY_STATES = [ "normal", "emphasis", "blur", "select" ]; var HIGHLIGHT_ACTION_TYPE = "highlight"; var DOWNPLAY_ACTION_TYPE = "downplay"; var SELECT_ACTION_TYPE = "select"; var UNSELECT_ACTION_TYPE = "unselect"; var TOGGLE_SELECT_ACTION_TYPE = "toggleSelect"; var SELECT_CHANGED_EVENT_TYPE = "selectchanged"; function hasFillOrStroke(fillOrStroke) { return fillOrStroke != null && fillOrStroke !== "none"; } function doChangeHoverState(el, stateName, hoverStateEnum) { if (el.onHoverStateChange && (el.hoverState || 0) !== hoverStateEnum) el.onHoverStateChange(stateName); el.hoverState = hoverStateEnum; } function singleEnterEmphasis(el) { doChangeHoverState(el, "emphasis", 2); } function singleLeaveEmphasis(el) { if (el.hoverState === 2) doChangeHoverState(el, "normal", 0); } function singleEnterBlur(el) { doChangeHoverState(el, "blur", 1); } function singleLeaveBlur(el) { if (el.hoverState === 1) doChangeHoverState(el, "normal", 0); } function singleEnterSelect(el) { el.selected = true; } function singleLeaveSelect(el) { el.selected = false; } function updateElementState(el, updater, commonParam) { updater(el, commonParam); } function traverseUpdateState(el, updater, commonParam) { updateElementState(el, updater, commonParam); el.isGroup && el.traverse(function(child) { updateElementState(child, updater, commonParam); }); } function setStatesFlag(el, stateName) { switch (stateName) { case "emphasis": el.hoverState = 2; break; case "normal": el.hoverState = 0; break; case "blur": el.hoverState = 1; break; case "select": el.selected = true; } } function getFromStateStyle(el, props, toStateName, defaultValue) { var style = el.style; var fromState = {}; for (var i = 0; i < props.length; i++) { var propName = props[i]; var val = style[propName]; fromState[propName] = val == null ? defaultValue && defaultValue[propName] : val; } for (var i = 0; i < el.animators.length; i++) { var animator = el.animators[i]; if (animator.__fromStateTransition && animator.__fromStateTransition.indexOf(toStateName) < 0 && animator.targetName === "style") animator.saveTo(fromState, props); } return fromState; } function createEmphasisDefaultState(el, stateName, targetStates, state) { var hasSelect = targetStates && indexOf(targetStates, "select") >= 0; var cloned = false; if (el instanceof Path) { var store = getSavedStates(el); var fromFill = hasSelect ? store.selectFill || store.normalFill : store.normalFill; var fromStroke = hasSelect ? store.selectStroke || store.normalStroke : store.normalStroke; if (hasFillOrStroke(fromFill) || hasFillOrStroke(fromStroke)) { state = state || {}; var emphasisStyle = state.style || {}; if (emphasisStyle.fill === "inherit") { cloned = true; state = extend({}, state); emphasisStyle = extend({}, emphasisStyle); emphasisStyle.fill = fromFill; } else if (!hasFillOrStroke(emphasisStyle.fill) && hasFillOrStroke(fromFill)) { cloned = true; state = extend({}, state); emphasisStyle = extend({}, emphasisStyle); emphasisStyle.fill = liftColor(fromFill); } else if (!hasFillOrStroke(emphasisStyle.stroke) && hasFillOrStroke(fromStroke)) { if (!cloned) { state = extend({}, state); emphasisStyle = extend({}, emphasisStyle); } emphasisStyle.stroke = liftColor(fromStroke); } state.style = emphasisStyle; } } if (state) { if (state.z2 == null) { if (!cloned) state = extend({}, state); var z2EmphasisLift = el.z2EmphasisLift; state.z2 = el.z2 + (z2EmphasisLift != null ? z2EmphasisLift : 10); } } return state; } function createSelectDefaultState(el, stateName, state) { if (state) { if (state.z2 == null) { state = extend({}, state); var z2SelectLift = el.z2SelectLift; state.z2 = el.z2 + (z2SelectLift != null ? z2SelectLift : 9); } } return state; } function createBlurDefaultState(el, stateName, state) { var hasBlur = indexOf(el.currentStates, stateName) >= 0; var currentOpacity = el.style.opacity; var fromState = !hasBlur ? getFromStateStyle(el, ["opacity"], stateName, { opacity: 1 }) : null; state = state || {}; var blurStyle = state.style || {}; if (blurStyle.opacity == null) { state = extend({}, state); blurStyle = extend({ opacity: hasBlur ? currentOpacity : fromState.opacity * .1 }, blurStyle); state.style = blurStyle; } return state; } function elementStateProxy(stateName, targetStates) { var state = this.states[stateName]; if (this.style) { if (stateName === "emphasis") return createEmphasisDefaultState(this, stateName, targetStates, state); else if (stateName === "blur") return createBlurDefaultState(this, stateName, state); else if (stateName === "select") return createSelectDefaultState(this, stateName, state); } return state; } /** * Set hover style (namely "emphasis style") of element. * @param el Should not be `zrender/graphic/Group`. * @param focus 'self' | 'selfInSeries' | 'series' */ function setDefaultStateProxy(el) { el.stateProxy = elementStateProxy; var textContent = el.getTextContent(); var textGuide = el.getTextGuideLine(); if (textContent) textContent.stateProxy = elementStateProxy; if (textGuide) textGuide.stateProxy = elementStateProxy; } function enterEmphasisWhenMouseOver(el, e) { !shouldSilent(el, e) && !el.__highByOuter && traverseUpdateState(el, singleEnterEmphasis); } function leaveEmphasisWhenMouseOut(el, e) { !shouldSilent(el, e) && !el.__highByOuter && traverseUpdateState(el, singleLeaveEmphasis); } function enterEmphasis(el, highlightDigit) { el.__highByOuter |= 1 << (highlightDigit || 0); traverseUpdateState(el, singleEnterEmphasis); } function leaveEmphasis(el, highlightDigit) { !(el.__highByOuter &= ~(1 << (highlightDigit || 0))) && traverseUpdateState(el, singleLeaveEmphasis); } function enterBlur(el) { traverseUpdateState(el, singleEnterBlur); } function leaveBlur(el) { traverseUpdateState(el, singleLeaveBlur); } function enterSelect(el) { traverseUpdateState(el, singleEnterSelect); } function leaveSelect(el) { traverseUpdateState(el, singleLeaveSelect); } function shouldSilent(el, e) { return el.__highDownSilentOnTouch && e.zrByTouch; } function allLeaveBlur(api) { var model = api.getModel(); var leaveBlurredSeries = []; var allComponentViews = []; model.eachComponent(function(componentType, componentModel) { var componentStates = getComponentStates(componentModel); var view = getViewOfComponentOrSeries(api, componentModel); var isSeries = componentType === "series"; !isSeries && allComponentViews.push(view); if (componentStates.isBlured) { view.group.traverse(function(child) { singleLeaveBlur(child); }); isSeries && leaveBlurredSeries.push(componentModel); } componentStates.isBlured = false; }); each$12(allComponentViews, function(view) { if (view && view.toggleBlurSeries) view.toggleBlurSeries(leaveBlurredSeries, false, model); }); } function blurSeries(targetSeriesIndex, focus, blurScope, api) { var ecModel = api.getModel(); blurScope = blurScope || "coordinateSystem"; function leaveBlurOfIndices(data, dataIndices) { for (var i = 0; i < dataIndices.length; i++) { var itemEl = data.getItemGraphicEl(dataIndices[i]); itemEl && leaveBlur(itemEl); } } if (targetSeriesIndex == null) return; if (!focus || focus === "none") return; var targetSeriesModel = ecModel.getSeriesByIndex(targetSeriesIndex); var targetCoordSys = targetSeriesModel.coordinateSystem; if (targetCoordSys && targetCoordSys.master) targetCoordSys = targetCoordSys.master; var blurredSeries = []; ecModel.eachSeries(function(seriesModel) { var sameSeries = targetSeriesModel === seriesModel; var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.master) coordSys = coordSys.master; if (!(blurScope === "series" && !sameSeries || blurScope === "coordinateSystem" && !(coordSys && targetCoordSys ? coordSys === targetCoordSys : sameSeries) || focus === "series" && sameSeries)) { api.getViewOfSeriesModel(seriesModel).group.traverse(function(child) { if (child.__highByOuter && sameSeries && focus === "self") return; singleEnterBlur(child); }); if (isArrayLike(focus)) leaveBlurOfIndices(seriesModel.getData(), focus); else if (isObject$3(focus)) { var dataTypes = keys(focus); for (var d = 0; d < dataTypes.length; d++) leaveBlurOfIndices(seriesModel.getData(dataTypes[d]), focus[dataTypes[d]]); } blurredSeries.push(seriesModel); getComponentStates(seriesModel).isBlured = true; } }); ecModel.eachComponent(function(componentType, componentModel) { if (componentType === "series") return; var view = api.getViewOfComponentModel(componentModel); if (view && view.toggleBlurSeries) view.toggleBlurSeries(blurredSeries, true, ecModel); }); } function blurComponent(componentMainType, componentIndex, api) { if (componentMainType == null || componentIndex == null) return; var componentModel = api.getModel().getComponent(componentMainType, componentIndex); if (!componentModel) return; getComponentStates(componentModel).isBlured = true; var view = api.getViewOfComponentModel(componentModel); if (!view || !view.focusBlurEnabled) return; view.group.traverse(function(child) { singleEnterBlur(child); }); } function blurSeriesFromHighlightPayload(seriesModel, payload, api) { var seriesIndex = seriesModel.seriesIndex; var data = seriesModel.getData(payload.dataType); if (!data) { error("Unknown dataType " + payload.dataType); return; } var dataIndex = queryDataIndex(data, payload); dataIndex = (isArray$1(dataIndex) ? dataIndex[0] : dataIndex) || 0; var el = data.getItemGraphicEl(dataIndex); if (!el) { var count = data.count(); var current = 0; while (!el && current < count) el = data.getItemGraphicEl(current++); } if (el) { var ecData = getECData(el); blurSeries(seriesIndex, ecData.focus, ecData.blurScope, api); } else { var focus_1 = seriesModel.get(["emphasis", "focus"]); var blurScope = seriesModel.get(["emphasis", "blurScope"]); if (focus_1 != null) blurSeries(seriesIndex, focus_1, blurScope, api); } } function findComponentHighDownDispatchers(componentMainType, componentIndex, name, api) { var ret = { focusSelf: false, dispatchers: null }; if (componentMainType == null || componentMainType === "series" || componentIndex == null || name == null) return ret; var componentModel = api.getModel().getComponent(componentMainType, componentIndex); if (!componentModel) return ret; var view = api.getViewOfComponentModel(componentModel); if (!view || !view.findHighDownDispatchers) return ret; var dispatchers = view.findHighDownDispatchers(name); var focusSelf; for (var i = 0; i < dispatchers.length; i++) { if (!isHighDownDispatcher(dispatchers[i])) error("param should be highDownDispatcher"); if (getECData(dispatchers[i]).focus === "self") { focusSelf = true; break; } } return { focusSelf, dispatchers }; } function handleGlobalMouseOverForHighDown(dispatcher, e, api) { if (!isHighDownDispatcher(dispatcher)) error("param should be highDownDispatcher"); var ecData = getECData(dispatcher); var _a = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api), dispatchers = _a.dispatchers, focusSelf = _a.focusSelf; if (dispatchers) { if (focusSelf) blurComponent(ecData.componentMainType, ecData.componentIndex, api); each$12(dispatchers, function(dispatcher) { return enterEmphasisWhenMouseOver(dispatcher, e); }); } else { blurSeries(ecData.seriesIndex, ecData.focus, ecData.blurScope, api); if (ecData.focus === "self") blurComponent(ecData.componentMainType, ecData.componentIndex, api); enterEmphasisWhenMouseOver(dispatcher, e); } } function handleGlobalMouseOutForHighDown(dispatcher, e, api) { if (!isHighDownDispatcher(dispatcher)) error("param should be highDownDispatcher"); allLeaveBlur(api); var ecData = getECData(dispatcher); var dispatchers = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api).dispatchers; if (dispatchers) each$12(dispatchers, function(dispatcher) { return leaveEmphasisWhenMouseOut(dispatcher, e); }); else leaveEmphasisWhenMouseOut(dispatcher, e); } function toggleSelectionFromPayload(seriesModel, payload, api) { if (!isSelectChangePayload(payload)) return; var dataType = payload.dataType; var dataIndex = queryDataIndex(seriesModel.getData(dataType), payload); if (!isArray$1(dataIndex)) dataIndex = [dataIndex]; seriesModel[payload.type === "toggleSelect" ? "toggleSelect" : payload.type === "select" ? "select" : "unselect"](dataIndex, dataType); } function updateSeriesElementSelection(seriesModel) { each$12(seriesModel.getAllData(), function(_a) { var data = _a.data, type = _a.type; data.eachItemGraphicEl(function(el, idx) { seriesModel.isSelected(idx, type) ? enterSelect(el) : leaveSelect(el); }); }); } function getAllSelectedIndices(ecModel) { var ret = []; ecModel.eachSeries(function(seriesModel) { each$12(seriesModel.getAllData(), function(_a) { _a.data; var type = _a.type; var dataIndices = seriesModel.getSelectedDataIndices(); if (dataIndices.length > 0) { var item = { dataIndex: dataIndices, seriesIndex: seriesModel.seriesIndex }; if (type != null) item.dataType = type; ret.push(item); } }); }); return ret; } /** * Enable the function that mouseover will trigger the emphasis state. * * NOTE: * This function should be used on the element with dataIndex, seriesIndex. * */ function enableHoverEmphasis(el, focus, blurScope) { setAsHighDownDispatcher(el, true); traverseUpdateState(el, setDefaultStateProxy); enableHoverFocus(el, focus, blurScope); } function disableHoverEmphasis(el) { setAsHighDownDispatcher(el, false); } function toggleHoverEmphasis(el, focus, blurScope, isDisabled) { isDisabled ? disableHoverEmphasis(el) : enableHoverEmphasis(el, focus, blurScope); } function enableHoverFocus(el, focus, blurScope) { var ecData = getECData(el); if (focus != null) { ecData.focus = focus; ecData.blurScope = blurScope; } else if (ecData.focus) ecData.focus = null; } var OTHER_STATES = [ "emphasis", "blur", "select" ]; var defaultStyleGetterMap = { itemStyle: "getItemStyle", lineStyle: "getLineStyle", areaStyle: "getAreaStyle" }; /** * Set emphasis/blur/selected states of element. */ function setStatesStylesFromModel(el, itemModel, styleType, getter) { styleType = styleType || "itemStyle"; for (var i = 0; i < OTHER_STATES.length; i++) { var stateName = OTHER_STATES[i]; var model = itemModel.getModel([stateName, styleType]); var state = el.ensureState(stateName); state.style = getter ? getter(model) : model[defaultStyleGetterMap[styleType]](); } } /** * * Set element as highlight / downplay dispatcher. * It will be checked when element received mouseover event or from highlight action. * It's in change of all highlight/downplay behavior of it's children. * * @param el * @param el.highDownSilentOnTouch * In touch device, mouseover event will be trigger on touchstart event * (see module:zrender/dom/HandlerProxy). By this mechanism, we can * conveniently use hoverStyle when tap on touch screen without additional * code for compatibility. * But if the chart/component has select feature, which usually also use * hoverStyle, there might be conflict between 'select-highlight' and * 'hover-highlight' especially when roam is enabled (see geo for example). * In this case, `highDownSilentOnTouch` should be used to disable * hover-highlight on touch device. * @param asDispatcher If `false`, do not set as "highDownDispatcher". */ function setAsHighDownDispatcher(el, asDispatcher) { var disable = asDispatcher === false; var extendedEl = el; if (el.highDownSilentOnTouch) extendedEl.__highDownSilentOnTouch = el.highDownSilentOnTouch; if (!disable || extendedEl.__highDownDispatcher) { extendedEl.__highByOuter = extendedEl.__highByOuter || 0; extendedEl.__highDownDispatcher = !disable; } } function isHighDownDispatcher(el) { return !!(el && el.__highDownDispatcher); } /** * Enable component highlight/downplay features: * + hover link (within the same name) * + focus blur in component */ function enableComponentHighDownFeatures(el, componentModel, componentHighDownName) { var ecData = getECData(el); ecData.componentMainType = componentModel.mainType; ecData.componentIndex = componentModel.componentIndex; ecData.componentHighDownName = componentHighDownName; } /** * Support highlight/downplay record on each elements. * For the case: hover highlight/downplay (legend, visualMap, ...) and * user triggered highlight/downplay should not conflict. * Only all of the highlightDigit cleared, return to normal. * @param {string} highlightKey * @return {number} highlightDigit */ function getHighlightDigit(highlightKey) { var highlightDigit = _highlightKeyMap[highlightKey]; if (highlightDigit == null && _highlightNextDigit <= 32) highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++; return highlightDigit; } function isSelectChangePayload(payload) { var payloadType = payload.type; return payloadType === "select" || payloadType === "unselect" || payloadType === "toggleSelect"; } function isHighDownPayload(payload) { var payloadType = payload.type; return payloadType === "highlight" || payloadType === "downplay"; } function savePathStates(el) { var store = getSavedStates(el); store.normalFill = el.style.fill; store.normalStroke = el.style.stroke; var selectState = el.states.select || {}; store.selectFill = selectState.style && selectState.style.fill || null; store.selectStroke = selectState.style && selectState.style.stroke || null; } //#endregion //#region node_modules/zrender/lib/tool/transformPath.js var CMD$2 = PathProxy.CMD; var points$2 = [ [], [], [] ]; var mathSqrt$2 = Math.sqrt; var mathAtan2 = Math.atan2; function transformPath(path, m) { if (!m) return; var data = path.data; var len = path.len(); var cmd; var nPoint; var i; var j; var k; var p; var M = CMD$2.M; var C = CMD$2.C; var L = CMD$2.L; var R = CMD$2.R; var A = CMD$2.A; var Q = CMD$2.Q; for (i = 0, j = 0; i < len;) { cmd = data[i++]; j = i; nPoint = 0; switch (cmd) { case M: nPoint = 1; break; case L: nPoint = 1; break; case C: nPoint = 3; break; case Q: nPoint = 2; break; case A: var x = m[4]; var y = m[5]; var sx = mathSqrt$2(m[0] * m[0] + m[1] * m[1]); var sy = mathSqrt$2(m[2] * m[2] + m[3] * m[3]); var angle = mathAtan2(-m[1] / sy, m[0] / sx); data[i] *= sx; data[i++] += x; data[i] *= sy; data[i++] += y; data[i++] *= sx; data[i++] *= sy; data[i++] += angle; data[i++] += angle; i += 2; j = i; break; case R: p[0] = data[i++]; p[1] = data[i++]; applyTransform$1(p, p, m); data[j++] = p[0]; data[j++] = p[1]; p[0] += data[i++]; p[1] += data[i++]; applyTransform$1(p, p, m); data[j++] = p[0]; data[j++] = p[1]; } for (k = 0; k < nPoint; k++) { var p_1 = points$2[k]; p_1[0] = data[i++]; p_1[1] = data[i++]; applyTransform$1(p_1, p_1, m); data[j++] = p_1[0]; data[j++] = p_1[1]; } } path.increaseVersion(); } //#endregion //#region node_modules/zrender/lib/tool/path.js var mathSqrt$1 = Math.sqrt; var mathSin$2 = Math.sin; var mathCos$2 = Math.cos; var PI$6 = Math.PI; function vMag(v) { return Math.sqrt(v[0] * v[0] + v[1] * v[1]); } function vRatio(u, v) { return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)); } function vAngle(u, v) { return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v)); } function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) { var psi = psiDeg * (PI$6 / 180); var xp = mathCos$2(psi) * (x1 - x2) / 2 + mathSin$2(psi) * (y1 - y2) / 2; var yp = -1 * mathSin$2(psi) * (x1 - x2) / 2 + mathCos$2(psi) * (y1 - y2) / 2; var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry); if (lambda > 1) { rx *= mathSqrt$1(lambda); ry *= mathSqrt$1(lambda); } var f = (fa === fs ? -1 : 1) * mathSqrt$1((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp))) || 0; var cxp = f * rx * yp / ry; var cyp = f * -ry * xp / rx; var cx = (x1 + x2) / 2 + mathCos$2(psi) * cxp - mathSin$2(psi) * cyp; var cy = (y1 + y2) / 2 + mathSin$2(psi) * cxp + mathCos$2(psi) * cyp; var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]); var u = [(xp - cxp) / rx, (yp - cyp) / ry]; var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry]; var dTheta = vAngle(u, v); if (vRatio(u, v) <= -1) dTheta = PI$6; if (vRatio(u, v) >= 1) dTheta = 0; if (dTheta < 0) { var n = Math.round(dTheta / PI$6 * 1e6) / 1e6; dTheta = PI$6 * 2 + n % 2 * PI$6; } path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs); } var commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi; var numberReg$1 = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; function createPathProxyFromString(data) { var path = new PathProxy(); if (!data) return path; var cpx = 0; var cpy = 0; var subpathX = cpx; var subpathY = cpy; var prevCmd; var CMD = PathProxy.CMD; var cmdList = data.match(commandReg); if (!cmdList) return path; for (var l = 0; l < cmdList.length; l++) { var cmdText = cmdList[l]; var cmdStr = cmdText.charAt(0); var cmd = void 0; var p = cmdText.match(numberReg$1) || []; var pLen = p.length; for (var i = 0; i < pLen; i++) p[i] = parseFloat(p[i]); var off = 0; while (off < pLen) { var ctlPtx = void 0; var ctlPty = void 0; var rx = void 0; var ry = void 0; var psi = void 0; var fa = void 0; var fs = void 0; var x1 = cpx; var y1 = cpy; var len = void 0; var pathData = void 0; switch (cmdStr) { case "l": cpx += p[off++]; cpy += p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "L": cpx = p[off++]; cpy = p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "m": cpx += p[off++]; cpy += p[off++]; cmd = CMD.M; path.addData(cmd, cpx, cpy); subpathX = cpx; subpathY = cpy; cmdStr = "l"; break; case "M": cpx = p[off++]; cpy = p[off++]; cmd = CMD.M; path.addData(cmd, cpx, cpy); subpathX = cpx; subpathY = cpy; cmdStr = "L"; break; case "h": cpx += p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "H": cpx = p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "v": cpy += p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "V": cpy = p[off++]; cmd = CMD.L; path.addData(cmd, cpx, cpy); break; case "C": cmd = CMD.C; path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]); cpx = p[off - 2]; cpy = p[off - 1]; break; case "c": cmd = CMD.C; path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy); cpx += p[off - 2]; cpy += p[off - 1]; break; case "S": ctlPtx = cpx; ctlPty = cpy; len = path.len(); pathData = path.data; if (prevCmd === CMD.C) { ctlPtx += cpx - pathData[len - 4]; ctlPty += cpy - pathData[len - 3]; } cmd = CMD.C; x1 = p[off++]; y1 = p[off++]; cpx = p[off++]; cpy = p[off++]; path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); break; case "s": ctlPtx = cpx; ctlPty = cpy; len = path.len(); pathData = path.data; if (prevCmd === CMD.C) { ctlPtx += cpx - pathData[len - 4]; ctlPty += cpy - pathData[len - 3]; } cmd = CMD.C; x1 = cpx + p[off++]; y1 = cpy + p[off++]; cpx += p[off++]; cpy += p[off++]; path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); break; case "Q": x1 = p[off++]; y1 = p[off++]; cpx = p[off++]; cpy = p[off++]; cmd = CMD.Q; path.addData(cmd, x1, y1, cpx, cpy); break; case "q": x1 = p[off++] + cpx; y1 = p[off++] + cpy; cpx += p[off++]; cpy += p[off++]; cmd = CMD.Q; path.addData(cmd, x1, y1, cpx, cpy); break; case "T": ctlPtx = cpx; ctlPty = cpy; len = path.len(); pathData = path.data; if (prevCmd === CMD.Q) { ctlPtx += cpx - pathData[len - 4]; ctlPty += cpy - pathData[len - 3]; } cpx = p[off++]; cpy = p[off++]; cmd = CMD.Q; path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); break; case "t": ctlPtx = cpx; ctlPty = cpy; len = path.len(); pathData = path.data; if (prevCmd === CMD.Q) { ctlPtx += cpx - pathData[len - 4]; ctlPty += cpy - pathData[len - 3]; } cpx += p[off++]; cpy += p[off++]; cmd = CMD.Q; path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); break; case "A": rx = p[off++]; ry = p[off++]; psi = p[off++]; fa = p[off++]; fs = p[off++]; x1 = cpx, y1 = cpy; cpx = p[off++]; cpy = p[off++]; cmd = CMD.A; processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path); break; case "a": rx = p[off++]; ry = p[off++]; psi = p[off++]; fa = p[off++]; fs = p[off++]; x1 = cpx, y1 = cpy; cpx += p[off++]; cpy += p[off++]; cmd = CMD.A; processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path); } } if (cmdStr === "z" || cmdStr === "Z") { cmd = CMD.Z; path.addData(cmd); cpx = subpathX; cpy = subpathY; } prevCmd = cmd; } path.toStatic(); return path; } var SVGPath = function(_super) { __extends(SVGPath, _super); function SVGPath() { return _super !== null && _super.apply(this, arguments) || this; } SVGPath.prototype.applyTransform = function(m) {}; return SVGPath; }(Path); function isPathProxy(path) { return path.setData != null; } function createPathOptions(str, opts) { var pathProxy = createPathProxyFromString(str); var innerOpts = extend({}, opts); innerOpts.buildPath = function(path) { var beProxy = isPathProxy(path); if (beProxy && path.canSave()) { path.appendPath(pathProxy); var ctx = path.getContext(); if (ctx) path.rebuildPath(ctx, 1); } else { var ctx = beProxy ? path.getContext() : path; if (ctx) pathProxy.rebuildPath(ctx, 1); } }; innerOpts.applyTransform = function(m) { transformPath(pathProxy, m); this.dirtyShape(); }; return innerOpts; } function createFromString(str, opts) { return new SVGPath(createPathOptions(str, opts)); } function extendFromString(str, defaultOpts) { var innerOpts = createPathOptions(str, defaultOpts); return function(_super) { __extends(Sub, _super); function Sub(opts) { var _this = _super.call(this, opts) || this; _this.applyTransform = innerOpts.applyTransform; _this.buildPath = innerOpts.buildPath; return _this; } return Sub; }(SVGPath); } function mergePath$1(pathEls, opts) { var pathList = []; var len = pathEls.length; for (var i = 0; i < len; i++) { var pathEl = pathEls[i]; pathList.push(pathEl.getUpdatedPathProxy(true)); } var pathBundle = new Path(opts); pathBundle.createPathProxy(); pathBundle.buildPath = function(path) { if (isPathProxy(path)) { path.appendPath(pathList); var ctx = path.getContext(); if (ctx) path.rebuildPath(ctx, 1); } }; return pathBundle; } function clonePath(sourcePath, opts) { opts = opts || {}; var path = new Path(); if (sourcePath.shape) path.setShape(sourcePath.shape); path.setStyle(sourcePath.style); if (opts.bakeTransform) transformPath(path.path, sourcePath.getComputedTransform()); else if (opts.toLocal) path.setLocalTransform(sourcePath.getComputedTransform()); else path.copyTransform(sourcePath); path.buildPath = sourcePath.buildPath; path.applyTransform = path.applyTransform; path.z = sourcePath.z; path.z2 = sourcePath.z2; path.zlevel = sourcePath.zlevel; return path; } //#endregion //#region node_modules/zrender/lib/graphic/shape/Circle.js var CircleShape = function() { function CircleShape() { this.cx = 0; this.cy = 0; this.r = 0; } return CircleShape; }(); var Circle = function(_super) { __extends(Circle, _super); function Circle(opts) { return _super.call(this, opts) || this; } Circle.prototype.getDefaultShape = function() { return new CircleShape(); }; Circle.prototype.buildPath = function(ctx, shape) { ctx.moveTo(shape.cx + shape.r, shape.cy); ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2); }; return Circle; }(Path); Circle.prototype.type = "circle"; //#endregion //#region node_modules/zrender/lib/graphic/shape/Ellipse.js var EllipseShape = function() { function EllipseShape() { this.cx = 0; this.cy = 0; this.rx = 0; this.ry = 0; } return EllipseShape; }(); var Ellipse = function(_super) { __extends(Ellipse, _super); function Ellipse(opts) { return _super.call(this, opts) || this; } Ellipse.prototype.getDefaultShape = function() { return new EllipseShape(); }; Ellipse.prototype.buildPath = function(ctx, shape) { var k = .5522848; var x = shape.cx; var y = shape.cy; var a = shape.rx; var b = shape.ry; var ox = a * k; var oy = b * k; ctx.moveTo(x - a, y); ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b); ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y); ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b); ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y); ctx.closePath(); }; return Ellipse; }(Path); Ellipse.prototype.type = "ellipse"; //#endregion //#region node_modules/zrender/lib/graphic/helper/roundSector.js var PI$5 = Math.PI; var PI2$3 = PI$5 * 2; var mathSin$1 = Math.sin; var mathCos$1 = Math.cos; var mathACos = Math.acos; var mathATan2 = Math.atan2; var mathAbs$2 = Math.abs; var mathSqrt = Math.sqrt; var mathMax$6 = Math.max; var mathMin$6 = Math.min; var e = 1e-4; function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { var dx10 = x1 - x0; var dy10 = y1 - y0; var dx32 = x3 - x2; var dy32 = y3 - y2; var t = dy32 * dx10 - dx32 * dy10; if (t * t < e) return; t = (dx32 * (y0 - y2) - dy32 * (x0 - x2)) / t; return [x0 + t * dx10, y0 + t * dy10]; } function computeCornerTangents(x0, y0, x1, y1, radius, cr, clockwise) { var x01 = x0 - x1; var y01 = y0 - y1; var lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01); var ox = lo * y01; var oy = -lo * x01; var x11 = x0 + ox; var y11 = y0 + oy; var x10 = x1 + ox; var y10 = y1 + oy; var x00 = (x11 + x10) / 2; var y00 = (y11 + y10) / 2; var dx = x10 - x11; var dy = y10 - y11; var d2 = dx * dx + dy * dy; var r = radius - cr; var s = x11 * y10 - x10 * y11; var d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax$6(0, r * r * d2 - s * s)); var cx0 = (s * dy - dx * d) / d2; var cy0 = (-s * dx - dy * d) / d2; var cx1 = (s * dy + dx * d) / d2; var cy1 = (-s * dx + dy * d) / d2; var dx0 = cx0 - x00; var dy0 = cy0 - y00; var dx1 = cx1 - x00; var dy1 = cy1 - y00; if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) { cx0 = cx1; cy0 = cy1; } return { cx: cx0, cy: cy0, x0: -ox, y0: -oy, x1: cx0 * (radius / r - 1), y1: cy0 * (radius / r - 1) }; } function normalizeCornerRadius(cr) { var arr; if (isArray$1(cr)) { var len = cr.length; if (!len) return cr; if (len === 1) arr = [ cr[0], cr[0], 0, 0 ]; else if (len === 2) arr = [ cr[0], cr[0], cr[1], cr[1] ]; else if (len === 3) arr = cr.concat(cr[2]); else arr = cr; } else arr = [ cr, cr, cr, cr ]; return arr; } function buildPath$1(ctx, shape) { var _a; var radius = mathMax$6(shape.r, 0); var innerRadius = mathMax$6(shape.r0 || 0, 0); var hasRadius = radius > 0; if (!hasRadius && !(innerRadius > 0)) return; if (!hasRadius) { radius = innerRadius; innerRadius = 0; } if (innerRadius > radius) { var tmp = radius; radius = innerRadius; innerRadius = tmp; } var startAngle = shape.startAngle, endAngle = shape.endAngle; if (isNaN(startAngle) || isNaN(endAngle)) return; var cx = shape.cx, cy = shape.cy; var clockwise = !!shape.clockwise; var arc = mathAbs$2(endAngle - startAngle); var mod = arc > PI2$3 && arc % PI2$3; mod > e && (arc = mod); if (!(radius > e)) ctx.moveTo(cx, cy); else if (arc > PI2$3 - e) { ctx.moveTo(cx + radius * mathCos$1(startAngle), cy + radius * mathSin$1(startAngle)); ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise); if (innerRadius > e) { ctx.moveTo(cx + innerRadius * mathCos$1(endAngle), cy + innerRadius * mathSin$1(endAngle)); ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise); } } else { var icrStart = void 0; var icrEnd = void 0; var ocrStart = void 0; var ocrEnd = void 0; var ocrs = void 0; var ocre = void 0; var icrs = void 0; var icre = void 0; var ocrMax = void 0; var icrMax = void 0; var limitedOcrMax = void 0; var limitedIcrMax = void 0; var xre = void 0; var yre = void 0; var xirs = void 0; var yirs = void 0; var xrs = radius * mathCos$1(startAngle); var yrs = radius * mathSin$1(startAngle); var xire = innerRadius * mathCos$1(endAngle); var yire = innerRadius * mathSin$1(endAngle); var hasArc = arc > e; if (hasArc) { var cornerRadius = shape.cornerRadius; if (cornerRadius) _a = normalizeCornerRadius(cornerRadius), icrStart = _a[0], icrEnd = _a[1], ocrStart = _a[2], ocrEnd = _a[3]; var halfRd = mathAbs$2(radius - innerRadius) / 2; ocrs = mathMin$6(halfRd, ocrStart); ocre = mathMin$6(halfRd, ocrEnd); icrs = mathMin$6(halfRd, icrStart); icre = mathMin$6(halfRd, icrEnd); limitedOcrMax = ocrMax = mathMax$6(ocrs, ocre); limitedIcrMax = icrMax = mathMax$6(icrs, icre); if (ocrMax > e || icrMax > e) { xre = radius * mathCos$1(endAngle); yre = radius * mathSin$1(endAngle); xirs = innerRadius * mathCos$1(startAngle); yirs = innerRadius * mathSin$1(startAngle); if (arc < PI$5) { var it_1 = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire); if (it_1) { var x0 = xrs - it_1[0]; var y0 = yrs - it_1[1]; var x1 = xre - it_1[0]; var y1 = yre - it_1[1]; var a = 1 / mathSin$1(mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2); var b = mathSqrt(it_1[0] * it_1[0] + it_1[1] * it_1[1]); limitedOcrMax = mathMin$6(ocrMax, (radius - b) / (a + 1)); limitedIcrMax = mathMin$6(icrMax, (innerRadius - b) / (a - 1)); } } } } if (!hasArc) ctx.moveTo(cx + xrs, cy + yrs); else if (limitedOcrMax > e) { var crStart = mathMin$6(ocrStart, limitedOcrMax); var crEnd = mathMin$6(ocrEnd, limitedOcrMax); var ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, crStart, clockwise); var ct1 = computeCornerTangents(xre, yre, xire, yire, radius, crEnd, clockwise); ctx.moveTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0); if (limitedOcrMax < ocrMax && crStart === crEnd) ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedOcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise); else { crStart > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crStart, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise); ctx.arc(cx, cy, radius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), !clockwise); crEnd > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crEnd, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise); } } else { ctx.moveTo(cx + xrs, cy + yrs); ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise); } if (!(innerRadius > e) || !hasArc) ctx.lineTo(cx + xire, cy + yire); else if (limitedIcrMax > e) { var crStart = mathMin$6(icrStart, limitedIcrMax); var crEnd = mathMin$6(icrEnd, limitedIcrMax); var ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -crEnd, clockwise); var ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -crStart, clockwise); ctx.lineTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0); if (limitedIcrMax < icrMax && crStart === crEnd) ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedIcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise); else { crEnd > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crEnd, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise); ctx.arc(cx, cy, innerRadius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), clockwise); crStart > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crStart, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise); } } else { ctx.lineTo(cx + xire, cy + yire); ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise); } } ctx.closePath(); } //#endregion //#region node_modules/zrender/lib/graphic/shape/Sector.js var SectorShape = function() { function SectorShape() { this.cx = 0; this.cy = 0; this.r0 = 0; this.r = 0; this.startAngle = 0; this.endAngle = Math.PI * 2; this.clockwise = true; this.cornerRadius = 0; } return SectorShape; }(); var Sector = function(_super) { __extends(Sector, _super); function Sector(opts) { return _super.call(this, opts) || this; } Sector.prototype.getDefaultShape = function() { return new SectorShape(); }; Sector.prototype.buildPath = function(ctx, shape) { buildPath$1(ctx, shape); }; Sector.prototype.isZeroArea = function() { return this.shape.startAngle === this.shape.endAngle || this.shape.r === this.shape.r0; }; return Sector; }(Path); Sector.prototype.type = "sector"; //#endregion //#region node_modules/zrender/lib/graphic/shape/Ring.js var RingShape = function() { function RingShape() { this.cx = 0; this.cy = 0; this.r = 0; this.r0 = 0; } return RingShape; }(); var Ring = function(_super) { __extends(Ring, _super); function Ring(opts) { return _super.call(this, opts) || this; } Ring.prototype.getDefaultShape = function() { return new RingShape(); }; Ring.prototype.buildPath = function(ctx, shape) { var x = shape.cx; var y = shape.cy; var PI2 = Math.PI * 2; ctx.moveTo(x + shape.r, y); ctx.arc(x, y, shape.r, 0, PI2, false); ctx.moveTo(x + shape.r0, y); ctx.arc(x, y, shape.r0, 0, PI2, true); }; return Ring; }(Path); Ring.prototype.type = "ring"; //#endregion //#region node_modules/zrender/lib/graphic/helper/smoothBezier.js function smoothBezier(points, smooth, isLoop, constraint) { var cps = []; var v = []; var v1 = []; var v2 = []; var prevPoint; var nextPoint; var min; var max; if (constraint) { min = [Infinity, Infinity]; max = [-Infinity, -Infinity]; for (var i = 0, len = points.length; i < len; i++) { min$1(min, min, points[i]); max$1(max, max, points[i]); } min$1(min, min, constraint[0]); max$1(max, max, constraint[1]); } for (var i = 0, len = points.length; i < len; i++) { var point = points[i]; if (isLoop) { prevPoint = points[i ? i - 1 : len - 1]; nextPoint = points[(i + 1) % len]; } else if (i === 0 || i === len - 1) { cps.push(clone$3(points[i])); continue; } else { prevPoint = points[i - 1]; nextPoint = points[i + 1]; } sub(v, nextPoint, prevPoint); scale$1(v, v, smooth); var d0 = distance(point, prevPoint); var d1 = distance(point, nextPoint); var sum = d0 + d1; if (sum !== 0) { d0 /= sum; d1 /= sum; } scale$1(v1, v, -d0); scale$1(v2, v, d1); var cp0 = add([], point, v1); var cp1 = add([], point, v2); if (constraint) { max$1(cp0, cp0, min); min$1(cp0, cp0, max); max$1(cp1, cp1, min); min$1(cp1, cp1, max); } cps.push(cp0); cps.push(cp1); } if (isLoop) cps.push(cps.shift()); return cps; } //#endregion //#region node_modules/zrender/lib/graphic/helper/poly.js function buildPath(ctx, shape, closePath) { var smooth = shape.smooth; var points = shape.points; if (points && points.length >= 2) { if (smooth) { var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint); ctx.moveTo(points[0][0], points[0][1]); var len = points.length; for (var i = 0; i < (closePath ? len : len - 1); i++) { var cp1 = controlPoints[i * 2]; var cp2 = controlPoints[i * 2 + 1]; var p = points[(i + 1) % len]; ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]); } } else { ctx.moveTo(points[0][0], points[0][1]); for (var i = 1, l = points.length; i < l; i++) ctx.lineTo(points[i][0], points[i][1]); } closePath && ctx.closePath(); } } //#endregion //#region node_modules/zrender/lib/graphic/shape/Polygon.js var PolygonShape = function() { function PolygonShape() { this.points = null; this.smooth = 0; this.smoothConstraint = null; } return PolygonShape; }(); var Polygon = function(_super) { __extends(Polygon, _super); function Polygon(opts) { return _super.call(this, opts) || this; } Polygon.prototype.getDefaultShape = function() { return new PolygonShape(); }; Polygon.prototype.buildPath = function(ctx, shape) { buildPath(ctx, shape, true); }; return Polygon; }(Path); Polygon.prototype.type = "polygon"; //#endregion //#region node_modules/zrender/lib/graphic/shape/Polyline.js var PolylineShape = function() { function PolylineShape() { this.points = null; this.percent = 1; this.smooth = 0; this.smoothConstraint = null; } return PolylineShape; }(); var Polyline$1 = function(_super) { __extends(Polyline, _super); function Polyline(opts) { return _super.call(this, opts) || this; } Polyline.prototype.getDefaultStyle = function() { return { stroke: "#000", fill: null }; }; Polyline.prototype.getDefaultShape = function() { return new PolylineShape(); }; Polyline.prototype.buildPath = function(ctx, shape) { buildPath(ctx, shape, false); }; return Polyline; }(Path); Polyline$1.prototype.type = "polyline"; //#endregion //#region node_modules/zrender/lib/graphic/shape/Line.js var subPixelOptimizeOutputShape = {}; var LineShape = function() { function LineShape() { this.x1 = 0; this.y1 = 0; this.x2 = 0; this.y2 = 0; this.percent = 1; } return LineShape; }(); var Line$1 = function(_super) { __extends(Line, _super); function Line(opts) { return _super.call(this, opts) || this; } Line.prototype.getDefaultStyle = function() { return { stroke: "#000", fill: null }; }; Line.prototype.getDefaultShape = function() { return new LineShape(); }; Line.prototype.buildPath = function(ctx, shape) { var x1; var y1; var x2; var y2; if (this.subPixelOptimize) { var optimizedShape = subPixelOptimizeLine$1(subPixelOptimizeOutputShape, shape, this.style); x1 = optimizedShape.x1; y1 = optimizedShape.y1; x2 = optimizedShape.x2; y2 = optimizedShape.y2; } else { x1 = shape.x1; y1 = shape.y1; x2 = shape.x2; y2 = shape.y2; } var percent = shape.percent; if (percent === 0) return; ctx.moveTo(x1, y1); if (percent < 1) { x2 = x1 * (1 - percent) + x2 * percent; y2 = y1 * (1 - percent) + y2 * percent; } ctx.lineTo(x2, y2); }; Line.prototype.pointAt = function(p) { var shape = this.shape; return [shape.x1 * (1 - p) + shape.x2 * p, shape.y1 * (1 - p) + shape.y2 * p]; }; return Line; }(Path); Line$1.prototype.type = "line"; //#endregion //#region node_modules/zrender/lib/graphic/shape/BezierCurve.js var out = []; var BezierCurveShape = function() { function BezierCurveShape() { this.x1 = 0; this.y1 = 0; this.x2 = 0; this.y2 = 0; this.cpx1 = 0; this.cpy1 = 0; this.percent = 1; } return BezierCurveShape; }(); function someVectorAt(shape, t, isTangent) { var cpx2 = shape.cpx2; var cpy2 = shape.cpy2; if (cpx2 != null || cpy2 != null) return [(isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)]; else return [(isTangent ? quadraticDerivativeAt : quadraticAt$1)(shape.x1, shape.cpx1, shape.x2, t), (isTangent ? quadraticDerivativeAt : quadraticAt$1)(shape.y1, shape.cpy1, shape.y2, t)]; } var BezierCurve = function(_super) { __extends(BezierCurve, _super); function BezierCurve(opts) { return _super.call(this, opts) || this; } BezierCurve.prototype.getDefaultStyle = function() { return { stroke: "#000", fill: null }; }; BezierCurve.prototype.getDefaultShape = function() { return new BezierCurveShape(); }; BezierCurve.prototype.buildPath = function(ctx, shape) { var x1 = shape.x1; var y1 = shape.y1; var x2 = shape.x2; var y2 = shape.y2; var cpx1 = shape.cpx1; var cpy1 = shape.cpy1; var cpx2 = shape.cpx2; var cpy2 = shape.cpy2; var percent = shape.percent; if (percent === 0) return; ctx.moveTo(x1, y1); if (cpx2 == null || cpy2 == null) { if (percent < 1) { quadraticSubdivide(x1, cpx1, x2, percent, out); cpx1 = out[1]; x2 = out[2]; quadraticSubdivide(y1, cpy1, y2, percent, out); cpy1 = out[1]; y2 = out[2]; } ctx.quadraticCurveTo(cpx1, cpy1, x2, y2); } else { if (percent < 1) { cubicSubdivide(x1, cpx1, cpx2, x2, percent, out); cpx1 = out[1]; cpx2 = out[2]; x2 = out[3]; cubicSubdivide(y1, cpy1, cpy2, y2, percent, out); cpy1 = out[1]; cpy2 = out[2]; y2 = out[3]; } ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); } }; BezierCurve.prototype.pointAt = function(t) { return someVectorAt(this.shape, t, false); }; BezierCurve.prototype.tangentAt = function(t) { var p = someVectorAt(this.shape, t, true); return normalize$2(p, p); }; return BezierCurve; }(Path); BezierCurve.prototype.type = "bezier-curve"; //#endregion //#region node_modules/zrender/lib/graphic/shape/Arc.js var ArcShape = function() { function ArcShape() { this.cx = 0; this.cy = 0; this.r = 0; this.startAngle = 0; this.endAngle = Math.PI * 2; this.clockwise = true; } return ArcShape; }(); var Arc = function(_super) { __extends(Arc, _super); function Arc(opts) { return _super.call(this, opts) || this; } Arc.prototype.getDefaultStyle = function() { return { stroke: "#000", fill: null }; }; Arc.prototype.getDefaultShape = function() { return new ArcShape(); }; Arc.prototype.buildPath = function(ctx, shape) { var x = shape.cx; var y = shape.cy; var r = Math.max(shape.r, 0); var startAngle = shape.startAngle; var endAngle = shape.endAngle; var clockwise = shape.clockwise; var unitX = Math.cos(startAngle); var unitY = Math.sin(startAngle); ctx.moveTo(unitX * r + x, unitY * r + y); ctx.arc(x, y, r, startAngle, endAngle, !clockwise); }; return Arc; }(Path); Arc.prototype.type = "arc"; //#endregion //#region node_modules/zrender/lib/graphic/CompoundPath.js var CompoundPath = function(_super) { __extends(CompoundPath, _super); function CompoundPath() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "compound"; return _this; } CompoundPath.prototype._updatePathDirty = function() { var paths = this.shape.paths; var dirtyPath = this.shapeChanged(); for (var i = 0; i < paths.length; i++) dirtyPath = dirtyPath || paths[i].shapeChanged(); if (dirtyPath) this.dirtyShape(); }; CompoundPath.prototype.beforeBrush = function() { this._updatePathDirty(); var paths = this.shape.paths || []; var scale = this.getGlobalScale(); for (var i = 0; i < paths.length; i++) { if (!paths[i].path) paths[i].createPathProxy(); paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold); } }; CompoundPath.prototype.buildPath = function(ctx, shape) { var paths = shape.paths || []; for (var i = 0; i < paths.length; i++) paths[i].buildPath(ctx, paths[i].shape, true); }; CompoundPath.prototype.afterBrush = function() { var paths = this.shape.paths || []; for (var i = 0; i < paths.length; i++) paths[i].pathUpdated(); }; CompoundPath.prototype.getBoundingRect = function() { this._updatePathDirty.call(this); return Path.prototype.getBoundingRect.call(this); }; return CompoundPath; }(Path); //#endregion //#region node_modules/zrender/lib/graphic/Gradient.js var Gradient = function() { function Gradient(colorStops) { this.colorStops = colorStops || []; } Gradient.prototype.addColorStop = function(offset, color) { this.colorStops.push({ offset, color }); }; return Gradient; }(); //#endregion //#region node_modules/zrender/lib/graphic/LinearGradient.js var LinearGradient = function(_super) { __extends(LinearGradient, _super); function LinearGradient(x, y, x2, y2, colorStops, globalCoord) { var _this = _super.call(this, colorStops) || this; _this.x = x == null ? 0 : x; _this.y = y == null ? 0 : y; _this.x2 = x2 == null ? 1 : x2; _this.y2 = y2 == null ? 0 : y2; _this.type = "linear"; _this.global = globalCoord || false; return _this; } return LinearGradient; }(Gradient); //#endregion //#region node_modules/zrender/lib/graphic/RadialGradient.js var RadialGradient = function(_super) { __extends(RadialGradient, _super); function RadialGradient(x, y, r, colorStops, globalCoord) { var _this = _super.call(this, colorStops) || this; _this.x = x == null ? .5 : x; _this.y = y == null ? .5 : y; _this.r = r == null ? .5 : r; _this.type = "radial"; _this.global = globalCoord || false; return _this; } return RadialGradient; }(Gradient); //#endregion //#region node_modules/zrender/lib/core/OrientedBoundingRect.js var mathMin$5 = Math.min; var mathMax$5 = Math.max; var mathAbs$1 = Math.abs; var _extent = [0, 0]; var _extent2 = [0, 0]; var _intersectCtx = createIntersectContext(); var _minTv = _intersectCtx.minTv; var _maxTv = _intersectCtx.maxTv; var OrientedBoundingRect = function() { function OrientedBoundingRect(rect, transform) { this._corners = []; this._axes = []; this._origin = [0, 0]; for (var i = 0; i < 4; i++) this._corners[i] = new Point(); for (var i = 0; i < 2; i++) this._axes[i] = new Point(); if (rect) this.fromBoundingRect(rect, transform); } OrientedBoundingRect.prototype.fromBoundingRect = function(rect, transform) { var corners = this._corners; var axes = this._axes; var x = rect.x; var y = rect.y; var x2 = x + rect.width; var y2 = y + rect.height; corners[0].set(x, y); corners[1].set(x2, y); corners[2].set(x2, y2); corners[3].set(x, y2); if (transform) for (var i = 0; i < 4; i++) corners[i].transform(transform); Point.sub(axes[0], corners[1], corners[0]); Point.sub(axes[1], corners[3], corners[0]); axes[0].normalize(); axes[1].normalize(); for (var i = 0; i < 2; i++) this._origin[i] = axes[i].dot(corners[0]); }; OrientedBoundingRect.prototype.intersect = function(other, mtv, opt) { var overlapped = true; var noMtv = !mtv; if (mtv) Point.set(mtv, 0, 0); _intersectCtx.reset(opt, !noMtv); if (!this._intersectCheckOneSide(this, other, noMtv, 1)) { overlapped = false; if (noMtv) return overlapped; } if (!this._intersectCheckOneSide(other, this, noMtv, -1)) { overlapped = false; if (noMtv) return overlapped; } if (!noMtv && !_intersectCtx.negativeSize) Point.copy(mtv, overlapped ? _intersectCtx.useDir ? _intersectCtx.dirMinTv : _minTv : _maxTv); return overlapped; }; OrientedBoundingRect.prototype._intersectCheckOneSide = function(self, other, noMtv, inverse) { var overlapped = true; for (var i = 0; i < 2; i++) { var axis = self._axes[i]; self._getProjMinMaxOnAxis(i, self._corners, _extent); self._getProjMinMaxOnAxis(i, other._corners, _extent2); if (_intersectCtx.negativeSize || _extent[1] < _extent2[0] || _extent[0] > _extent2[1]) { overlapped = false; if (_intersectCtx.negativeSize || noMtv) return overlapped; var dist0 = mathAbs$1(_extent2[0] - _extent[1]); var dist1 = mathAbs$1(_extent[0] - _extent2[1]); if (mathMin$5(dist0, dist1) > _maxTv.len()) { if (dist0 < dist1) Point.scale(_maxTv, axis, -dist0 * inverse); else Point.scale(_maxTv, axis, dist1 * inverse); } } else if (!noMtv) { var dist0 = mathAbs$1(_extent2[0] - _extent[1]); var dist1 = mathAbs$1(_extent[0] - _extent2[1]); if (_intersectCtx.useDir || mathMin$5(dist0, dist1) < _minTv.len()) { if (dist0 < dist1 || !_intersectCtx.bidirectional) { Point.scale(_minTv, axis, dist0 * inverse); if (_intersectCtx.useDir) _intersectCtx.calcDirMTV(); } if (dist0 >= dist1 || !_intersectCtx.bidirectional) { Point.scale(_minTv, axis, -dist1 * inverse); if (_intersectCtx.useDir) _intersectCtx.calcDirMTV(); } } } } return overlapped; }; OrientedBoundingRect.prototype._getProjMinMaxOnAxis = function(dim, corners, out) { var axis = this._axes[dim]; var origin = this._origin; var proj = corners[0].dot(axis) + origin[dim]; var min = proj; var max = proj; for (var i = 1; i < corners.length; i++) { var proj_1 = corners[i].dot(axis) + origin[dim]; min = mathMin$5(proj_1, min); max = mathMax$5(proj_1, max); } out[0] = min + _intersectCtx.touchThreshold; out[1] = max - _intersectCtx.touchThreshold; _intersectCtx.negativeSize = out[1] < out[0]; }; return OrientedBoundingRect; }(); //#endregion //#region node_modules/zrender/lib/graphic/IncrementalDisplayable.js var m = []; var IncrementalDisplayable = function(_super) { __extends(IncrementalDisplayable, _super); function IncrementalDisplayable() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.notClear = true; _this.incremental = 1; _this._displayables = []; _this._temporaryDisplayables = []; _this._cursor = 0; return _this; } IncrementalDisplayable.prototype.traverse = function(cb, context) { cb.call(context, this); }; IncrementalDisplayable.prototype.useStyle = function() { this.style = {}; }; IncrementalDisplayable.prototype._useHoverStyle = function() { this.__hoverStyle = null; }; IncrementalDisplayable.prototype.getCursor = function() { return this._cursor; }; IncrementalDisplayable.prototype.innerAfterBrush = function() { this._cursor = this._displayables.length; }; IncrementalDisplayable.prototype.clearDisplaybles = function() { this._displayables = []; this._temporaryDisplayables = []; this._cursor = 0; this.markRedraw(); this.notClear = false; }; IncrementalDisplayable.prototype.clearTemporalDisplayables = function() { this._temporaryDisplayables = []; }; IncrementalDisplayable.prototype.addDisplayable = function(displayable, notPersistent) { if (notPersistent) this._temporaryDisplayables.push(displayable); else this._displayables.push(displayable); this.markRedraw(); }; IncrementalDisplayable.prototype.addDisplayables = function(displayables, notPersistent) { notPersistent = notPersistent || false; for (var i = 0; i < displayables.length; i++) this.addDisplayable(displayables[i], notPersistent); }; IncrementalDisplayable.prototype.getDisplayables = function() { return this._displayables; }; IncrementalDisplayable.prototype.getTemporalDisplayables = function() { return this._temporaryDisplayables; }; IncrementalDisplayable.prototype.eachPendingDisplayable = function(cb) { for (var i = this._cursor; i < this._displayables.length; i++) cb && cb(this._displayables[i]); for (var i = 0; i < this._temporaryDisplayables.length; i++) cb && cb(this._temporaryDisplayables[i]); }; IncrementalDisplayable.prototype.update = function() { this.updateTransform(); for (var i = this._cursor; i < this._displayables.length; i++) { var displayable = this._displayables[i]; displayable.parent = this; displayable.update(); displayable.parent = null; } for (var i = 0; i < this._temporaryDisplayables.length; i++) { var displayable = this._temporaryDisplayables[i]; displayable.parent = this; displayable.update(); displayable.parent = null; } }; IncrementalDisplayable.prototype.getBoundingRect = function() { if (!this._rect) { var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity); for (var i = 0; i < this._displayables.length; i++) { var displayable = this._displayables[i]; var childRect = displayable.getBoundingRect().clone(); if (displayable.needLocalTransform()) childRect.applyTransform(displayable.getLocalTransform(m)); rect.union(childRect); } this._rect = rect; } return this._rect; }; IncrementalDisplayable.prototype.contain = function(x, y) { var localPos = this.transformCoordToLocal(x, y); if (this.getBoundingRect().contain(localPos[0], localPos[1])) { for (var i = 0; i < this._displayables.length; i++) if (this._displayables[i].contain(x, y)) return true; } return false; }; return IncrementalDisplayable; }(Displayable); //#endregion //#region node_modules/echarts/lib/animation/basicTransition.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var transitionStore = makeInner(); /** * Return null if animation is disabled. */ function getAnimationConfig(animationType, animatableModel, dataIndex, extraOpts, extraDelayParams) { var animationPayload; if (animatableModel && animatableModel.ecModel) { var updatePayload = animatableModel.ecModel.getUpdatePayload(); animationPayload = updatePayload && updatePayload.animation; } var animationEnabled = animatableModel && animatableModel.isAnimationEnabled(); var isUpdate = animationType === "update"; if (animationEnabled) { var duration = void 0; var easing = void 0; var delay = void 0; if (extraOpts) { duration = retrieve2(extraOpts.duration, 200); easing = retrieve2(extraOpts.easing, "cubicOut"); delay = 0; } else { duration = animatableModel.getShallow(isUpdate ? "animationDurationUpdate" : "animationDuration"); easing = animatableModel.getShallow(isUpdate ? "animationEasingUpdate" : "animationEasing"); delay = animatableModel.getShallow(isUpdate ? "animationDelayUpdate" : "animationDelay"); } if (animationPayload) { animationPayload.duration != null && (duration = animationPayload.duration); animationPayload.easing != null && (easing = animationPayload.easing); animationPayload.delay != null && (delay = animationPayload.delay); } if (isFunction(delay)) delay = delay(dataIndex, extraDelayParams); if (isFunction(duration)) duration = duration(dataIndex); return { duration: duration || 0, delay, easing }; } else return null; } function animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) { var isFrom = false; var removeOpt; if (isFunction(dataIndex)) { during = cb; cb = dataIndex; dataIndex = null; } else if (isObject$3(dataIndex)) { cb = dataIndex.cb; during = dataIndex.during; isFrom = dataIndex.isFrom; removeOpt = dataIndex.removeOpt; dataIndex = dataIndex.dataIndex; } var isRemove = animationType === "leave"; if (!isRemove) el.stopAnimation("leave"); var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null); if (animationConfig && animationConfig.duration > 0) { var duration = animationConfig.duration; var animationDelay = animationConfig.delay; var animationEasing = animationConfig.easing; var animateConfig = { duration, delay: animationDelay || 0, easing: animationEasing, done: cb, force: !!cb || !!during, setToFinal: !isRemove, scope: animationType, during }; isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig); } else { el.stopAnimation(); !isFrom && el.attr(props); during && during(1); cb && cb(); } } /** * Update graphic element properties with or without animation according to the * configuration in series. * * Caution: this method will stop previous animation. * So do not use this method to one element twice before * animation starts, unless you know what you are doing. * @example * graphic.updateProps(el, { * position: [100, 100] * }, seriesModel, dataIndex, function () { console.log('Animation done!'); }); * // Or * graphic.updateProps(el, { * position: [100, 100] * }, seriesModel, function () { console.log('Animation done!'); }); */ function updateProps$1(el, props, animatableModel, dataIndex, cb, during) { animateOrSetProps("update", el, props, animatableModel, dataIndex, cb, during); } /** * Init graphic element properties with or without animation according to the * configuration in series. * * Caution: this method will stop previous animation. * So do not use this method to one element twice before * animation starts, unless you know what you are doing. */ function initProps(el, props, animatableModel, dataIndex, cb, during) { animateOrSetProps("enter", el, props, animatableModel, dataIndex, cb, during); } /** * If element is removed. * It can determine if element is having remove animation. */ function isElementRemoved(el) { if (!el.__zr) return true; for (var i = 0; i < el.animators.length; i++) if (el.animators[i].scope === "leave") return true; return false; } /** * Remove graphic element */ function removeElement(el, props, animatableModel, dataIndex, cb, during) { if (isElementRemoved(el)) return; animateOrSetProps("leave", el, props, animatableModel, dataIndex, cb, during); } function fadeOutDisplayable(el, animatableModel, dataIndex, done) { el.removeTextContent(); el.removeTextGuideLine(); removeElement(el, { style: { opacity: 0 } }, animatableModel, dataIndex, done); } function removeElementWithFadeOut(el, animatableModel, dataIndex) { function doRemove() { el.parent && el.parent.remove(el); } if (!el.isGroup) fadeOutDisplayable(el, animatableModel, dataIndex, doRemove); else el.traverse(function(disp) { if (!disp.isGroup) fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove); }); } /** * Save old style for style transition in universalTransition module. * It's used when element will be reused in each render. * For chart like map, heatmap, which will always create new element. * We don't need to save this because universalTransition can get old style from the old element */ function saveOldStyle(el) { transitionStore(el).oldStyle = el.style; } function getOldStyle(el) { return transitionStore(el).oldStyle; } //#endregion //#region node_modules/echarts/lib/util/graphic.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphic_exports$1 = /* @__PURE__ */ __exportAll({ Arc: () => Arc, BezierCurve: () => BezierCurve, BoundingRect: () => BoundingRect, Circle: () => Circle, CompoundPath: () => CompoundPath, Ellipse: () => Ellipse, Group: () => Group$3, HOVER_LAYER_FOR_INCREMENTAL: () => 2, HOVER_LAYER_FROM_THRESHOLD: () => 1, HOVER_LAYER_NO: () => 0, Image: () => ZRImage, IncrementalDisplayable: () => IncrementalDisplayable, Line: () => Line$1, LinearGradient: () => LinearGradient, OrientedBoundingRect: () => OrientedBoundingRect, Path: () => Path, Point: () => Point, Polygon: () => Polygon, Polyline: () => Polyline$1, RadialGradient: () => RadialGradient, Rect: () => Rect$2, Ring: () => Ring, Sector: () => Sector, Text: () => ZRText, WH: () => WH$2, XY: () => XY$2, applyTransform: () => applyTransform, calcZ2Range: () => calcZ2Range, clipPointsByRect: () => clipPointsByRect, clipRectByRect: () => clipRectByRect, createIcon: () => createIcon, decomposeTransform: () => decomposeTransform, ensureCopyRect: () => ensureCopyRect, ensureCopyTransform: () => ensureCopyTransform, expandOrShrinkRect: () => expandOrShrinkRect, extendPath: () => extendPath, extendShape: () => extendShape, getCurrentCanvasPainter: () => getCurrentCanvasPainter, getShapeClass: () => getShapeClass, getTransform: () => getTransform$1, groupTransition: () => groupTransition, initProps: () => initProps, isBoundingRectAxisAligned: () => isBoundingRectAxisAligned, isElementRemoved: () => isElementRemoved, lineLineIntersect: () => lineLineIntersect$1, linePolygonIntersect: () => linePolygonIntersect, makeImage: () => makeImage, makePath: () => makePath, mergePath: () => mergePath, payloadDisableAnimation: () => payloadDisableAnimation, registerShape: () => registerShape, removeElement: () => removeElement, removeElementWithFadeOut: () => removeElementWithFadeOut, resizePath: () => resizePath, retrieveZInfo: () => retrieveZInfo, setTooltipConfig: () => setTooltipConfig, subPixelOptimize: () => subPixelOptimize, subPixelOptimizeLine: () => subPixelOptimizeLine, subPixelOptimizeRect: () => subPixelOptimizeRect, transformDirection: () => transformDirection, traverseElements: () => traverseElements, traverseUpdateZ: () => traverseUpdateZ, updateProps: () => updateProps$1 }); var _customShapeMap = {}; var XY$2 = ["x", "y"]; var WH$2 = ["width", "height"]; /** * Extend shape with parameters */ function extendShape(opts) { return Path.extend(opts); } var extendPathFromString = extendFromString; /** * Extend path */ function extendPath(pathData, opts) { return extendPathFromString(pathData, opts); } /** * Register a user defined shape. * The shape class can be fetched by `getShapeClass` * This method will overwrite the registered shapes, including * the registered built-in shapes, if using the same `name`. * The shape can be used in `custom series` and * `graphic component` by declaring `{type: name}`. * * @param name * @param ShapeClass Can be generated by `extendShape`. */ function registerShape(name, ShapeClass) { _customShapeMap[name] = ShapeClass; } /** * Find shape class registered by `registerShape`. Usually used in * fetching user defined shape. * * [Caution]: * (1) This method **MUST NOT be used inside echarts !!!**, unless it is prepared * to use user registered shapes. * Because the built-in shape (see `getBuiltInShape`) will be registered by * `registerShape` by default. That enables users to get both built-in * shapes as well as the shapes belonging to themsleves. But users can overwrite * the built-in shapes by using names like 'circle', 'rect' via calling * `registerShape`. So the echarts inner featrues should not fetch shapes from here * in case that it is overwritten by users, except that some features, like * `custom series`, `graphic component`, do it deliberately. * * (2) In the features like `custom series`, `graphic component`, the user input * `{tpye: 'xxx'}` does not only specify shapes but also specify other graphic * elements like `'group'`, `'text'`, `'image'` or event `'path'`. Those names * are reserved names, that is, if some user registers a shape named `'image'`, * the shape will not be used. If we intending to add some more reserved names * in feature, that might bring break changes (disable some existing user shape * names). But that case probably rarely happens. So we don't make more mechanism * to resolve this issue here. * * @param name * @return The shape class. If not found, return nothing. */ function getShapeClass(name) { if (_customShapeMap.hasOwnProperty(name)) return _customShapeMap[name]; } /** * Create a path element from path data string * @param pathData * @param opts * @param rect * @param layout 'center' or 'cover' default to be cover */ function makePath(pathData, opts, rect, layout) { var path = createFromString(pathData, opts); if (rect) { if (layout === "center") rect = centerGraphic(rect, path.getBoundingRect()); resizePath(path, rect); } return path; } /** * Create a image element from image url * @param imageUrl image url * @param opts options * @param rect constrain rect * @param layout 'center' or 'cover'. Default to be 'cover' */ function makeImage(imageUrl, rect, layout) { var zrImg = new ZRImage({ style: { image: imageUrl, x: rect.x, y: rect.y, width: rect.width, height: rect.height }, onload: function(img) { if (layout === "center") { var boundingRect = { width: img.width, height: img.height }; zrImg.setStyle(centerGraphic(rect, boundingRect)); } } }); return zrImg; } /** * Get position of centered element in bounding box. * * @param rect element local bounding box * @param boundingRect constraint bounding box * @return element position containing x, y, width, and height */ function centerGraphic(rect, boundingRect) { var aspect = boundingRect.width / boundingRect.height; var width = rect.height * aspect; var height; if (width <= rect.width) height = rect.height; else { width = rect.width; height = width / aspect; } var cx = rect.x + rect.width / 2; var cy = rect.y + rect.height / 2; return { x: cx - width / 2, y: cy - height / 2, width, height }; } var mergePath = mergePath$1; /** * Resize a path to fit the rect * @param path * @param rect */ function resizePath(path, rect) { if (!path.applyTransform) return; var m = path.getBoundingRect().calculateTransform(rect); path.applyTransform(m); } /** * Sub pixel optimize line for canvas */ function subPixelOptimizeLine(shape, lineWidth) { subPixelOptimizeLine$1(shape, shape, { lineWidth }); return shape; } /** * Sub pixel optimize rect for canvas */ function subPixelOptimizeRect(shape, style) { subPixelOptimizeRect$1(shape, shape, style); return shape; } /** * Sub pixel optimize for canvas * * @param position Coordinate, such as x, y * @param lineWidth Should be nonnegative integer. * @param positiveOrNegative Default false (negative). * @return Optimized position. */ var subPixelOptimize = subPixelOptimize$1; /** * Get transform matrix of target (param target), * in coordinate of its ancestor (param ancestor) * * @param target * @param [ancestor] */ function getTransform$1(target, ancestor) { var mat = identity([]); while (target && target !== ancestor) { mul(mat, target.getLocalTransform(), mat); target = target.parent; } return mat; } /** * Apply transform to an vertex. * @param target [x, y] * @param transform Can be: * + Transform matrix: like [1, 0, 0, 1, 0, 0] * + {position, rotation, scale}, the same as `zrender/Transformable`. * @param invert Whether use invert matrix. * @return [x, y] */ function applyTransform(target, transform, invert$1) { if (transform && !isArrayLike(transform)) transform = Transformable.getLocalTransform(transform); if (invert$1) transform = invert([], transform); return applyTransform$1([], target, transform); } /** * @param direction 'left' 'right' 'top' 'bottom' * @param transform Transform matrix: like [1, 0, 0, 1, 0, 0] * @param invert Whether use invert matrix. * @return Transformed direction. 'left' 'right' 'top' 'bottom' */ function transformDirection(direction, transform, invert) { var hBase = transform[4] === 0 || transform[5] === 0 || transform[0] === 0 ? 1 : mathAbs$4(2 * transform[4] / transform[0]); var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : mathAbs$4(2 * transform[4] / transform[2]); var vertex = [direction === "left" ? -hBase : direction === "right" ? hBase : 0, direction === "top" ? -vBase : direction === "bottom" ? vBase : 0]; vertex = applyTransform(vertex, transform, invert); return mathAbs$4(vertex[0]) > mathAbs$4(vertex[1]) ? vertex[0] > 0 ? "right" : "left" : vertex[1] > 0 ? "bottom" : "top"; } function isNotGroup(el) { return !el.isGroup; } function isPath$1(el) { return el.shape != null; } /** * Apply group transition animation from g1 to g2. * If no animatableModel, no animation. */ function groupTransition(g1, g2, animatableModel) { if (!g1 || !g2) return; function getElMap(g) { var elMap = {}; g.traverse(function(el) { if (isNotGroup(el) && el.anid) elMap[el.anid] = el; }); return elMap; } function getAnimatableProps(el) { var obj = { x: el.x, y: el.y, rotation: el.rotation }; if (isPath$1(el)) obj.shape = clone$4(el.shape); return obj; } var elMap1 = getElMap(g1); g2.traverse(function(el) { if (isNotGroup(el) && el.anid) { var oldEl = elMap1[el.anid]; if (oldEl) { var newProp = getAnimatableProps(el); el.attr(getAnimatableProps(oldEl)); updateProps$1(el, newProp, animatableModel, getECData(el).dataIndex); } } }); } function clipPointsByRect(points, rect) { return map$1(points, function(point) { var x = point[0]; x = mathMax$9(x, rect.x); x = mathMin$9(x, rect.x + rect.width); var y = point[1]; y = mathMax$9(y, rect.y); y = mathMin$9(y, rect.y + rect.height); return [x, y]; }); } /** * Return a new clipped rect. If rect size are negative, return undefined. */ function clipRectByRect(targetRect, rect) { var x = mathMax$9(targetRect.x, rect.x); var x2 = mathMin$9(targetRect.x + targetRect.width, rect.x + rect.width); var y = mathMax$9(targetRect.y, rect.y); var y2 = mathMin$9(targetRect.y + targetRect.height, rect.y + rect.height); if (x2 >= x && y2 >= y) return { x, y, width: x2 - x, height: y2 - y }; } function createIcon(iconStr, opt, rect) { var innerOpts = extend({ rectHover: true }, opt); var style = innerOpts.style = { strokeNoScale: true }; rect = rect || { x: -1, y: -1, width: 2, height: 2 }; if (iconStr) return iconStr.indexOf("image://") === 0 ? (style.image = iconStr.slice(8), defaults(style, rect), new ZRImage(innerOpts)) : makePath(iconStr.replace("path://", ""), innerOpts, rect, "center"); } /** * Return `true` if the given line (line `a`) and the given polygon * are intersect. * Note that we do not count colinear as intersect here because no * requirement for that. We could do that if required in future. */ function linePolygonIntersect(a1x, a1y, a2x, a2y, points) { for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) { var p = points[i]; if (lineLineIntersect$1(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) return true; p2 = p; } } /** * Return `true` if the given two lines (line `a` and line `b`) * are intersect. * Note that we do not count colinear as intersect here because no * requirement for that. We could do that if required in future. */ function lineLineIntersect$1(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var mx = a2x - a1x; var my = a2y - a1y; var nx = b2x - b1x; var ny = b2y - b1y; var nmCrossProduct = crossProduct2d$1(nx, ny, mx, my); if (nearZero(nmCrossProduct)) return false; var b1a1x = a1x - b1x; var b1a1y = a1y - b1y; var q = crossProduct2d$1(b1a1x, b1a1y, mx, my) / nmCrossProduct; if (q < 0 || q > 1) return false; var p = crossProduct2d$1(b1a1x, b1a1y, nx, ny) / nmCrossProduct; if (p < 0 || p > 1) return false; return true; } /** * Cross product of 2-dimension vector. */ function crossProduct2d$1(x1, y1, x2, y2) { return x1 * y2 - x2 * y1; } function nearZero(val) { return val <= 1e-6 && val >= -1e-6; } /** * NOTE: * A negative-width/height rect (due to negative margins) is not supported; * it will be clampped to zero width/height. * Although negative-width/height rects can be defined reasonably following the * similar sense in CSS, but they are rarely used, hard to understand and complicated. * * @param rect Assume its width/height >= 0 if existing. * x/y/width/height is allowed to be NaN, * for the case that only x/width or y/height is intended to be computed. * @param delta * If be `number[]`, should be `[top, right, bottom, left]`, * which can be used in padding or margin case. * @see `normalizeCssArray` in `util/format.ts` * If be `number`, it means [delta, delta, delta, delta], * which can be used in lineWidth (borderWith) case, * [NOTICE]: commonly pass lineWidth / 2, following the convention that border is * half inside half outside of the rect. * @param shrinkOrExpand * `true` - shrink if `delta[i]` is positive, commmonly used in `padding` case. * `false` - expand if `delta[i]` is positive, commmonly used in `margin` case. (default) * @param noNegative * `true` - negative `delta[i]` will be clampped to 0. * `false` - No clamp to `delta`. (default). * @return The input `rect`. */ function expandOrShrinkRect(rect, delta, shrinkOrExpand, noNegative, minSize) { if (delta == null) return rect; else if (isNumber(delta)) _tmpExpandRectDelta[0] = _tmpExpandRectDelta[1] = _tmpExpandRectDelta[2] = _tmpExpandRectDelta[3] = delta; else { assert(delta.length === 4); _tmpExpandRectDelta[0] = delta[0]; _tmpExpandRectDelta[1] = delta[1]; _tmpExpandRectDelta[2] = delta[2]; _tmpExpandRectDelta[3] = delta[3]; } if (noNegative) { _tmpExpandRectDelta[0] = mathMax$9(0, _tmpExpandRectDelta[0]); _tmpExpandRectDelta[1] = mathMax$9(0, _tmpExpandRectDelta[1]); _tmpExpandRectDelta[2] = mathMax$9(0, _tmpExpandRectDelta[2]); _tmpExpandRectDelta[3] = mathMax$9(0, _tmpExpandRectDelta[3]); } if (shrinkOrExpand) { _tmpExpandRectDelta[0] = -_tmpExpandRectDelta[0]; _tmpExpandRectDelta[1] = -_tmpExpandRectDelta[1]; _tmpExpandRectDelta[2] = -_tmpExpandRectDelta[2]; _tmpExpandRectDelta[3] = -_tmpExpandRectDelta[3]; } expandRectOnOneDimension(rect, _tmpExpandRectDelta, "x", "width", 3, 1, minSize && minSize[0] || 0); expandRectOnOneDimension(rect, _tmpExpandRectDelta, "y", "height", 0, 2, minSize && minSize[1] || 0); return rect; } var _tmpExpandRectDelta = [ 0, 0, 0, 0 ]; function expandRectOnOneDimension(rect, delta, xy, wh, ltIdx, rbIdx, minSize) { var deltaSum = delta[rbIdx] + delta[ltIdx]; var oldSize = rect[wh]; rect[wh] += deltaSum; minSize = mathMax$9(0, mathMin$9(minSize, oldSize)); if (rect[wh] < minSize) { rect[wh] = minSize; rect[xy] += delta[ltIdx] >= 0 ? -delta[ltIdx] : delta[rbIdx] >= 0 ? oldSize + delta[rbIdx] : mathAbs$4(deltaSum) > 1e-8 ? (oldSize - minSize) * delta[ltIdx] / deltaSum : 0; } else rect[xy] -= delta[ltIdx]; } function setTooltipConfig(opt) { var itemTooltipOption = opt.itemTooltipOption; var componentModel = opt.componentModel; var itemName = opt.itemName; var itemTooltipOptionObj = isString(itemTooltipOption) ? { formatter: itemTooltipOption } : itemTooltipOption; var mainType = componentModel.mainType; var componentIndex = componentModel.componentIndex; var formatterParams = { componentType: mainType, name: itemName, $vars: ["name"] }; formatterParams[mainType + "Index"] = componentIndex; var formatterParamsExtra = opt.formatterParamsExtra; if (formatterParamsExtra) each$12(keys(formatterParamsExtra), function(key) { if (!hasOwn(formatterParams, key)) { formatterParams[key] = formatterParamsExtra[key]; formatterParams.$vars.push(key); } }); var ecData = getECData(opt.el); ecData.componentMainType = mainType; ecData.componentIndex = componentIndex; ecData.tooltipConfig = { name: itemName, option: defaults({ content: itemName, encodeHTMLContent: true, formatterParams }, itemTooltipOptionObj) }; } function traverseElement(el, cb) { var stopped; if (el.isGroup) stopped = cb(el); if (!stopped) el.traverse(cb); } function traverseElements(els, cb) { if (els) { if (isArray$1(els)) for (var i = 0; i < els.length; i++) traverseElement(els[i], cb); else traverseElement(els, cb); } } /** * After a boundingRect applying a `transform`, whether to be still parallel screen X and Y. */ function isBoundingRectAxisAligned(transform) { return !transform || mathAbs$4(transform[1]) < AXIS_ALIGN_EPSILON && mathAbs$4(transform[2]) < AXIS_ALIGN_EPSILON || mathAbs$4(transform[0]) < AXIS_ALIGN_EPSILON && mathAbs$4(transform[3]) < AXIS_ALIGN_EPSILON; } var AXIS_ALIGN_EPSILON = 1e-5; /** * Create or copy to the existing bounding rect to avoid modifying `source`. * * @usage * out.rect = ensureCopyRect(out.rect, sourceRect); */ function ensureCopyRect(target, source) { return target ? BoundingRect.copy(target, source) : source.clone(); } /** * Create or copy to the existing transform to avoid modifying `source`. * * [CAUTION]: transform is `NullUndefined` if no transform, following convention of zrender, * and enable to bypass some unnecessary calculation, since in most cases there is no transform. * * @usage * out.transform = ensureCopyTransform(out.transform, sourceTransform); */ function ensureCopyTransform(target, source) { return source ? copy(target || create$1(), source) : void 0; } function retrieveZInfo(model) { return { z: model.get("z") || 0, zlevel: model.get("zlevel") || 0 }; } /** * Assume all of the elements has the same `z` and `zlevel`. */ function calcZ2Range(el) { var max = -Infinity; var min = Infinity; traverseElement(el, function(el) { visitEl(el); visitEl(el.getTextContent()); visitEl(el.getTextGuideLine()); }); function visitEl(el) { if (!el || el.isGroup) return; var currentStates = el.currentStates; if (currentStates.length) for (var idx = 0; idx < currentStates.length; idx++) calcZ2(el.states[currentStates[idx]]); calcZ2(el); } function calcZ2(entity) { if (entity) { var z2 = entity.z2; if (z2 > max) max = z2; if (z2 < min) min = z2; } } if (min > max) min = max = 0; return { min, max }; } function traverseUpdateZ(el, z, zlevel) { doUpdateZ(el, z, zlevel, -Infinity); } function doUpdateZ(el, z, zlevel, maxZ2) { if (el.ignoreModelZ) return maxZ2; var label = el.getTextContent(); var labelLine = el.getTextGuideLine(); if (el.isGroup) { var children = el.childrenRef(); for (var i = 0; i < children.length; i++) maxZ2 = mathMax$9(doUpdateZ(children[i], z, zlevel, maxZ2), maxZ2); } else { el.z = z; el.zlevel = zlevel; maxZ2 = mathMax$9(el.z2 || 0, maxZ2); } if (label) { label.z = z; label.zlevel = zlevel; isFinite(maxZ2) && (label.z2 = maxZ2 + 2); } if (labelLine) { var textGuideLineConfig = el.textGuideLineConfig; labelLine.z = z; labelLine.zlevel = zlevel; isFinite(maxZ2) && (labelLine.z2 = maxZ2 + (textGuideLineConfig && textGuideLineConfig.showAbove ? 1 : -1)); } return maxZ2; } function payloadDisableAnimation(payload) { payload.animation = { duration: 0 }; return payload; } /** * Decompose an affine matrix to * x/y/scaleX/scaleY/rotation/skewX/skewY */ function decomposeTransform(out, mt) { mt ? copy(tmpDTR.transform, mt) : identity(tmpDTR.transform); tmpDTR.decomposeTransform(); copyTransform(out, tmpDTR); return out; } var tmpDTR = new Transformable(); tmpDTR.transform = create$1(); /** * If not canvas painter, return null/undefined. */ function getCurrentCanvasPainter(api) { var painter = api.getZr().painter; return painter.getType() === "canvas" ? painter : null; } registerShape("circle", Circle); registerShape("ellipse", Ellipse); registerShape("sector", Sector); registerShape("ring", Ring); registerShape("polygon", Polygon); registerShape("polyline", Polyline$1); registerShape("rect", Rect$2); registerShape("line", Line$1); registerShape("bezierCurve", BezierCurve); registerShape("arc", Arc); //#endregion //#region node_modules/echarts/lib/label/labelStyle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var EMPTY_OBJ = {}; function setLabelText(label, labelTexts) { for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; var text = labelTexts[stateName]; var state = label.ensureState(stateName); state.style = state.style || {}; state.style.text = text; } var oldStates = label.currentStates.slice(); label.clearStates(true); label.setStyle({ text: labelTexts.normal }); label.useStates(oldStates, true); } function getLabelText(opt, stateModels, interpolatedValue) { var labelFetcher = opt.labelFetcher; var labelDataIndex = opt.labelDataIndex; var labelDimIndex = opt.labelDimIndex; var normalModel = stateModels.normal; var baseText; if (labelFetcher) baseText = labelFetcher.getFormattedLabel(labelDataIndex, "normal", null, labelDimIndex, normalModel && normalModel.get("formatter"), interpolatedValue != null ? { interpolatedValue } : null); if (baseText == null) baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt, interpolatedValue) : opt.defaultText; var statesText = { normal: baseText }; for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; var stateModel = stateModels[stateName]; statesText[stateName] = retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, stateName, null, labelDimIndex, stateModel && stateModel.get("formatter")) : null, baseText); } return statesText; } function setLabelStyle(targetEl, labelStatesModels, opt, stateSpecified) { opt = opt || EMPTY_OBJ; var isSetOnText = targetEl instanceof ZRText; var needsCreateText = false; for (var i = 0; i < DISPLAY_STATES.length; i++) { var stateModel = labelStatesModels[DISPLAY_STATES[i]]; if (stateModel && stateModel.getShallow("show")) { needsCreateText = true; break; } } var textContent = isSetOnText ? targetEl : targetEl.getTextContent(); if (needsCreateText) { if (!isSetOnText) { if (!textContent) { textContent = new ZRText(); targetEl.setTextContent(textContent); } if (targetEl.stateProxy) textContent.stateProxy = targetEl.stateProxy; } var labelStatesTexts = getLabelText(opt, labelStatesModels); var normalModel = labelStatesModels.normal; var showNormal = !!normalModel.getShallow("show"); var normalStyle = createTextStyle$1(normalModel, stateSpecified && stateSpecified.normal, opt, false, !isSetOnText); normalStyle.text = labelStatesTexts.normal; if (!isSetOnText) targetEl.setTextConfig(createTextConfig(normalModel, opt, false)); for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; var stateModel = labelStatesModels[stateName]; if (stateModel) { var stateObj = textContent.ensureState(stateName); var stateShow = !!retrieve2(stateModel.getShallow("show"), showNormal); if (stateShow !== showNormal) stateObj.ignore = !stateShow; stateObj.style = createTextStyle$1(stateModel, stateSpecified && stateSpecified[stateName], opt, true, !isSetOnText); stateObj.style.text = labelStatesTexts[stateName]; if (!isSetOnText) { var targetElEmphasisState = targetEl.ensureState(stateName); targetElEmphasisState.textConfig = createTextConfig(stateModel, opt, true); } } } textContent.silent = !!normalModel.getShallow("silent"); if (textContent.style.x != null) normalStyle.x = textContent.style.x; if (textContent.style.y != null) normalStyle.y = textContent.style.y; textContent.ignore = !showNormal; textContent.useStyle(normalStyle); textContent.dirty(); if (opt.enableTextSetter) labelInner(textContent).setLabelText = function(interpolatedValue) { var labelStatesTexts = getLabelText(opt, labelStatesModels, interpolatedValue); setLabelText(textContent, labelStatesTexts); }; } else if (textContent) textContent.ignore = true; targetEl.dirty(); } function getLabelStatesModels(itemModel, labelName) { labelName = labelName || "label"; var statesModels = { normal: itemModel.getModel(labelName) }; for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; statesModels[stateName] = itemModel.getModel([stateName, labelName]); } return statesModels; } /** * Set basic textStyle properties. */ function createTextStyle$1(textStyleModel, specifiedTextStyle, opt, isNotNormal, isAttached) { var textStyle = {}; setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached); specifiedTextStyle && extend(textStyle, specifiedTextStyle); return textStyle; } function createTextConfig(textStyleModel, opt, isNotNormal) { opt = opt || {}; var textConfig = {}; var labelPosition; var labelRotate = textStyleModel.getShallow("rotate"); var labelDistance = retrieve2(textStyleModel.getShallow("distance"), isNotNormal ? null : 5); var labelOffset = textStyleModel.getShallow("offset"); labelPosition = textStyleModel.getShallow("position") || (isNotNormal ? null : "inside"); labelPosition === "outside" && (labelPosition = opt.defaultOutsidePosition || "top"); if (labelPosition != null) textConfig.position = labelPosition; if (labelOffset != null) textConfig.offset = labelOffset; if (labelRotate != null) { labelRotate *= Math.PI / 180; textConfig.rotation = labelRotate; } if (labelDistance != null) textConfig.distance = labelDistance; textConfig.outsideFill = textStyleModel.get("color") === "inherit" ? opt.inheritColor || null : "auto"; if (opt.autoOverflowArea != null) textConfig.autoOverflowArea = opt.autoOverflowArea; if (opt.layoutRect != null) textConfig.layoutRect = opt.layoutRect; return textConfig; } /** * The uniform entry of set text style, that is, retrieve style definitions * from `model` and set to `textStyle` object. * * Never in merge mode, but in overwrite mode, that is, all of the text style * properties will be set. (Consider the states of normal and emphasis and * default value can be adopted, merge would make the logic too complicated * to manage.) */ function setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached) { opt = opt || EMPTY_OBJ; var ecModel = textStyleModel.ecModel; var globalTextStyle = ecModel && ecModel.option.textStyle; var richItemNames = getRichItemNames(textStyleModel); var richResult; if (richItemNames) { richResult = {}; var richInheritPlainLabelOptionName = "richInheritPlainLabel"; var richInheritPlainLabel = retrieve2(textStyleModel.get(richInheritPlainLabelOptionName), ecModel ? ecModel.get(richInheritPlainLabelOptionName) : void 0); for (var name_1 in richItemNames) if (richItemNames.hasOwnProperty(name_1)) { var richTextStyle = textStyleModel.getModel(["rich", name_1]); setTokenTextStyle(richResult[name_1] = {}, richTextStyle, globalTextStyle, textStyleModel, richInheritPlainLabel, opt, isNotNormal, isAttached, false, true); } } if (richResult) textStyle.rich = richResult; var overflow = textStyleModel.get("overflow"); if (overflow) textStyle.overflow = overflow; var lineOverflow = textStyleModel.get("lineOverflow"); if (lineOverflow) textStyle.lineOverflow = lineOverflow; var labelTextStyle = textStyle; var minMargin = textStyleModel.get("minMargin"); if (minMargin != null) { minMargin = !isNumber(minMargin) ? 0 : minMargin / 2; labelTextStyle.margin = [ minMargin, minMargin, minMargin, minMargin ]; labelTextStyle.__marginType = LabelMarginType.minMargin; } else { var textMargin = textStyleModel.get("textMargin"); if (textMargin != null) { labelTextStyle.margin = normalizeCssArray$1(textMargin); labelTextStyle.__marginType = LabelMarginType.textMargin; } } setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, null, null, opt, isNotNormal, isAttached, true, false); } function getRichItemNames(textStyleModel) { var richItemNameMap; while (textStyleModel && textStyleModel !== textStyleModel.ecModel) { var rich = (textStyleModel.option || EMPTY_OBJ).rich; if (rich) { richItemNameMap = richItemNameMap || {}; var richKeys = keys(rich); for (var i = 0; i < richKeys.length; i++) { var richKey = richKeys[i]; richItemNameMap[richKey] = 1; } } textStyleModel = textStyleModel.parentModel; } return richItemNameMap; } var TEXT_PROPS_WITH_GLOBAL = [ "fontStyle", "fontWeight", "fontSize", "fontFamily", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY" ]; var TEXT_PROPS_SELF = [ "align", "lineHeight", "width", "height", "tag", "verticalAlign", "ellipsis" ]; var TEXT_PROPS_BOX = [ "padding", "borderWidth", "borderRadius", "borderDashOffset", "backgroundColor", "borderColor", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY" ]; function setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, plainTextModel, richInheritPlainLabel, opt, isNotNormal, isAttached, isBlock, inRich) { globalTextStyle = !isNotNormal && globalTextStyle || EMPTY_OBJ; var inheritColor = opt && opt.inheritColor; var fillColor = textStyleModel.getShallow("color"); var strokeColor = textStyleModel.getShallow("textBorderColor"); var opacity = retrieve2(textStyleModel.getShallow("opacity"), globalTextStyle.opacity); if (fillColor === "inherit" || fillColor === "auto") { if (fillColor === "auto") deprecateReplaceLog("color: 'auto'", "color: 'inherit'"); if (inheritColor) fillColor = inheritColor; else fillColor = null; } if (strokeColor === "inherit" || strokeColor === "auto") { if (strokeColor === "auto") deprecateReplaceLog("color: 'auto'", "color: 'inherit'"); if (inheritColor) strokeColor = inheritColor; else strokeColor = null; } if (!isAttached) { fillColor = fillColor || globalTextStyle.color; strokeColor = strokeColor || globalTextStyle.textBorderColor; } if (fillColor != null) textStyle.fill = fillColor; if (strokeColor != null) textStyle.stroke = strokeColor; var textBorderWidth = retrieve2(textStyleModel.getShallow("textBorderWidth"), globalTextStyle.textBorderWidth); if (textBorderWidth != null) textStyle.lineWidth = textBorderWidth; var textBorderType = retrieve2(textStyleModel.getShallow("textBorderType"), globalTextStyle.textBorderType); if (textBorderType != null) textStyle.lineDash = textBorderType; var textBorderDashOffset = retrieve2(textStyleModel.getShallow("textBorderDashOffset"), globalTextStyle.textBorderDashOffset); if (textBorderDashOffset != null) textStyle.lineDashOffset = textBorderDashOffset; if (!isNotNormal && opacity == null && !inRich) opacity = opt && opt.defaultOpacity; if (opacity != null) textStyle.opacity = opacity; if (!isNotNormal && !isAttached) { if (textStyle.fill == null && opt.inheritColor) textStyle.fill = opt.inheritColor; } for (var i = 0; i < TEXT_PROPS_WITH_GLOBAL.length; i++) { var key = TEXT_PROPS_WITH_GLOBAL[i]; var val = richInheritPlainLabel !== false && plainTextModel ? retrieve3(textStyleModel.getShallow(key), plainTextModel.getShallow(key), globalTextStyle[key]) : retrieve2(textStyleModel.getShallow(key), globalTextStyle[key]); if (val != null) textStyle[key] = val; } for (var i = 0; i < TEXT_PROPS_SELF.length; i++) { var key = TEXT_PROPS_SELF[i]; var val = textStyleModel.getShallow(key); if (val != null) textStyle[key] = val; } if (textStyle.verticalAlign == null) { var baseline = textStyleModel.getShallow("baseline"); if (baseline != null) textStyle.verticalAlign = baseline; } if (!isBlock || !opt.disableBox) { for (var i = 0; i < TEXT_PROPS_BOX.length; i++) { var key = TEXT_PROPS_BOX[i]; var val = textStyleModel.getShallow(key); if (val != null) textStyle[key] = val; } var borderType = textStyleModel.getShallow("borderType"); if (borderType != null) textStyle.borderDash = borderType; if ((textStyle.backgroundColor === "auto" || textStyle.backgroundColor === "inherit") && inheritColor) { if (textStyle.backgroundColor === "auto") deprecateReplaceLog("backgroundColor: 'auto'", "backgroundColor: 'inherit'"); textStyle.backgroundColor = inheritColor; } if ((textStyle.borderColor === "auto" || textStyle.borderColor === "inherit") && inheritColor) { if (textStyle.borderColor === "auto") deprecateReplaceLog("borderColor: 'auto'", "borderColor: 'inherit'"); textStyle.borderColor = inheritColor; } } } function getFont(opt, ecModel) { var gTextStyleModel = ecModel && ecModel.getModel("textStyle"); return trim$1([ opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow("fontStyle") || "", opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow("fontWeight") || "", (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow("fontSize") || 12) + "px", opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow("fontFamily") || "sans-serif" ].join(" ")); } var labelInner = makeInner(); function setLabelValueAnimation(label, labelStatesModels, value, getDefaultText) { if (!label) return; var obj = labelInner(label); obj.prevValue = obj.value; obj.value = value; var normalLabelModel = labelStatesModels.normal; obj.valueAnimation = normalLabelModel.get("valueAnimation"); if (obj.valueAnimation) { obj.precision = normalLabelModel.get("precision"); obj.defaultInterpolatedText = getDefaultText; obj.statesModels = labelStatesModels; } } function animateLabelValue(textEl, dataIndex, data, animatableModel, labelFetcher) { var labelInnerStore = labelInner(textEl); if (!labelInnerStore.valueAnimation || labelInnerStore.prevValue === labelInnerStore.value) return; var defaultInterpolatedText = labelInnerStore.defaultInterpolatedText; var currValue = retrieve2(labelInnerStore.interpolatedValue, labelInnerStore.prevValue); var targetValue = labelInnerStore.value; function during(percent) { var interpolated = interpolateRawValues(data, labelInnerStore.precision, currValue, targetValue, percent); labelInnerStore.interpolatedValue = percent === 1 ? null : interpolated; setLabelText(textEl, getLabelText({ labelDataIndex: dataIndex, labelFetcher, defaultText: defaultInterpolatedText ? defaultInterpolatedText(interpolated) : interpolated + "" }, labelInnerStore.statesModels, interpolated)); } textEl.percent = 0; (labelInnerStore.prevValue == null ? initProps : updateProps$1)(textEl, { percent: 1 }, animatableModel, dataIndex, null, during); } /** * PENDING: Temporary impl. unify them? * @see {LabelCommonOption['textMargin']} * @see {LabelCommonOption['minMargin']} */ var LabelMarginType = { minMargin: 1, textMargin: 2 }; //#endregion //#region node_modules/echarts/lib/model/mixin/textStyle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PATH_COLOR = ["textStyle", "color"]; var textStyleParams = [ "fontStyle", "fontWeight", "fontSize", "fontFamily", "padding", "lineHeight", "rich", "width", "height", "overflow" ]; var tmpText = new ZRText(); var TextStyleMixin = function() { function TextStyleMixin() {} /** * Get color property or get color from option.textStyle.color */ TextStyleMixin.prototype.getTextColor = function(isEmphasis) { var ecModel = this.ecModel; return this.getShallow("color") || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null); }; /** * Create font string from fontStyle, fontWeight, fontSize, fontFamily * @return {string} */ TextStyleMixin.prototype.getFont = function() { return getFont({ fontStyle: this.getShallow("fontStyle"), fontWeight: this.getShallow("fontWeight"), fontSize: this.getShallow("fontSize"), fontFamily: this.getShallow("fontFamily") }, this.ecModel); }; TextStyleMixin.prototype.getTextRect = function(text) { var style = { text, verticalAlign: this.getShallow("verticalAlign") || this.getShallow("baseline") }; for (var i = 0; i < textStyleParams.length; i++) style[textStyleParams[i]] = this.getShallow(textStyleParams[i]); tmpText.useStyle(style); tmpText.update(); return tmpText.getBoundingRect(); }; return TextStyleMixin; }(); //#endregion //#region node_modules/echarts/lib/model/mixin/lineStyle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LINE_STYLE_KEY_MAP = [ ["lineWidth", "width"], ["stroke", "color"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["lineDash", "type"], ["lineDashOffset", "dashOffset"], ["lineCap", "cap"], ["lineJoin", "join"], ["miterLimit"] ]; var getLineStyle = makeStyleMapper(LINE_STYLE_KEY_MAP); var LineStyleMixin = function() { function LineStyleMixin() {} LineStyleMixin.prototype.getLineStyle = function(excludes) { return getLineStyle(this, excludes); }; return LineStyleMixin; }(); //#endregion //#region node_modules/echarts/lib/model/mixin/itemStyle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ITEM_STYLE_KEY_MAP = [ ["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["lineDash", "borderType"], ["lineDashOffset", "borderDashOffset"], ["lineCap", "borderCap"], ["lineJoin", "borderJoin"], ["miterLimit", "borderMiterLimit"] ]; var getItemStyle = makeStyleMapper(ITEM_STYLE_KEY_MAP); var ItemStyleMixin = function() { function ItemStyleMixin() {} ItemStyleMixin.prototype.getItemStyle = function(excludes, includes) { return getItemStyle(this, excludes, includes); }; return ItemStyleMixin; }(); //#endregion //#region node_modules/echarts/lib/model/Model.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Model = function() { function Model(option, parentModel, ecModel) { this.parentModel = parentModel; this.ecModel = ecModel; this.option = option; } Model.prototype.init = function(option, parentModel, ecModel) { var rest = []; for (var _i = 3; _i < arguments.length; _i++) rest[_i - 3] = arguments[_i]; }; /** * Merge the input option to me. */ Model.prototype.mergeOption = function(option, ecModel) { merge(this.option, option, true); }; Model.prototype.get = function(path, ignoreParent) { if (path == null) return this.option; return this._doGet(this.parsePath(path), !ignoreParent && this.parentModel); }; Model.prototype.getShallow = function(key, ignoreParent) { var option = this.option; var val = option == null ? option : option[key]; if (val == null && !ignoreParent) { var parentModel = this.parentModel; if (parentModel) val = parentModel.getShallow(key); } return val; }; Model.prototype.getModel = function(path, parentModel) { var hasPath = path != null; var pathFinal = hasPath ? this.parsePath(path) : null; var obj = hasPath ? this._doGet(pathFinal) : this.option; parentModel = parentModel || this.parentModel && this.parentModel.getModel(this.resolveParentPath(pathFinal)); return new Model(obj, parentModel, this.ecModel); }; /** * If model has option */ Model.prototype.isEmpty = function() { return this.option == null; }; Model.prototype.restoreData = function() {}; Model.prototype.clone = function() { var Ctor = this.constructor; return new Ctor(clone$4(this.option)); }; Model.prototype.parsePath = function(path) { if (typeof path === "string") return path.split("."); return path; }; Model.prototype.resolveParentPath = function(path) { return path; }; Model.prototype.isAnimationEnabled = function() { if (!env.node && this.option) { if (this.option.animation != null) return !!this.option.animation; else if (this.parentModel) return this.parentModel.isAnimationEnabled(); } }; Model.prototype._doGet = function(pathArr, parentModel) { var obj = this.option; if (!pathArr) return obj; for (var i = 0; i < pathArr.length; i++) { if (!pathArr[i]) continue; obj = obj && typeof obj === "object" ? obj[pathArr[i]] : null; if (obj == null) break; } if (obj == null && parentModel) obj = parentModel._doGet(this.resolveParentPath(pathArr), parentModel.parentModel); return obj; }; return Model; }(); enableClassExtend(Model); enableClassCheck(Model); mixin(Model, LineStyleMixin); mixin(Model, ItemStyleMixin); mixin(Model, AreaStyleMixin); mixin(Model, TextStyleMixin); //#endregion //#region node_modules/echarts/lib/util/component.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var base = Math.round(Math.random() * 10); /** * @public * @param {string} type * @return {string} */ function getUID(type) { return [type || "", base++].join("_"); } /** * Implements `SubTypeDefaulterManager` for `target`. */ function enableSubTypeDefaulter(target) { var subTypeDefaulters = {}; target.registerSubTypeDefaulter = function(componentType, defaulter) { var componentTypeInfo = parseClassType(componentType); subTypeDefaulters[componentTypeInfo.main] = defaulter; }; target.determineSubType = function(componentType, option) { var type = option.type; if (!type) { var componentTypeMain = parseClassType(componentType).main; if (target.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) type = subTypeDefaulters[componentTypeMain](option); } return type; }; } /** * Implements `TopologicalTravelable` for `entity`. * * Topological travel on Activity Network (Activity On Vertices). * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis']. * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology. * If there is circular dependencey, Error will be thrown. */ function enableTopologicalTravel(entity, dependencyGetter) { /** * @param targetNameList Target Component type list. * Can be ['aa', 'bb', 'aa.xx'] * @param fullNameList By which we can build dependency graph. * @param callback Params: componentType, dependencies. * @param context Scope of callback. */ entity.topologicalTravel = function(targetNameList, fullNameList, callback, context) { if (!targetNameList.length) return; var result = makeDepndencyGraph(fullNameList); var graph = result.graph; var noEntryList = result.noEntryList; var targetNameSet = {}; each$12(targetNameList, function(name) { targetNameSet[name] = true; }); while (noEntryList.length) { var currComponentType = noEntryList.pop(); var currVertex = graph[currComponentType]; var isInTargetNameSet = !!targetNameSet[currComponentType]; if (isInTargetNameSet) { callback.call(context, currComponentType, currVertex.originalDeps.slice()); delete targetNameSet[currComponentType]; } each$12(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge); } each$12(targetNameSet, function() { var errMsg = ""; errMsg = makePrintable("Circular dependency may exists: ", targetNameSet, targetNameList, fullNameList); throw new Error(errMsg); }); function removeEdge(succComponentType) { graph[succComponentType].entryCount--; if (graph[succComponentType].entryCount === 0) noEntryList.push(succComponentType); } function removeEdgeAndAdd(succComponentType) { targetNameSet[succComponentType] = true; removeEdge(succComponentType); } }; function makeDepndencyGraph(fullNameList) { var graph = {}; var noEntryList = []; each$12(fullNameList, function(name) { var thisItem = createDependencyGraphItem(graph, name); var availableDeps = getAvailableDependencies(thisItem.originalDeps = dependencyGetter(name), fullNameList); thisItem.entryCount = availableDeps.length; if (thisItem.entryCount === 0) noEntryList.push(name); each$12(availableDeps, function(dependentName) { if (indexOf(thisItem.predecessor, dependentName) < 0) thisItem.predecessor.push(dependentName); var thatItem = createDependencyGraphItem(graph, dependentName); if (indexOf(thatItem.successor, dependentName) < 0) thatItem.successor.push(name); }); }); return { graph, noEntryList }; } function createDependencyGraphItem(graph, name) { if (!graph[name]) graph[name] = { predecessor: [], successor: [] }; return graph[name]; } function getAvailableDependencies(originalDeps, fullNameList) { var availableDeps = []; each$12(originalDeps, function(dep) { indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep); }); return availableDeps; } } function inheritDefaultOption(superOption, subOption) { return merge(merge({}, superOption, true), subOption, true); } //#endregion //#region node_modules/echarts/lib/i18n/langEN.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Language: English. */ var langEN_default = { time: { month: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], monthAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], dayOfWeek: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], dayOfWeekAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] }, legend: { selector: { all: "All", inverse: "Inv" } }, toolbox: { brush: { title: { rect: "Box Select", polygon: "Lasso Select", lineX: "Horizontally Select", lineY: "Vertically Select", keep: "Keep Selections", clear: "Clear Selections" } }, dataView: { title: "Data View", lang: [ "Data View", "Close", "Refresh" ] }, dataZoom: { title: { zoom: "Zoom", back: "Zoom Reset" } }, magicType: { title: { line: "Switch to Line Chart", bar: "Switch to Bar Chart", stack: "Stack", tiled: "Tile" } }, restore: { title: "Restore" }, saveAsImage: { title: "Save as Image", lang: ["Right Click to Save Image"] } }, series: { typeNames: { pie: "Pie chart", bar: "Bar chart", line: "Line chart", scatter: "Scatter plot", effectScatter: "Ripple scatter plot", radar: "Radar chart", tree: "Tree", treemap: "Treemap", boxplot: "Boxplot", candlestick: "Candlestick", k: "K line chart", heatmap: "Heat map", map: "Map", parallel: "Parallel coordinate map", lines: "Line graph", graph: "Relationship graph", sankey: "Sankey diagram", funnel: "Funnel chart", gauge: "Gauge", pictorialBar: "Pictorial bar", themeRiver: "Theme River Map", sunburst: "Sunburst", custom: "Custom chart", chart: "Chart" } }, aria: { general: { withTitle: "This is a chart about \"{title}\"", withoutTitle: "This is a chart" }, series: { single: { prefix: "", withName: " with type {seriesType} named {seriesName}.", withoutName: " with type {seriesType}." }, multiple: { prefix: ". It consists of {seriesCount} series count.", withName: " The {seriesId} series is a {seriesType} representing {seriesName}.", withoutName: " The {seriesId} series is a {seriesType}.", separator: { middle: "", end: "" } } }, data: { allData: "The data is as follows: ", partialData: "The first {displayCnt} items are: ", withName: "the data for {name} is {value}", withoutName: "{value}", separator: { middle: ", ", end: ". " } } } }; //#endregion //#region node_modules/echarts/lib/i18n/langZH.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var langZH_default = { time: { month: [ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" ], monthAbbr: [ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" ], dayOfWeek: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ], dayOfWeekAbbr: [ "日", "一", "二", "三", "四", "五", "六" ] }, legend: { selector: { all: "全选", inverse: "反选" } }, toolbox: { brush: { title: { rect: "矩形选择", polygon: "圈选", lineX: "横向选择", lineY: "纵向选择", keep: "保持选择", clear: "清除选择" } }, dataView: { title: "数据视图", lang: [ "数据视图", "关闭", "刷新" ] }, dataZoom: { title: { zoom: "区域缩放", back: "区域缩放还原" } }, magicType: { title: { line: "切换为折线图", bar: "切换为柱状图", stack: "切换为堆叠", tiled: "切换为平铺" } }, restore: { title: "还原" }, saveAsImage: { title: "保存为图片", lang: ["右键另存为图片"] } }, series: { typeNames: { pie: "饼图", bar: "柱状图", line: "折线图", scatter: "散点图", effectScatter: "涟漪散点图", radar: "雷达图", tree: "树图", treemap: "矩形树图", boxplot: "箱型图", candlestick: "K线图", k: "K线图", heatmap: "热力图", map: "地图", parallel: "平行坐标图", lines: "线图", graph: "关系图", sankey: "桑基图", funnel: "漏斗图", gauge: "仪表盘图", pictorialBar: "象形柱图", themeRiver: "主题河流图", sunburst: "旭日图", custom: "自定义图表", chart: "图表" } }, aria: { general: { withTitle: "这是一个关于“{title}”的图表。", withoutTitle: "这是一个图表," }, series: { single: { prefix: "", withName: "图表类型是{seriesType},表示{seriesName}。", withoutName: "图表类型是{seriesType}。" }, multiple: { prefix: "它由{seriesCount}个图表系列组成。", withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType},", withoutName: "第{seriesId}个系列是一个{seriesType},", separator: { middle: ";", end: "。" } } }, data: { allData: "其数据是——", partialData: "其中,前{displayCnt}项是——", withName: "{name}的数据是{value}", withoutName: "{value}", separator: { middle: ",", end: "" } } } }; //#endregion //#region node_modules/echarts/lib/core/locale.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LOCALE_ZH = "ZH"; var LOCALE_EN = "EN"; var DEFAULT_LOCALE = LOCALE_EN; var localeStorage = {}; var localeModels = {}; var SYSTEM_LANG = !env.domSupported ? DEFAULT_LOCALE : function() { return (document.documentElement.lang || navigator.language || navigator.browserLanguage || DEFAULT_LOCALE).toUpperCase().indexOf(LOCALE_ZH) > -1 ? LOCALE_ZH : DEFAULT_LOCALE; }(); function registerLocale(locale, localeObj) { locale = locale.toUpperCase(); localeModels[locale] = new Model(localeObj); localeStorage[locale] = localeObj; } function createLocaleObject(locale) { if (isString(locale)) { var localeObj = localeStorage[locale.toUpperCase()] || {}; if (locale === LOCALE_ZH || locale === LOCALE_EN) return clone$4(localeObj); else return merge(clone$4(localeObj), clone$4(localeStorage[DEFAULT_LOCALE]), false); } else return merge(clone$4(locale), clone$4(localeStorage[DEFAULT_LOCALE]), false); } function getLocaleModel(lang) { return localeModels[lang]; } function getDefaultLocaleModel() { return localeModels[DEFAULT_LOCALE]; } registerLocale(LOCALE_EN, langEN_default); registerLocale(LOCALE_ZH, langZH_default); //#endregion //#region node_modules/echarts/lib/scale/break.js var _impl$1 = null; function registerScaleBreakHelperImpl(impl) { if (!_impl$1) _impl$1 = impl; } function getScaleBreakHelper() { return _impl$1; } function simplyParseBreakOption(scale, opt) { var scaleBreakHelper = getScaleBreakHelper(); var breakOption = opt.breakOption; var breakParsed = opt.breakParsed; if (!breakParsed && scaleBreakHelper) breakParsed = scaleBreakHelper.parseAxisBreakOption(breakOption, scale); return breakParsed; } function getBreaksUnsafe(scale) { var brk = scale.brk; return brk ? brk.breaks : []; } function hasBreaks(scale) { var brk = scale.brk; return brk ? brk.hasBreaks() : false; } //#endregion //#region node_modules/echarts/lib/util/time.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ONE_SECOND = 1e3; var ONE_MINUTE = ONE_SECOND * 60; var ONE_HOUR = ONE_MINUTE * 60; var ONE_DAY = ONE_HOUR * 24; var ONE_YEAR = ONE_DAY * 365; var primaryTimeUnitFormatterMatchers = { year: /({yyyy}|{yy})/, month: /({MMMM}|{MMM}|{MM}|{M})/, day: /({dd}|{d})/, hour: /({HH}|{H}|{hh}|{h})/, minute: /({mm}|{m})/, second: /({ss}|{s})/, millisecond: /({SSS}|{S})/ }; var defaultFormatterSeed = { year: "{yyyy}", month: "{MMM}", day: "{d}", hour: "{HH}:{mm}", minute: "{HH}:{mm}", second: "{HH}:{mm}:{ss}", millisecond: "{HH}:{mm}:{ss} {SSS}" }; var defaultFullFormatter = "{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"; var fullDayFormatter = "{yyyy}-{MM}-{dd}"; var fullLeveledFormatter = { year: "{yyyy}", month: "{yyyy}-{MM}", day: fullDayFormatter, hour: fullDayFormatter + " " + defaultFormatterSeed.hour, minute: fullDayFormatter + " " + defaultFormatterSeed.minute, second: fullDayFormatter + " " + defaultFormatterSeed.second, millisecond: defaultFullFormatter }; var primaryTimeUnits = [ "year", "month", "day", "hour", "minute", "second", "millisecond" ]; var timeUnits = [ "year", "half-year", "quarter", "month", "week", "half-week", "day", "half-day", "quarter-day", "hour", "minute", "second", "millisecond" ]; function parseTimeAxisLabelFormatter(formatter) { return !isString(formatter) && !isFunction(formatter) ? parseTimeAxisLabelFormatterDictionary(formatter) : formatter; } /** * The final generated dictionary is like: * generated_dict = { * year: { * year: ['{yyyy}', ...] * }, * month: { * year: ['{yyyy} {MMM}', ...], * month: ['{MMM}', ...] * }, * day: { * year: ['{yyyy} {MMM} {d}', ...], * month: ['{MMM} {d}', ...], * day: ['{d}', ...] * }, * ... * } * * In echarts option, users can specify the entire dictionary or typically just: * {formatter: { * year: '{yyyy}', // Or an array of leveled templates: `['{yyyy}', '{bold1|{yyyy}}', ...]`, * // corresponding to `[level0, level1, level2, ...]`. * month: '{MMM}', * day: '{d}', * hour: '{HH}:{mm}', * second: '{HH}:{mm}', * ... * }} * If any time unit is not specified in echarts option, the default template is used, * such as `['{yyyy}', {primary|{yyyy}']`. * * The `tick.level` is only used to read string from each array, meaning the style type. * * Let `lowerUnit = getUnitFromValue(tick.value)`. * The non-break axis ticks only use `generated_dict[lowerUnit][lowerUnit][level]`. * The break axis ticks may use `generated_dict[lowerUnit][upperUnit][level]`, because: * Consider the case: the non-break ticks are `16th, 23th, Feb, 7th, ...`, where `Feb` is in the break * range and pruned by breaks, and the break ends might be in lower time unit than day. e.g., break start * is `Jan 25th 18:00`(in unit `hour`) and break end is `Feb 6th 18:30` (in unit `minute`). Thus the break * label prefers `Jan 25th 18:00` and `Feb 6th 18:30` rather than only `18:00` and `18:30`, otherwise it * causes misleading. * In this case, the tick of the break start and end will both be: * `{level: 1, lowerTimeUnit: 'minute', upperTimeUnit: 'month'}` * And get the final template by `generated_dict[lowerTimeUnit][upperTimeUnit][level]`. * Note that the time unit can not be calculated directly by a single tick value, since the two breaks have * to be at the same time unit to avoid awkward appearance. i.e., `Jan 25th 18:00` is in the time unit "hour" * but we need it to be "minute", following `Feb 6th 18:30`. */ function parseTimeAxisLabelFormatterDictionary(dictOption) { dictOption = dictOption || {}; var dict = {}; var canAddHighlight = true; each$12(primaryTimeUnits, function(lowestUnit) { canAddHighlight && (canAddHighlight = dictOption[lowestUnit] == null); }); each$12(primaryTimeUnits, function(lowestUnit, lowestUnitIdx) { var upperDictOption = dictOption[lowestUnit]; dict[lowestUnit] = {}; var lowerTpl = null; for (var upperUnitIdx = lowestUnitIdx; upperUnitIdx >= 0; upperUnitIdx--) { var upperUnit = primaryTimeUnits[upperUnitIdx]; var upperDictItemOption = isObject$3(upperDictOption) && !isArray$1(upperDictOption) ? upperDictOption[upperUnit] : upperDictOption; var tplArr = void 0; if (isArray$1(upperDictItemOption)) { tplArr = upperDictItemOption.slice(); lowerTpl = tplArr[0] || ""; } else if (isString(upperDictItemOption)) { lowerTpl = upperDictItemOption; tplArr = [lowerTpl]; } else { if (lowerTpl == null) lowerTpl = defaultFormatterSeed[lowestUnit]; else if (!primaryTimeUnitFormatterMatchers[upperUnit].test(lowerTpl)) lowerTpl = dict[upperUnit][upperUnit][0] + " " + lowerTpl; tplArr = [lowerTpl]; if (canAddHighlight) tplArr[1] = "{primary|" + lowerTpl + "}"; } dict[lowestUnit][upperUnit] = tplArr; } }); return dict; } function pad(str, len) { str += ""; return "0000".substr(0, len - str.length) + str; } function getPrimaryTimeUnit(timeUnit) { switch (timeUnit) { case "half-year": case "quarter": return "month"; case "week": case "half-week": return "day"; case "half-day": case "quarter-day": return "hour"; default: return timeUnit; } } function isPrimaryTimeUnit(timeUnit) { return timeUnit === getPrimaryTimeUnit(timeUnit); } function getDefaultFormatPrecisionOfInterval(timeUnit) { switch (timeUnit) { case "year": case "month": return "day"; case "millisecond": return "millisecond"; default: return "second"; } } function format(time, template, isUTC, lang) { var date = parseDate(time); var y = date[fullYearGetterName(isUTC)](); var M = date[monthGetterName(isUTC)]() + 1; var q = Math.floor((M - 1) / 3) + 1; var d = date[dateGetterName(isUTC)](); var e = date["get" + (isUTC ? "UTC" : "") + "Day"](); var H = date[hoursGetterName(isUTC)](); var h = (H - 1) % 12 + 1; var m = date[minutesGetterName(isUTC)](); var s = date[secondsGetterName(isUTC)](); var S = date[millisecondsGetterName(isUTC)](); var a = H >= 12 ? "pm" : "am"; var A = a.toUpperCase(); var timeModel = (lang instanceof Model ? lang : getLocaleModel(lang || SYSTEM_LANG) || getDefaultLocaleModel()).getModel("time"); var month = timeModel.get("month"); var monthAbbr = timeModel.get("monthAbbr"); var dayOfWeek = timeModel.get("dayOfWeek"); var dayOfWeekAbbr = timeModel.get("dayOfWeekAbbr"); return (template || "").replace(/{a}/g, a + "").replace(/{A}/g, A + "").replace(/{yyyy}/g, y + "").replace(/{yy}/g, pad(y % 100 + "", 2)).replace(/{Q}/g, q + "").replace(/{MMMM}/g, month[M - 1]).replace(/{MMM}/g, monthAbbr[M - 1]).replace(/{MM}/g, pad(M, 2)).replace(/{M}/g, M + "").replace(/{dd}/g, pad(d, 2)).replace(/{d}/g, d + "").replace(/{eeee}/g, dayOfWeek[e]).replace(/{ee}/g, dayOfWeekAbbr[e]).replace(/{e}/g, e + "").replace(/{HH}/g, pad(H, 2)).replace(/{H}/g, H + "").replace(/{hh}/g, pad(h + "", 2)).replace(/{h}/g, h + "").replace(/{mm}/g, pad(m, 2)).replace(/{m}/g, m + "").replace(/{ss}/g, pad(s, 2)).replace(/{s}/g, s + "").replace(/{SSS}/g, pad(S, 3)).replace(/{S}/g, S + ""); } function leveledFormat(tick, idx, formatter, lang, isUTC) { var template = null; if (isString(formatter)) template = formatter; else if (isFunction(formatter)) { var extra = { time: tick.time, level: tick.time ? tick.time.level : 0 }; var scaleBreakHelper = getScaleBreakHelper(); if (scaleBreakHelper) scaleBreakHelper.makeAxisLabelFormatterParamBreak(extra, tick["break"]); template = formatter(tick.value, idx, extra); } else { var tickTime = tick.time; if (tickTime) { var leveledTplArr = formatter[tickTime.lowerTimeUnit][tickTime.upperTimeUnit]; template = leveledTplArr[Math.min(tickTime.level, leveledTplArr.length - 1)] || ""; } else { var unit = getUnitFromValue(tick.value, isUTC); template = formatter[unit][unit][0]; } } return format(new Date(tick.value), template, isUTC, lang); } function getUnitFromValue(value, isUTC) { var date = parseDate(value); var M = date[monthGetterName(isUTC)]() + 1; var d = date[dateGetterName(isUTC)](); var h = date[hoursGetterName(isUTC)](); var m = date[minutesGetterName(isUTC)](); var s = date[secondsGetterName(isUTC)](); var isSecond = date[millisecondsGetterName(isUTC)]() === 0; var isMinute = isSecond && s === 0; var isHour = isMinute && m === 0; var isDay = isHour && h === 0; var isMonth = isDay && d === 1; if (isMonth && M === 1) return "year"; else if (isMonth) return "month"; else if (isDay) return "day"; else if (isHour) return "hour"; else if (isMinute) return "minute"; else if (isSecond) return "second"; else return "millisecond"; } /** * e.g., * If timeUnit is 'year', return the Jan 1st 00:00:00 000 of that year. * If timeUnit is 'day', return the 00:00:00 000 of that day. * * @return The input date. */ function roundTime(date, timeUnit, isUTC) { switch (timeUnit) { case "year": date[monthSetterName(isUTC)](0); case "month": date[dateSetterName(isUTC)](1); case "day": date[hoursSetterName(isUTC)](0); case "hour": date[minutesSetterName(isUTC)](0); case "minute": date[secondsSetterName(isUTC)](0); case "second": date[millisecondsSetterName(isUTC)](0); } return date; } function fullYearGetterName(isUTC) { return isUTC ? "getUTCFullYear" : "getFullYear"; } function monthGetterName(isUTC) { return isUTC ? "getUTCMonth" : "getMonth"; } function dateGetterName(isUTC) { return isUTC ? "getUTCDate" : "getDate"; } function hoursGetterName(isUTC) { return isUTC ? "getUTCHours" : "getHours"; } function minutesGetterName(isUTC) { return isUTC ? "getUTCMinutes" : "getMinutes"; } function secondsGetterName(isUTC) { return isUTC ? "getUTCSeconds" : "getSeconds"; } function millisecondsGetterName(isUTC) { return isUTC ? "getUTCMilliseconds" : "getMilliseconds"; } function fullYearSetterName(isUTC) { return isUTC ? "setUTCFullYear" : "setFullYear"; } function monthSetterName(isUTC) { return isUTC ? "setUTCMonth" : "setMonth"; } function dateSetterName(isUTC) { return isUTC ? "setUTCDate" : "setDate"; } function hoursSetterName(isUTC) { return isUTC ? "setUTCHours" : "setHours"; } function minutesSetterName(isUTC) { return isUTC ? "setUTCMinutes" : "setMinutes"; } function secondsSetterName(isUTC) { return isUTC ? "setUTCSeconds" : "setSeconds"; } function millisecondsSetterName(isUTC) { return isUTC ? "setUTCMilliseconds" : "setMilliseconds"; } //#endregion //#region node_modules/echarts/lib/legacy/getTextRect.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getTextRect(text, font, align, verticalAlign, padding, rich, truncate, lineHeight) { return new ZRText({ style: { text, font, align, verticalAlign, padding, rich, overflow: truncate ? "truncate" : null, lineHeight } }).getBoundingRect(); } //#endregion //#region node_modules/echarts/lib/util/format.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Add a comma each three digit. */ function addCommas(x) { if (!isNumeric(x)) return isString(x) ? x : "-"; var parts = (x + "").split("."); return parts[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (parts.length > 1 ? "." + parts[1] : ""); } function toCamelCase(str, upperCaseFirst) { str = (str || "").toLowerCase().replace(/-(.)/g, function(match, group1) { return group1.toUpperCase(); }); if (upperCaseFirst && str) str = str.charAt(0).toUpperCase() + str.slice(1); return str; } var normalizeCssArray = normalizeCssArray$1; /** * Make value user readable for tooltip and label. * "User readable": * Try to not print programmer-specific text like NaN, Infinity, null, undefined. * Avoid to display an empty string, which users can not recognize there is * a value and it might look like a bug. */ function makeValueReadable(value, valueType, useUTC) { var USER_READABLE_DEFUALT_TIME_PATTERN = "{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}"; function stringToUserReadable(str) { return str && trim$1(str) ? str : "-"; } function isNumberUserReadable(num) { return isNullableNumberFinite(num); } var isTypeTime = valueType === "time"; var isValueDate = value instanceof Date; if (isTypeTime || isValueDate) { var date = isTypeTime ? parseDate(value) : value; if (!isNaN(+date)) return format(date, USER_READABLE_DEFUALT_TIME_PATTERN, useUTC); else if (isValueDate) return "-"; } if (valueType === "ordinal") return isStringSafe(value) ? stringToUserReadable(value) : isNumber(value) ? isNumberUserReadable(value) ? value + "" : "-" : "-"; var numericResult = numericToNumber(value); return isNumberUserReadable(numericResult) ? addCommas(numericResult) : isStringSafe(value) ? stringToUserReadable(value) : typeof value === "boolean" ? value + "" : "-"; } var TPL_VAR_ALIAS = [ "a", "b", "c", "d", "e", "f", "g" ]; var wrapVar = function(varName, seriesIdx) { return "{" + varName + (seriesIdx == null ? "" : seriesIdx) + "}"; }; /** * Template formatter * @param {Array.|Object} paramsList */ function formatTpl(tpl, paramsList, encode) { if (!isArray$1(paramsList)) paramsList = [paramsList]; var seriesLen = paramsList.length; if (!seriesLen) return ""; var $vars = paramsList[0].$vars || []; for (var i = 0; i < $vars.length; i++) { var alias = TPL_VAR_ALIAS[i]; tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0)); } for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) for (var k = 0; k < $vars.length; k++) { var val = paramsList[seriesIdx][$vars[k]]; tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val); } return tpl; } /** * simple Template formatter */ function formatTplSimple(tpl, param, encode) { each$12(param, function(value, key) { tpl = tpl.replace("{" + key + "}", encode ? encodeHTML(value) : value); }); return tpl; } function getTooltipMarker(inOpt, extraCssText) { var opt = isString(inOpt) ? { color: inOpt, extraCssText } : inOpt || {}; var color = opt.color; var type = opt.type; extraCssText = opt.extraCssText; var renderMode = opt.renderMode || "html"; if (!color) return ""; if (renderMode === "html") return type === "subItem" ? "" : ""; else return { renderMode, content: "{" + (opt.markerId || "markerX") + "|} ", style: type === "subItem" ? { width: 4, height: 4, borderRadius: 2, backgroundColor: color } : { width: 10, height: 10, borderRadius: 5, backgroundColor: color } }; } /** * @deprecated Use `time/format` instead. * ISO Date format * @param {string} tpl * @param {number} value * @param {boolean} [isUTC=false] Default in local time. * see `module:echarts/scale/Time` * and `module:echarts/util/number#parseDate`. * @inner */ function formatTime(tpl, value, isUTC) { deprecateReplaceLog("echarts.format.formatTime", "echarts.time.format"); if (tpl === "week" || tpl === "month" || tpl === "quarter" || tpl === "half-year" || tpl === "year") tpl = "MM-dd\nyyyy"; var date = parseDate(value); var getUTC = isUTC ? "getUTC" : "get"; var y = date[getUTC + "FullYear"](); var M = date[getUTC + "Month"]() + 1; var d = date[getUTC + "Date"](); var h = date[getUTC + "Hours"](); var m = date[getUTC + "Minutes"](); var s = date[getUTC + "Seconds"](); var S = date[getUTC + "Milliseconds"](); tpl = tpl.replace("MM", pad(M, 2)).replace("M", M).replace("yyyy", y).replace("yy", pad(y % 100 + "", 2)).replace("dd", pad(d, 2)).replace("d", d).replace("hh", pad(h, 2)).replace("h", h).replace("mm", pad(m, 2)).replace("m", m).replace("ss", pad(s, 2)).replace("s", s).replace("SSS", pad(S, 3)); return tpl; } /** * Capital first * @param {string} str * @return {string} */ function capitalFirst(str) { return str ? str.charAt(0).toUpperCase() + str.substr(1) : str; } /** * @return Never be null/undefined. */ function convertToColorString(color, defaultColor) { defaultColor = defaultColor || "transparent"; return isString(color) ? color : isObject$3(color) ? color.colorStops && (color.colorStops[0] || {}).color || defaultColor : defaultColor; } /** * open new tab * @param link url * @param target blank or self */ function windowOpen(link, target) { if (target === "_blank" || target === "blank") { var blank = window.open(); blank.opener = null; blank.location.href = link; } else window.open(link, target); } //#endregion //#region node_modules/echarts/lib/core/CoordinateSystem.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * FIXME: * `nonSeriesBoxCoordSysCreators` and `_nonSeriesBoxMasterList` are hardcoded implementations. * Regarding "coord sys layout based on another coord sys", currently we only experimentally support one level * dependency, such as, "grid(cartesian)s can be laid out based on matrix/calendar coord sys." * But a comprehensive implementation may need to support: * - Recursive dependencies. e.g., a matrix coord sys lays out based on another matrix coord sys. * That requires in the implementation `create` and `update` of coord sys are called by a dependency graph. * (@see enableTopologicalTravel in `util/component.ts`) */ var nonSeriesBoxCoordSysCreators = {}; var normalCoordSysCreators = {}; var CoordinateSystemManager = function() { function CoordinateSystemManager() { this._normalMasterList = []; this._nonSeriesBoxMasterList = []; } /** * Typically, * - in `create`, a coord sys lays out based on a given rect; * - in `update`, update the pixel and data extent of there axes (if any) based on processed `series.data`. * After that, a coord sys can serve (typically by `dataToPoint`/`dataToLayout`/`pointToData`). * If the coordinate system do not lay out based on `series.data`, `update` is not needed. */ CoordinateSystemManager.prototype.create = function(ecModel, api) { this._nonSeriesBoxMasterList = dealCreate(nonSeriesBoxCoordSysCreators, true); this._normalMasterList = dealCreate(normalCoordSysCreators, false); function dealCreate(creatorMap, canBeNonSeriesBox) { var coordinateSystems = []; each$12(creatorMap, function(creator, type) { var list = creator.create(ecModel, api); coordinateSystems = coordinateSystems.concat(list || []); if (canBeNonSeriesBox) each$12(list, function(master) { return assert(!master.update); }); }); return coordinateSystems; } }; /** * @see CoordinateSystem['create'] */ CoordinateSystemManager.prototype.update = function(ecModel, api) { each$12(this._normalMasterList, function(coordSys) { coordSys.update && coordSys.update(ecModel, api); }); }; CoordinateSystemManager.prototype.getCoordinateSystems = function() { return this._normalMasterList.concat(this._nonSeriesBoxMasterList); }; CoordinateSystemManager.register = function(type, creator) { if (type === "matrix" || type === "calendar") { nonSeriesBoxCoordSysCreators[type] = creator; return; } normalCoordSysCreators[type] = creator; }; CoordinateSystemManager.get = function(type) { return normalCoordSysCreators[type] || nonSeriesBoxCoordSysCreators[type]; }; return CoordinateSystemManager; }(); function canBeNonSeriesBoxCoordSys(coordSysType) { return !!nonSeriesBoxCoordSysCreators[coordSysType]; } /** * @see_also `createBoxLayoutReference` * @see_also `injectCoordSysByOption` */ function registerLayOutOnCoordSysUsage(opt) { assert(!coordSysUseMap.get(opt.fullType)); coordSysUseMap.set(opt.fullType, { getCoord2: void 0 }).getCoord2 = opt.getCoord2; } var coordSysUseMap = createHashMap(); /** * @return Be an object, but never be NullUndefined. */ function getCoordForCoordSysUsageKindBox(model) { var coord = model.getShallow("coord", true); var from = 1; if (coord == null) { var store = coordSysUseMap.get(model.type); if (store && store.getCoord2) { from = 2; coord = store.getCoord2(model); } } return { coord, from }; } function decideCoordSysUsageKind(model, printError) { var coordSysType = model.getShallow("coordinateSystem"); var coordSysUsageOption = model.getShallow("coordinateSystemUsage", true); var isDeclaredExplicitly = coordSysUsageOption != null; var kind = 0; if (coordSysType) { var isSeries = model.mainType === "series"; if (coordSysUsageOption == null) coordSysUsageOption = isSeries ? "data" : "box"; if (coordSysUsageOption === "data") { kind = 1; if (!isSeries) { if (isDeclaredExplicitly && printError) error("coordinateSystemUsage \"data\" is not supported in non-series components."); kind = 0; } } else if (coordSysUsageOption === "box") { kind = 2; if (!isSeries && !canBeNonSeriesBoxCoordSys(coordSysType)) { if (isDeclaredExplicitly && printError) error("coordinateSystem \"" + coordSysType + "\" cannot be used" + (" as coordinateSystemUsage \"box\" for \"" + model.type + "\" yet.")); kind = 0; } } } return { coordSysType, kind }; } /** * These cases are considered: * (A) Most series can use only "COORD_SYS_USAGE_KIND_DATA", but "COORD_SYS_USAGE_KIND_BOX" is not applicable: * - e.g., series.heatmap, series.line, series.bar, series.scatter, ... * (B) Some series and most components can use only "COORD_SYS_USAGE_KIND_BOX", but "COORD_SYS_USAGE_KIND_DATA" * is not applicable: * - e.g., series.pie, series.funnel, ... * - e.g., grid, polar, geo, title, ... * (C) Several series can use both "COORD_SYS_USAGE_KIND_BOX" and "COORD_SYS_USAGE_KIND_DATA", even at the same time: * - e.g., series.graph, series.map * - If graph or map series use "COORD_SYS_USAGE_KIND_BOX", it creates a internal coord sys as * "COORD_SYS_USAGE_KIND_DATA" to lay out its data. * - Graph series can use matrix coord sys as either the "COORD_SYS_USAGE_KIND_DATA" (each item layout * on one cell) or "COORD_SYS_USAGE_KIND_BOX" (the entire series are layout within one cell). * - To achieve this effect, * `series.coordinateSystemUsage: 'box'` needs to be specified explicitly. * * Check these echarts option settings: * - If `series: {type: 'bar'}`: * COORD_SYS_USAGE_KIND_DATA: "cartesian2d", * COORD_SYS_USAGE_KIND_BOX: "none". * (since `coordinateSystem: 'cartesian2d'` is the default option in bar.) * - If `grid: {coordinateSystem: 'matrix'}` * COORD_SYS_USAGE_KIND_DATA: "none", * COORD_SYS_USAGE_KIND_BOX: "matrix". * - If `series: {type: 'pie', coordinateSystem: 'matrix'}`: * COORD_SYS_USAGE_KIND_DATA: "none", * COORD_SYS_USAGE_KIND_BOX: "matrix". * (since `coordinateSystemUsage: 'box'` is the default option in pie.) * - If `series: {type: 'graph', coordinateSystem: 'matrix'}`: * COORD_SYS_USAGE_KIND_DATA: "matrix", * COORD_SYS_USAGE_KIND_BOX: "none" * - If `series: {type: 'graph', coordinateSystem: 'matrix', coordinateSystemUsage: 'box'}`: * COORD_SYS_USAGE_KIND_DATA: "an internal view", * COORD_SYS_USAGE_KIND_BOX: "the internal view is laid out on a matrix" * - If `series: {type: 'map'}`: * COORD_SYS_USAGE_KIND_DATA: "a internal geo", * COORD_SYS_USAGE_KIND_BOX: "none" * - If `series: {type: 'map', coordinateSystem: 'geo', geoIndex: 0}`: * COORD_SYS_USAGE_KIND_DATA: "a geo", * COORD_SYS_USAGE_KIND_BOX: "none" * - If `series: {type: 'map', coordinateSystem: 'matrix'}`: * not_applicable * - If `series: {type: 'map', coordinateSystem: 'matrix', coordinateSystemUsage: 'box'}`: * COORD_SYS_USAGE_KIND_DATA: "an internal geo", * COORD_SYS_USAGE_KIND_BOX: "the internal geo is laid out on a matrix" * * @usage * For case (A) & (B), * call `injectCoordSysByOption({coordSysType: 'aaa', ...})` once for each series/components. * For case (C), * call `injectCoordSysByOption({coordSysType: 'aaa', ...})` once for each series/components, * and then call `injectCoordSysByOption({coordSysType: 'bbb', ..., isDefaultDataCoordSys: true})` * once for each series/components. */ function injectCoordSysByOption(opt) { var targetModel = opt.targetModel, coordSysType = opt.coordSysType, coordSysProvider = opt.coordSysProvider, isDefaultDataCoordSys = opt.isDefaultDataCoordSys, allowNotFound = opt.allowNotFound; assert(!!coordSysType); var _a = decideCoordSysUsageKind(targetModel, true), kind = _a.kind, declaredType = _a.coordSysType; if (isDefaultDataCoordSys && kind !== 1) { kind = 1; declaredType = coordSysType; } if (kind === 0 || declaredType !== coordSysType) return 0; var coordSys = coordSysProvider(coordSysType, targetModel); if (!coordSys) { if (!allowNotFound) error(coordSysType + " cannot be found for" + (" " + targetModel.type + " (index: " + targetModel.componentIndex + ").")); return 0; } if (kind === 1) { assert(targetModel.mainType === "series"); targetModel.coordinateSystem = coordSys; } else targetModel.boxCoordinateSystem = coordSys; return kind; } var simpleCoordSysInjectionProvider = function(coordSysType, injectTargetModel) { var coordSysModel = injectTargetModel.getReferringComponents(coordSysType, SINGLE_REFERRING).models[0]; return coordSysModel && coordSysModel.coordinateSystem; }; //#endregion //#region node_modules/echarts/lib/util/layout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each$11 = each$12; /** * @public */ var LOCATION_PARAMS = [ "left", "right", "top", "bottom", "width", "height" ]; /** * @public */ var HV_NAMES = [[ "width", "left", "right" ], [ "height", "top", "bottom" ]]; function boxLayout(orient, group, gap, maxWidth, maxHeight) { var x = 0; var y = 0; if (maxWidth == null) maxWidth = Infinity; if (maxHeight == null) maxHeight = Infinity; var currentLineMaxSize = 0; group.eachChild(function(child, idx) { var rect = child.getBoundingRect(); var nextChild = group.childAt(idx + 1); var nextChildRect = nextChild && nextChild.getBoundingRect(); var nextX; var nextY; if (orient === "horizontal") { var moveX = rect.width + (nextChildRect ? -nextChildRect.x + rect.x : 0); nextX = x + moveX; if (nextX > maxWidth || child.newline) { x = 0; nextX = moveX; y += currentLineMaxSize + gap; currentLineMaxSize = rect.height; } else currentLineMaxSize = Math.max(currentLineMaxSize, rect.height); } else { var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0); nextY = y + moveY; if (nextY > maxHeight || child.newline) { x += currentLineMaxSize + gap; y = 0; nextY = moveY; currentLineMaxSize = rect.width; } else currentLineMaxSize = Math.max(currentLineMaxSize, rect.width); } if (child.newline) return; child.x = x; child.y = y; child.markRedraw(); orient === "horizontal" ? x = nextX + gap : y = nextY + gap; }); } /** * VBox or HBox layouting * @param {string} orient * @param {module:zrender/graphic/Group} group * @param {number} gap * @param {number} [width=Infinity] * @param {number} [height=Infinity] */ var box = boxLayout; curry$1(boxLayout, "vertical"); curry$1(boxLayout, "horizontal"); function getBoxLayoutParams(boxLayoutModel, ignoreParent) { return { left: boxLayoutModel.getShallow("left", ignoreParent), top: boxLayoutModel.getShallow("top", ignoreParent), right: boxLayoutModel.getShallow("right", ignoreParent), bottom: boxLayoutModel.getShallow("bottom", ignoreParent), width: boxLayoutModel.getShallow("width", ignoreParent), height: boxLayoutModel.getShallow("height", ignoreParent) }; } function getViewRectAndCenterForCircleLayout(seriesModel, api) { var layoutRef = createBoxLayoutReference(seriesModel, api, { enableLayoutOnlyByCenter: true }); var boxLayoutParams = seriesModel.getBoxLayoutParams(); var viewRect; var center; if (layoutRef.type === BoxLayoutReferenceType.point) { center = layoutRef.refPoint; viewRect = getLayoutRect(boxLayoutParams, { width: api.getWidth(), height: api.getHeight() }); } else { var centerOption = seriesModel.get("center"); var centerOptionArr = isArray$1(centerOption) ? centerOption : [centerOption, centerOption]; viewRect = getLayoutRect(boxLayoutParams, layoutRef.refContainer); center = layoutRef.boxCoordFrom === 2 ? layoutRef.refPoint : [parsePercent(centerOptionArr[0], viewRect.width) + viewRect.x, parsePercent(centerOptionArr[1], viewRect.height) + viewRect.y]; } return { viewRect, center }; } function getCircleLayout(seriesModel, api) { var _a = getViewRectAndCenterForCircleLayout(seriesModel, api), viewRect = _a.viewRect, center = _a.center; var radius = seriesModel.get("radius"); if (!isArray$1(radius)) radius = [0, radius]; var width = parsePercent(viewRect.width, api.getWidth()); var height = parsePercent(viewRect.height, api.getHeight()); var size = Math.min(width, height); var r0 = parsePercent(radius[0], size / 2); var r = parsePercent(radius[1], size / 2); return { cx: center[0], cy: center[1], r0, r, viewRect }; } /** * Parse position info. */ function getLayoutRect(positionInfo, containerRect, margin) { margin = normalizeCssArray(margin || 0); var containerWidth = containerRect.width; var containerHeight = containerRect.height; var left = parsePercent(positionInfo.left, containerWidth); var top = parsePercent(positionInfo.top, containerHeight); var right = parsePercent(positionInfo.right, containerWidth); var bottom = parsePercent(positionInfo.bottom, containerHeight); var width = parsePercent(positionInfo.width, containerWidth); var height = parsePercent(positionInfo.height, containerHeight); var verticalMargin = margin[2] + margin[0]; var horizontalMargin = margin[1] + margin[3]; var aspect = positionInfo.aspect; if (isNaN(width)) width = containerWidth - right - horizontalMargin - left; if (isNaN(height)) height = containerHeight - bottom - verticalMargin - top; if (aspect != null) { if (isNaN(width) && isNaN(height)) { if (aspect > containerWidth / containerHeight) width = containerWidth * .8; else height = containerHeight * .8; } if (isNaN(width)) width = aspect * height; if (isNaN(height)) height = width / aspect; } if (isNaN(left)) left = containerWidth - right - width - horizontalMargin; if (isNaN(top)) top = containerHeight - bottom - height - verticalMargin; switch (positionInfo.left || positionInfo.right) { case "center": left = containerWidth / 2 - width / 2 - margin[3]; break; case "right": left = containerWidth - width - horizontalMargin; } switch (positionInfo.top || positionInfo.bottom) { case "middle": case "center": top = containerHeight / 2 - height / 2 - margin[0]; break; case "bottom": top = containerHeight - height - verticalMargin; } left = left || 0; top = top || 0; if (isNaN(width)) width = containerWidth - horizontalMargin - left - (right || 0); if (isNaN(height)) height = containerHeight - verticalMargin - top - (bottom || 0); var rect = new BoundingRect((containerRect.x || 0) + left + margin[3], (containerRect.y || 0) + top + margin[0], width, height); rect.margin = margin; return rect; } /** * PENDING: * when preserveAspect: 'cover' and aspect is near Infinity * or when preserveAspect: 'contain' and aspect is near 0, * the result width or height is near Inifity. It's logically correct, * Therefore currently we do not handle it, until bad cases arise. */ function applyPreserveAspect(component, layoutRect, aspect) { var preserveAspect = component.getShallow("preserveAspect", true); if (!preserveAspect) return layoutRect; var actualAspect = layoutRect.width / layoutRect.height; if (Math.abs(Math.atan(aspect) - Math.atan(actualAspect)) < 1e-9) return layoutRect; var preserveAspectAlign = component.getShallow("preserveAspectAlign", true); var preserveAspectVerticalAlign = component.getShallow("preserveAspectVerticalAlign", true); var layoutOptInner = { width: layoutRect.width, height: layoutRect.height }; var isCover = preserveAspect === "cover"; if (actualAspect > aspect && !isCover || actualAspect < aspect && isCover) { layoutOptInner.width = layoutRect.height * aspect; preserveAspectAlign === "left" ? layoutOptInner.left = 0 : preserveAspectAlign === "right" ? layoutOptInner.right = 0 : layoutOptInner.left = "center"; } else { layoutOptInner.height = layoutRect.width / aspect; preserveAspectVerticalAlign === "top" ? layoutOptInner.top = 0 : preserveAspectVerticalAlign === "bottom" ? layoutOptInner.bottom = 0 : layoutOptInner.top = "middle"; } return getLayoutRect(layoutOptInner, layoutRect); } var BoxLayoutReferenceType = { rect: 1, point: 2 }; /** * Uniformly calculate layout reference (rect or center) based on either: * - viewport: * - Get `refContainer` as `{x: 0, y: 0, width: api.getWidth(), height: api.getHeight()}` * - coordinate system, which can serve in several ways: * - Use `dataToPoint` to get the `refPoint`, such as, in cartesian2d coord sys. * - Use `dataToLayout` to get the `refContainer`, such as, in matrix coord sys. */ function createBoxLayoutReference(model, api, opt) { var refContainer; var refPoint; var layoutRefType; var boxCoordSys = model.boxCoordinateSystem; var boxCoordFrom; if (boxCoordSys) { var _a = getCoordForCoordSysUsageKindBox(model), coord = _a.coord, from = _a.from; if (boxCoordSys.dataToLayout) { layoutRefType = BoxLayoutReferenceType.rect; boxCoordFrom = from; var result = boxCoordSys.dataToLayout(coord); refContainer = result.contentRect || result.rect; } else if (opt && opt.enableLayoutOnlyByCenter && boxCoordSys.dataToPoint) { layoutRefType = BoxLayoutReferenceType.point; boxCoordFrom = from; refPoint = boxCoordSys.dataToPoint(coord); } else error(model.type + "[" + model.componentIndex + "]" + (" layout based on " + boxCoordSys.type + " is not supported.")); } if (layoutRefType == null) layoutRefType = BoxLayoutReferenceType.rect; if (layoutRefType === BoxLayoutReferenceType.rect) { if (!refContainer) refContainer = { x: 0, y: 0, width: api.getWidth(), height: api.getHeight() }; refPoint = [refContainer.x + refContainer.width / 2, refContainer.y + refContainer.height / 2]; } return { type: layoutRefType, refContainer, refPoint, boxCoordFrom }; } /** * Position a zr element in viewport * Group position is specified by either * {left, top}, {right, bottom} * If all properties exists, right and bottom will be igonred. * * Logic: * 1. Scale (against origin point in parent coord) * 2. Rotate (against origin point in parent coord) * 3. Translate (with el.position by this method) * So this method only fixes the last step 'Translate', which does not affect * scaling and rotating. * * If be called repeatedly with the same input el, the same result will be gotten. * * Return true if the layout happened. * * @param el Should have `getBoundingRect` method. * @param positionInfo * @param positionInfo.left * @param positionInfo.top * @param positionInfo.right * @param positionInfo.bottom * @param positionInfo.width Only for opt.boundingModel: 'raw' * @param positionInfo.height Only for opt.boundingModel: 'raw' * @param containerRect * @param margin * @param opt * @param opt.hv Only horizontal or only vertical. Default to be [1, 1] * @param opt.boundingMode * Specify how to calculate boundingRect when locating. * 'all': Position the boundingRect that is transformed and uioned * both itself and its descendants. * This mode simplies confine the elements in the bounding * of their container (e.g., using 'right: 0'). * 'raw': Position the boundingRect that is not transformed and only itself. * This mode is useful when you want a element can overflow its * container. (Consider a rotated circle needs to be located in a corner.) * In this mode positionInfo.width/height can only be number. */ function positionElement(el, positionInfo, containerRect, margin, opt, out) { var h = !opt || !opt.hv || opt.hv[0]; var v = !opt || !opt.hv || opt.hv[1]; var boundingMode = opt && opt.boundingMode || "all"; out = out || el; out.x = el.x; out.y = el.y; if (!h && !v) return false; var rect; if (boundingMode === "raw") rect = el.type === "group" ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect(); else { rect = el.getBoundingRect(); if (el.needLocalTransform()) { var transform = el.getLocalTransform(); rect = rect.clone(); rect.applyTransform(transform); } } var layoutRect = getLayoutRect(defaults({ width: rect.width, height: rect.height }, positionInfo), containerRect, margin); var dx = h ? layoutRect.x - rect.x : 0; var dy = v ? layoutRect.y - rect.y : 0; if (boundingMode === "raw") { out.x = dx; out.y = dy; } else { out.x += dx; out.y += dy; } if (out === el) el.markRedraw(); return true; } /** * @param option Contains some of the properties in HV_NAMES. * @param hvIdx 0: horizontal; 1: vertical. */ function sizeCalculable(option, hvIdx) { return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null; } function fetchLayoutMode(ins) { var layoutMode = ins.layoutMode || ins.constructor.layoutMode; return isObject$3(layoutMode) ? layoutMode : layoutMode ? { type: layoutMode } : null; } /** * Consider Case: * When default option has {left: 0, width: 100}, and we set {right: 0} * through setOption or media query, using normal zrUtil.merge will cause * {right: 0} does not take effect. * * @example * ComponentModel.extend({ * init: function () { * ... * let inputPositionParams = layout.getLayoutParams(option); * this.mergeOption(inputPositionParams); * }, * mergeOption: function (newOption) { * newOption && zrUtil.merge(thisOption, newOption, true); * layout.mergeLayoutParam(thisOption, newOption); * } * }); * * @param targetOption * @param newOption * @param opt */ function mergeLayoutParam(targetOption, newOption, opt) { var ignoreSize = opt && opt.ignoreSize; !isArray$1(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]); var hResult = merge(HV_NAMES[0], 0); var vResult = merge(HV_NAMES[1], 1); copy(HV_NAMES[0], targetOption, hResult); copy(HV_NAMES[1], targetOption, vResult); function merge(names, hvIdx) { var newParams = {}; var newValueCount = 0; var merged = {}; var mergedValueCount = 0; var enoughParamNumber = 2; each$11(names, function(name) { merged[name] = targetOption[name]; }); each$11(names, function(name) { hasOwn(newOption, name) && (newParams[name] = merged[name] = newOption[name]); hasValue(newParams, name) && newValueCount++; hasValue(merged, name) && mergedValueCount++; }); if (ignoreSize[hvIdx]) { if (hasValue(newOption, names[1])) merged[names[2]] = null; else if (hasValue(newOption, names[2])) merged[names[1]] = null; return merged; } if (mergedValueCount === enoughParamNumber || !newValueCount) return merged; else if (newValueCount >= enoughParamNumber) return newParams; else { for (var i = 0; i < names.length; i++) { var name_1 = names[i]; if (!hasOwn(newParams, name_1) && hasOwn(targetOption, name_1)) { newParams[name_1] = targetOption[name_1]; break; } } return newParams; } } function hasValue(obj, name) { return obj[name] != null && obj[name] !== "auto"; } function copy(names, target, source) { each$11(names, function(name) { target[name] = source[name]; }); } } /** * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. */ function getLayoutParams(source) { return copyLayoutParams({}, source); } /** * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. * @param {Object} source * @return {Object} Result contains those props. */ function copyLayoutParams(target, source) { source && target && each$11(LOCATION_PARAMS, function(name) { hasOwn(source, name) && (target[name] = source[name]); }); return target; } //#endregion //#region node_modules/echarts/lib/model/Component.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$23 = makeInner(); var ComponentModel = function(_super) { __extends(ComponentModel, _super); function ComponentModel(option, parentModel, ecModel) { var _this = _super.call(this, option, parentModel, ecModel) || this; _this.uid = getUID("ec_cpt_model"); return _this; } ComponentModel.prototype.init = function(option, parentModel, ecModel) { this.mergeDefaultAndTheme(option, ecModel); }; ComponentModel.prototype.mergeDefaultAndTheme = function(option, ecModel) { var layoutMode = fetchLayoutMode(this); var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; merge(option, ecModel.getTheme().get(this.mainType)); merge(option, this.getDefaultOption()); if (layoutMode) mergeLayoutParam(option, inputPositionParams, layoutMode); }; ComponentModel.prototype.mergeOption = function(option, ecModel) { merge(this.option, option, true); var layoutMode = fetchLayoutMode(this); if (layoutMode) mergeLayoutParam(this.option, option, layoutMode); }; /** * Called immediately after `init` or `mergeOption` of this instance called. */ ComponentModel.prototype.optionUpdated = function(newCptOption, isInit) {}; /** * [How to declare defaultOption]: * * (A) If using class declaration in typescript (since echarts 5): * ```ts * import {ComponentOption} from '../model/option.js'; * export interface XxxOption extends ComponentOption { * aaa: number * } * export class XxxModel extends Component { * static type = 'xxx'; * static defaultOption: XxxOption = { * aaa: 123 * } * } * Component.registerClass(XxxModel); * ``` * ```ts * import {inheritDefaultOption} from '../util/component.js'; * import {XxxModel, XxxOption} from './XxxModel.js'; * export interface XxxSubOption extends XxxOption { * bbb: number * } * class XxxSubModel extends XxxModel { * static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, { * bbb: 456 * }) * fn() { * let opt = this.getDefaultOption(); * // opt is {aaa: 123, bbb: 456} * } * } * ``` * * (B) If using class extend (previous approach in echarts 3 & 4): * ```js * let XxxComponent = Component.extend({ * defaultOption: { * xx: 123 * } * }) * ``` * ```js * let XxxSubComponent = XxxComponent.extend({ * defaultOption: { * yy: 456 * }, * fn: function () { * let opt = this.getDefaultOption(); * // opt is {xx: 123, yy: 456} * } * }) * ``` */ ComponentModel.prototype.getDefaultOption = function() { var ctor = this.constructor; if (!isExtendedClass(ctor)) return ctor.defaultOption; var fields = inner$23(this); if (!fields.defaultOption) { var optList = []; var clz = ctor; while (clz) { var opt = clz.prototype.defaultOption; opt && optList.push(opt); clz = clz.superClass; } var defaultOption = {}; for (var i = optList.length - 1; i >= 0; i--) defaultOption = merge(defaultOption, optList[i], true); fields.defaultOption = defaultOption; } return fields.defaultOption; }; /** * Notice: always force to input param `useDefault` in case that forget to consider it. * The same behavior as `modelUtil.parseFinder`. * * @param useDefault In many cases like series refer axis and axis refer grid, * If axis index / axis id not specified, use the first target as default. * In other cases like dataZoom refer axis, if not specified, measn no refer. */ ComponentModel.prototype.getReferringComponents = function(mainType, opt) { var indexKey = mainType + "Index"; var idKey = mainType + "Id"; return queryReferringComponents(this.ecModel, mainType, { index: this.get(indexKey, true), id: this.get(idKey, true) }, opt); }; ComponentModel.prototype.getBoxLayoutParams = function() { return getBoxLayoutParams(this, false); }; /** * If developers don't configure zlevel. We will assign zlevel to series based on the key, if provided. * For example, lines with trail effect is expected to be in an individual zlevel. * * @tutorial [GET_ZLEVEL_KEY_FOR_PROGRESSIVE] * Regarding "progressive rendering", zrender can automatically assign a dedicated "incremental layer" * for `el.incremental` per zlevel. But there is a trade-off: * - If we do not provide different zlevelKey for different series here, all incremental elements from * different series will be assigned to one incremental layer, which causes them to cover each other * in an order depending on progressive steps. * i.e., seriesA_el1 -covered_by-> seriesB_el1 -covered_by-> seriesC_el1 -> seriesA_el2 -> seriesB_el2 ... * This order may causes an unexpected visual result: series with small data are likely to be completely * covered by series with large data. (like in test/scatter-weibo.html) * - If we assign a different zlevelKey to each series, the "covering issue" above can be resolved, * but having one HTML Canvas per series may be excessively memory-consuming. * Therefore, we only automatically assign zlevelKey on `ScatterSeries` and `LinesSeries` for backward * compatibility, and not to other series. Users can explicitly assign zlevel if they encouter above * "covering issue". */ ComponentModel.prototype.getZLevelKey = function() { return ""; }; ComponentModel.prototype.setZLevel = function(zlevel) { this.option.zlevel = zlevel; }; ComponentModel.protoInitialize = function() { var proto = ComponentModel.prototype; proto.type = "component"; proto.id = ""; proto.name = ""; proto.mainType = ""; proto.subType = ""; proto.componentIndex = 0; }(); return ComponentModel; }(Model); mountExtend(ComponentModel, Model); enableClassManagement(ComponentModel); enableSubTypeDefaulter(ComponentModel); enableTopologicalTravel(ComponentModel, getDependencies); function getDependencies(componentType) { var deps = []; each$12(ComponentModel.getClassesByMainType(componentType), function(clz) { deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []); }); deps = map$1(deps, function(type) { return parseClassType(type).main; }); if (componentType !== "dataset" && indexOf(deps, "dataset") <= 0) deps.unshift("dataset"); return deps; } //#endregion //#region node_modules/echarts/lib/visual/tokens.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var tokens = { color: {}, darkColor: {}, size: {} }; var color$1 = tokens.color = { theme: [ "#5070dd", "#b6d634", "#505372", "#ff994d", "#0ca8df", "#ffd10a", "#fb628b", "#785db0", "#3fbe95" ], neutral00: "#fff", neutral05: "#f4f7fd", neutral10: "#e8ebf0", neutral15: "#dbdee4", neutral20: "#cfd2d7", neutral25: "#c3c5cb", neutral30: "#b7b9be", neutral35: "#aaacb2", neutral40: "#9ea0a5", neutral45: "#929399", neutral50: "#86878c", neutral55: "#797b7f", neutral60: "#6d6e73", neutral65: "#616266", neutral70: "#54555a", neutral75: "#48494d", neutral80: "#3c3c41", neutral85: "#303034", neutral90: "#232328", neutral95: "#17171b", neutral99: "#000", accent05: "#eff1f9", accent10: "#e0e4f2", accent15: "#d0d6ec", accent20: "#c0c9e6", accent25: "#b1bbdf", accent30: "#a1aed9", accent35: "#91a0d3", accent40: "#8292cc", accent45: "#7285c6", accent50: "#6578ba", accent55: "#5c6da9", accent60: "#536298", accent65: "#4a5787", accent70: "#404c76", accent75: "#374165", accent80: "#2e3654", accent85: "#252b43", accent90: "#1b2032", accent95: "#121521", transparent: "rgba(0,0,0,0)", highlight: "rgba(255,231,130,0.8)" }; extend(color$1, { primary: color$1.neutral80, secondary: color$1.neutral70, tertiary: color$1.neutral60, quaternary: color$1.neutral50, disabled: color$1.neutral20, border: color$1.neutral30, borderTint: color$1.neutral20, borderShade: color$1.neutral40, background: color$1.neutral05, backgroundTint: "rgba(234,237,245,0.5)", backgroundTransparent: "rgba(255,255,255,0)", backgroundShade: color$1.neutral10, shadow: "rgba(0,0,0,0.2)", shadowTint: "rgba(129,130,136,0.2)", axisLine: color$1.neutral70, axisLineTint: color$1.neutral40, axisTick: color$1.neutral70, axisTickMinor: color$1.neutral60, axisLabel: color$1.neutral70, axisSplitLine: color$1.neutral15, axisMinorSplitLine: color$1.neutral05 }); for (var key in color$1) if (color$1.hasOwnProperty(key)) { var hex = color$1[key]; if (key === "theme") tokens.darkColor.theme = color$1.theme.slice(); else if (key === "highlight") tokens.darkColor.highlight = "rgba(255,231,130,0.4)"; else if (key.indexOf("accent") === 0) tokens.darkColor[key] = modifyHSL(hex, null, function(s) { return s * .5; }, function(l) { return Math.min(1, 1.3 - l); }); else tokens.darkColor[key] = modifyHSL(hex, null, function(s) { return s * .9; }, function(l) { return 1 - Math.pow(l, 1.5); }); } tokens.size = { xxs: 2, xs: 5, s: 10, m: 15, l: 20, xl: 30, xxl: 40, xxxl: 50 }; //#endregion //#region node_modules/echarts/lib/model/globalDefault.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var platform = ""; if (typeof navigator !== "undefined") platform = navigator.platform || ""; var decalColor = "rgba(0, 0, 0, 0.2)"; var themeColor = tokens.color.theme[0]; var lightThemeColor = modifyHSL(themeColor, null, null, .9); var globalDefault_default = { darkMode: "auto", colorBy: "series", color: tokens.color.theme, gradientColor: [lightThemeColor, themeColor], aria: { decal: { decals: [ { color: decalColor, dashArrayX: [1, 0], dashArrayY: [2, 5], symbolSize: 1, rotation: Math.PI / 6 }, { color: decalColor, symbol: "circle", dashArrayX: [[8, 8], [ 0, 8, 8, 0 ]], dashArrayY: [6, 0], symbolSize: .8 }, { color: decalColor, dashArrayX: [1, 0], dashArrayY: [4, 3], rotation: -Math.PI / 4 }, { color: decalColor, dashArrayX: [[6, 6], [ 0, 6, 6, 0 ]], dashArrayY: [6, 0] }, { color: decalColor, dashArrayX: [[1, 0], [1, 6]], dashArrayY: [ 1, 0, 6, 0 ], rotation: Math.PI / 4 }, { color: decalColor, symbol: "triangle", dashArrayX: [[9, 9], [ 0, 9, 9, 0 ]], dashArrayY: [7, 2], symbolSize: .75 } ] } }, textStyle: { fontFamily: platform.match(/^Win/) ? "Microsoft YaHei" : "sans-serif", fontSize: 12, fontStyle: "normal", fontWeight: "normal" }, blendMode: null, stateAnimation: { duration: 300, easing: "cubicOut" }, animation: "auto", animationDuration: 1e3, animationDurationUpdate: 500, animationEasing: "cubicInOut", animationEasingUpdate: "cubicInOut", animationThreshold: 2e3, progressiveThreshold: 3e3, progressive: 400, hoverLayerThreshold: 3e3, useUTC: false }; //#endregion //#region node_modules/echarts/lib/data/helper/sourceHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BE_ORDINAL = { Must: 1, Might: 2, Not: 3 }; var innerGlobalModel = makeInner(); /** * MUST be called before mergeOption of all series. */ function resetSourceDefaulter(ecModel) { innerGlobalModel(ecModel).datasetMap = createHashMap(); } /** * [The strategy of the arrengment of data dimensions for dataset]: * "value way": all axes are non-category axes. So series one by one take * several (the number is coordSysDims.length) dimensions from dataset. * The result of data arrengment of data dimensions like: * | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y | * "category way": at least one axis is category axis. So the the first data * dimension is always mapped to the first category axis and shared by * all of the series. The other data dimensions are taken by series like * "value way" does. * The result of data arrengment of data dimensions like: * | ser_shared_x | ser0_y | ser1_y | ser2_y | * * @return encode Never be `null/undefined`. */ function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) { var encode = {}; var datasetModel = querySeriesUpstreamDatasetModel(seriesModel); if (!datasetModel || !coordDimensions) return encode; var encodeItemName = []; var encodeSeriesName = []; var ecModel = seriesModel.ecModel; var datasetMap = innerGlobalModel(ecModel).datasetMap; var key = datasetModel.uid + "_" + source.seriesLayoutBy; var baseCategoryDimIndex; var categoryWayValueDimStart; coordDimensions = coordDimensions.slice(); each$12(coordDimensions, function(coordDimInfoLoose, coordDimIdx) { var coordDimInfo = isObject$3(coordDimInfoLoose) ? coordDimInfoLoose : coordDimensions[coordDimIdx] = { name: coordDimInfoLoose }; if (coordDimInfo.type === "ordinal" && baseCategoryDimIndex == null) { baseCategoryDimIndex = coordDimIdx; categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimInfo); } encode[coordDimInfo.name] = []; }); var datasetRecord = datasetMap.get(key) || datasetMap.set(key, { categoryWayDim: categoryWayValueDimStart, valueWayDim: 0 }); each$12(coordDimensions, function(coordDimInfo, coordDimIdx) { var coordDimName = coordDimInfo.name; var count = getDataDimCountOnCoordDim(coordDimInfo); if (baseCategoryDimIndex == null) { var start = datasetRecord.valueWayDim; pushDim(encode[coordDimName], start, count); pushDim(encodeSeriesName, start, count); datasetRecord.valueWayDim += count; } else if (baseCategoryDimIndex === coordDimIdx) { pushDim(encode[coordDimName], 0, count); pushDim(encodeItemName, 0, count); } else { var start = datasetRecord.categoryWayDim; pushDim(encode[coordDimName], start, count); pushDim(encodeSeriesName, start, count); datasetRecord.categoryWayDim += count; } }); function pushDim(dimIdxArr, idxFrom, idxCount) { for (var i = 0; i < idxCount; i++) dimIdxArr.push(idxFrom + i); } function getDataDimCountOnCoordDim(coordDimInfo) { var dimsDef = coordDimInfo.dimsDef; return dimsDef ? dimsDef.length : 1; } encodeItemName.length && (encode.itemName = encodeItemName); encodeSeriesName.length && (encode.seriesName = encodeSeriesName); return encode; } /** * Work for data like [{name: ..., value: ...}, ...]. * * @return encode Never be `null/undefined`. */ function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) { var encode = {}; if (!querySeriesUpstreamDatasetModel(seriesModel)) return encode; var sourceFormat = source.sourceFormat; var dimensionsDefine = source.dimensionsDefine; var potentialNameDimIndex; if (sourceFormat === "objectRows" || sourceFormat === "keyedColumns") each$12(dimensionsDefine, function(dim, idx) { if ((isObject$3(dim) ? dim.name : dim) === "name") potentialNameDimIndex = idx; }); var idxResult = function() { var idxRes0 = {}; var idxRes1 = {}; var guessRecords = []; for (var i = 0, len = Math.min(5, dimCount); i < len; i++) { var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i); guessRecords.push(guessResult); var isPureNumber = guessResult === BE_ORDINAL.Not; if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) idxRes0.v = i; if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) idxRes0.n = i; if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) return idxRes0; if (!isPureNumber) { if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) idxRes1.v = i; if (idxRes1.n == null || idxRes1.n === idxRes1.v) idxRes1.n = i; } } function fulfilled(idxResult) { return idxResult.v != null && idxResult.n != null; } return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null; }(); if (idxResult) { encode.value = [idxResult.v]; var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n; encode.itemName = [nameDimIndex]; encode.seriesName = [nameDimIndex]; } return encode; } /** * @return If return null/undefined, indicate that should not use datasetModel. */ function querySeriesUpstreamDatasetModel(seriesModel) { if (!seriesModel.get("data", true)) return queryReferringComponents(seriesModel.ecModel, "dataset", { index: seriesModel.get("datasetIndex", true), id: seriesModel.get("datasetId", true) }, SINGLE_REFERRING).models[0]; } /** * @return Always return an array event empty. */ function queryDatasetUpstreamDatasetModels(datasetModel) { if (!datasetModel.get("transform", true) && !datasetModel.get("fromTransformResult", true)) return []; return queryReferringComponents(datasetModel.ecModel, "dataset", { index: datasetModel.get("fromDatasetIndex", true), id: datasetModel.get("fromDatasetId", true) }, SINGLE_REFERRING).models; } /** * The rule should not be complex, otherwise user might not * be able to known where the data is wrong. * The code is ugly, but how to make it neat? */ function guessOrdinal(source, dimIndex) { return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex); } function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) { var result; var maxLoop = 5; if (isTypedArray(data)) return BE_ORDINAL.Not; var dimName; var dimType; if (dimensionsDefine) { var dimDefItem = dimensionsDefine[dimIndex]; if (isObject$3(dimDefItem)) { dimName = dimDefItem.name; dimType = dimDefItem.type; } else if (isString(dimDefItem)) dimName = dimDefItem; } if (dimType != null) return dimType === "ordinal" ? BE_ORDINAL.Must : BE_ORDINAL.Not; if (sourceFormat === "arrayRows") { var dataArrayRows = data; if (seriesLayoutBy === "row") { var sample = dataArrayRows[dimIndex]; for (var i = 0; i < (sample || []).length && i < maxLoop; i++) if ((result = detectValue(sample[startIndex + i])) != null) return result; } else for (var i = 0; i < dataArrayRows.length && i < maxLoop; i++) { var row = dataArrayRows[startIndex + i]; if (row && (result = detectValue(row[dimIndex])) != null) return result; } } else if (sourceFormat === "objectRows") { var dataObjectRows = data; if (!dimName) return BE_ORDINAL.Not; for (var i = 0; i < dataObjectRows.length && i < maxLoop; i++) { var item = dataObjectRows[i]; if (item && (result = detectValue(item[dimName])) != null) return result; } } else if (sourceFormat === "keyedColumns") { var dataKeyedColumns = data; if (!dimName) return BE_ORDINAL.Not; var sample = dataKeyedColumns[dimName]; if (!sample || isTypedArray(sample)) return BE_ORDINAL.Not; for (var i = 0; i < sample.length && i < maxLoop; i++) if ((result = detectValue(sample[i])) != null) return result; } else if (sourceFormat === "original") { var dataOriginal = data; for (var i = 0; i < dataOriginal.length && i < maxLoop; i++) { var item = dataOriginal[i]; var val = getDataItemValue(item); if (!isArray$1(val)) return BE_ORDINAL.Not; if ((result = detectValue(val[dimIndex])) != null) return result; } } function detectValue(val) { var beStr = isString(val); if (val != null && isFinite(Number(val)) && val !== "") return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not; else if (beStr && val !== "-") return BE_ORDINAL.Must; } return BE_ORDINAL.Not; } //#endregion //#region node_modules/echarts/lib/model/internalComponentCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var internalOptionCreatorMap = createHashMap(); function registerInternalOptionCreator(mainType, creator) { assert(internalOptionCreatorMap.get(mainType) == null && creator); internalOptionCreatorMap.set(mainType, creator); } function concatInternalOptions(ecModel, mainType, newCmptOptionList) { var internalOptionCreator = internalOptionCreatorMap.get(mainType); if (!internalOptionCreator) return newCmptOptionList; var internalOptions = internalOptionCreator(ecModel); if (!internalOptions) return newCmptOptionList; for (var i = 0; i < internalOptions.length; i++) assert(isComponentIdInternal(internalOptions[i])); return newCmptOptionList.concat(internalOptions); } //#endregion //#region node_modules/echarts/lib/model/mixin/palette.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var innerColor = makeInner(); var innerDecal = makeInner(); var PaletteMixin = function() { function PaletteMixin() {} PaletteMixin.prototype.getColorFromPalette = function(name, scope, requestNum) { var defaultPalette = normalizeToArray(this.get("color", true)); var layeredPalette = this.get("colorLayer", true); return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum); }; PaletteMixin.prototype.clearColorPalette = function() { clearPalette(this, innerColor); }; return PaletteMixin; }(); function getDecalFromPalette(ecModel, name, scope, requestNum) { return getFromPalette(ecModel, innerDecal, normalizeToArray(ecModel.get([ "aria", "decal", "decals" ])), null, name, scope, requestNum); } function getNearestPalette(palettes, requestColorNum) { var paletteNum = palettes.length; for (var i = 0; i < paletteNum; i++) if (palettes[i].length > requestColorNum) return palettes[i]; return palettes[paletteNum - 1]; } /** * @param name MUST NOT be null/undefined. Otherwise call this function * twise with the same parameters will get different result. * @param scope default this. * @return Can be null/undefined */ function getFromPalette(that, inner, defaultPalette, layeredPalette, name, scope, requestNum) { scope = scope || that; var scopeFields = inner(scope); var paletteIdx = scopeFields.paletteIdx || 0; var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {}; if (paletteNameMap.hasOwnProperty(name)) return paletteNameMap[name]; var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum); palette = palette || defaultPalette; if (!palette || !palette.length) return; var pickedPaletteItem = palette[paletteIdx]; if (name) paletteNameMap[name] = pickedPaletteItem; scopeFields.paletteIdx = (paletteIdx + 1) % palette.length; return pickedPaletteItem; } function clearPalette(that, inner) { inner(that).paletteIdx = 0; inner(that).paletteNameMap = {}; } //#endregion //#region node_modules/echarts/lib/model/Global.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Caution: If the mechanism should be changed some day, these cases * should be considered: * * (1) In `merge option` mode, if using the same option to call `setOption` * many times, the result should be the same (try our best to ensure that). * (2) In `merge option` mode, if a component has no id/name specified, it * will be merged by index, and the result sequence of the components is * consistent to the original sequence. * (3) In `replaceMerge` mode, keep the result sequence of the components is * consistent to the original sequence, even though there might result in "hole". * (4) `reset` feature (in toolbox). Find detailed info in comments about * `mergeOption` in module:echarts/model/OptionManager. */ var reCreateSeriesIndices; var assertSeriesInitialized; var initBase; var OPTION_INNER_KEY = "\0_ec_inner"; var OPTION_INNER_VALUE = 1; var BUITIN_COMPONENTS_MAP = { grid: "GridComponent", polar: "PolarComponent", geo: "GeoComponent", singleAxis: "SingleAxisComponent", parallel: "ParallelComponent", calendar: "CalendarComponent", matrix: "MatrixComponent", graphic: "GraphicComponent", toolbox: "ToolboxComponent", tooltip: "TooltipComponent", axisPointer: "AxisPointerComponent", brush: "BrushComponent", title: "TitleComponent", timeline: "TimelineComponent", markPoint: "MarkPointComponent", markLine: "MarkLineComponent", markArea: "MarkAreaComponent", legend: "LegendComponent", dataZoom: "DataZoomComponent", visualMap: "VisualMapComponent", xAxis: "GridComponent", yAxis: "GridComponent", angleAxis: "PolarComponent", radiusAxis: "PolarComponent" }; var BUILTIN_CHARTS_MAP = { line: "LineChart", bar: "BarChart", pie: "PieChart", scatter: "ScatterChart", radar: "RadarChart", map: "MapChart", tree: "TreeChart", treemap: "TreemapChart", graph: "GraphChart", chord: "ChordChart", gauge: "GaugeChart", funnel: "FunnelChart", parallel: "ParallelChart", sankey: "SankeyChart", boxplot: "BoxplotChart", candlestick: "CandlestickChart", effectScatter: "EffectScatterChart", lines: "LinesChart", heatmap: "HeatmapChart", pictorialBar: "PictorialBarChart", themeRiver: "ThemeRiverChart", sunburst: "SunburstChart", custom: "CustomChart" }; var componetsMissingLogPrinted = {}; function checkMissingComponents(option) { each$12(option, function(componentOption, mainType) { if (!ComponentModel.hasClass(mainType)) { var componentImportName = BUITIN_COMPONENTS_MAP[mainType]; if (componentImportName && !componetsMissingLogPrinted[componentImportName]) { error("Component " + mainType + " is used but not imported.\nimport { " + componentImportName + " } from 'echarts/components';\necharts.use([" + componentImportName + "]);"); componetsMissingLogPrinted[componentImportName] = true; } } }); } var GlobalModel = function(_super) { __extends(GlobalModel, _super); function GlobalModel() { return _super !== null && _super.apply(this, arguments) || this; } GlobalModel.prototype.init = function(option, parentModel, ecModel, theme, locale, optionManager) { theme = theme || {}; this.option = null; this._theme = new Model(theme); this._locale = new Model(locale); this._optionManager = optionManager; }; GlobalModel.prototype.setOption = function(option, opts, optionPreprocessorFuncs) { assert(option != null, "option is null/undefined"); assert(option[OPTION_INNER_KEY] !== OPTION_INNER_VALUE, "please use chart.getOption()"); var innerOpt = normalizeSetOptionInput(opts); this._optionManager.setOption(option, optionPreprocessorFuncs, innerOpt); this._resetOption(null, innerOpt); }; /** * @param type null/undefined: reset all. * 'recreate': force recreate all. * 'timeline': only reset timeline option * 'media': only reset media query option * @return Whether option changed. */ GlobalModel.prototype.resetOption = function(type, opt) { return this._resetOption(type, normalizeSetOptionInput(opt)); }; GlobalModel.prototype._resetOption = function(type, opt) { var optionChanged = false; var optionManager = this._optionManager; if (!type || type === "recreate") { var baseOption = optionManager.mountOption(type === "recreate"); checkMissingComponents(baseOption); if (!this.option || type === "recreate") initBase(this, baseOption); else { this.restoreData(); this._mergeOption(baseOption, opt); } optionChanged = true; } if (type === "timeline" || type === "media") this.restoreData(); if (!type || type === "recreate" || type === "timeline") { var timelineOption = optionManager.getTimelineOption(this); if (timelineOption) { optionChanged = true; this._mergeOption(timelineOption, opt); } } if (!type || type === "recreate" || type === "media") { var mediaOptions = optionManager.getMediaOption(this); if (mediaOptions.length) each$12(mediaOptions, function(mediaOption) { optionChanged = true; this._mergeOption(mediaOption, opt); }, this); } return optionChanged; }; GlobalModel.prototype.mergeOption = function(option) { this._mergeOption(option, null); }; GlobalModel.prototype._mergeOption = function(newOption, opt) { var option = this.option; var componentsMap = this._componentsMap; var componentsCount = this._componentsCount; var newCmptTypes = []; var newCmptTypeMap = createHashMap(); var replaceMergeMainTypeMap = opt && opt.replaceMergeMainTypeMap; resetSourceDefaulter(this); each$12(newOption, function(componentOption, mainType) { if (componentOption == null) return; if (!ComponentModel.hasClass(mainType)) option[mainType] = option[mainType] == null ? clone$4(componentOption) : merge(option[mainType], componentOption, true); else if (mainType) { newCmptTypes.push(mainType); newCmptTypeMap.set(mainType, true); } }); if (replaceMergeMainTypeMap) replaceMergeMainTypeMap.each(function(val, mainTypeInReplaceMerge) { if (ComponentModel.hasClass(mainTypeInReplaceMerge) && !newCmptTypeMap.get(mainTypeInReplaceMerge)) { newCmptTypes.push(mainTypeInReplaceMerge); newCmptTypeMap.set(mainTypeInReplaceMerge, true); } }); ComponentModel.topologicalTravel(newCmptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this); function visitComponent(mainType) { var newCmptOptionList = concatInternalOptions(this, mainType, normalizeToArray(newOption[mainType])); var oldCmptList = componentsMap.get(mainType); var mappingResult = mappingToExists(oldCmptList, newCmptOptionList, !oldCmptList ? "replaceAll" : replaceMergeMainTypeMap && replaceMergeMainTypeMap.get(mainType) ? "replaceMerge" : "normalMerge"); setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel); option[mainType] = null; componentsMap.set(mainType, null); componentsCount.set(mainType, 0); var optionsByMainType = []; var cmptsByMainType = []; var cmptsCountByMainType = 0; var tooltipExists; var tooltipWarningLogged; each$12(mappingResult, function(resultItem, index) { var componentModel = resultItem.existing; var newCmptOption = resultItem.newOption; if (!newCmptOption) { if (componentModel) { componentModel.mergeOption({}, this); componentModel.optionUpdated({}, false); } } else { var isSeriesType = mainType === "series"; var ComponentModelClass = ComponentModel.getClass(mainType, resultItem.keyInfo.subType, !isSeriesType); if (!ComponentModelClass) { var subType = resultItem.keyInfo.subType; var seriesImportName = BUILTIN_CHARTS_MAP[subType]; if (!componetsMissingLogPrinted[subType]) { componetsMissingLogPrinted[subType] = true; if (seriesImportName) error("Series " + subType + " is used but not imported.\nimport { " + seriesImportName + " } from 'echarts/charts';\necharts.use([" + seriesImportName + "]);"); else error("Unknown series " + subType); } return; } if (mainType === "tooltip") { if (tooltipExists) { if (!tooltipWarningLogged) { warn("Currently only one tooltip component is allowed."); tooltipWarningLogged = true; } return; } tooltipExists = true; } if (componentModel && componentModel.constructor === ComponentModelClass) { componentModel.name = resultItem.keyInfo.name; componentModel.mergeOption(newCmptOption, this); componentModel.optionUpdated(newCmptOption, false); } else { var extraOpt = extend({ componentIndex: index }, resultItem.keyInfo); componentModel = new ComponentModelClass(newCmptOption, this, this, extraOpt); extend(componentModel, extraOpt); if (resultItem.brandNew) componentModel.__requireNewView = true; componentModel.init(newCmptOption, this, this); componentModel.optionUpdated(null, true); } } if (componentModel) { optionsByMainType.push(componentModel.option); cmptsByMainType.push(componentModel); cmptsCountByMainType++; } else { optionsByMainType.push(void 0); cmptsByMainType.push(void 0); } }, this); option[mainType] = optionsByMainType; componentsMap.set(mainType, cmptsByMainType); componentsCount.set(mainType, cmptsCountByMainType); if (mainType === "series") reCreateSeriesIndices(this); } if (!this._seriesIndices) reCreateSeriesIndices(this); }; /** * Get option for output (cloned option and inner info removed) */ GlobalModel.prototype.getOption = function() { var option = clone$4(this.option); each$12(option, function(optInMainType, mainType) { if (ComponentModel.hasClass(mainType)) { var opts = normalizeToArray(optInMainType); var realLen = opts.length; var metNonInner = false; for (var i = realLen - 1; i >= 0; i--) if (opts[i] && !isComponentIdInternal(opts[i])) metNonInner = true; else { opts[i] = null; !metNonInner && realLen--; } opts.length = realLen; option[mainType] = opts; } }); delete option[OPTION_INNER_KEY]; return option; }; GlobalModel.prototype.setTheme = function(theme) { this._theme = new Model(theme); this._resetOption("recreate", null); }; GlobalModel.prototype.getTheme = function() { return this._theme; }; GlobalModel.prototype.getLocaleModel = function() { return this._locale; }; GlobalModel.prototype.setUpdatePayload = function(payload) { this._payload = payload; }; GlobalModel.prototype.getUpdatePayload = function() { return this._payload; }; /** * @param idx If not specified, return the first one. */ GlobalModel.prototype.getComponent = function(mainType, idx) { var list = this._componentsMap.get(mainType); if (list) { var cmpt = list[idx || 0]; if (cmpt) return cmpt; else if (idx == null) { for (var i = 0; i < list.length; i++) if (list[i]) return list[i]; } } }; /** * @return Never be null/undefined. */ GlobalModel.prototype.queryComponents = function(condition) { var mainType = condition.mainType; if (!mainType) return []; var index = condition.index; var id = condition.id; var name = condition.name; var cmpts = this._componentsMap.get(mainType); if (!cmpts || !cmpts.length) return []; var result; if (index != null) { result = []; each$12(normalizeToArray(index), function(idx) { cmpts[idx] && result.push(cmpts[idx]); }); } else if (id != null) result = queryByIdOrName("id", id, cmpts); else if (name != null) result = queryByIdOrName("name", name, cmpts); else result = filter(cmpts, function(cmpt) { return !!cmpt; }); return filterBySubType(result, condition); }; /** * The interface is different from queryComponents, * which is convenient for inner usage. * * @usage * let result = findComponents( * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}} * ); * let result = findComponents( * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}} * ); * let result = findComponents( * {mainType: 'series', * filter: function (model, index) {...}} * ); * // result like [component0, component1, ...] */ GlobalModel.prototype.findComponents = function(condition) { var query = condition.query; var mainType = condition.mainType; var queryCond = getQueryCond(query); return doFilter(filterBySubType(queryCond ? this.queryComponents(queryCond) : filter(this._componentsMap.get(mainType), function(cmpt) { return !!cmpt; }), condition)); function getQueryCond(q) { var indexAttr = mainType + "Index"; var idAttr = mainType + "Id"; var nameAttr = mainType + "Name"; return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? { mainType, index: q[indexAttr], id: q[idAttr], name: q[nameAttr] } : null; } function doFilter(res) { return condition.filter ? filter(res, condition.filter) : res; } }; GlobalModel.prototype.eachComponent = function(mainType, cb, context) { var componentsMap = this._componentsMap; if (isFunction(mainType)) { var ctxForAll_1 = cb; var cbForAll_1 = mainType; componentsMap.each(function(cmpts, componentType) { for (var i = 0; cmpts && i < cmpts.length; i++) { var cmpt = cmpts[i]; cmpt && cbForAll_1.call(ctxForAll_1, componentType, cmpt, cmpt.componentIndex); } }); } else { var cmpts = isString(mainType) ? componentsMap.get(mainType) : isObject$3(mainType) ? this.findComponents(mainType) : null; for (var i = 0; cmpts && i < cmpts.length; i++) { var cmpt = cmpts[i]; cmpt && cb.call(context, cmpt, cmpt.componentIndex); } } }; /** * Get series list before filtered by name. */ GlobalModel.prototype.getSeriesByName = function(name) { var nameStr = convertOptionIdName(name, null); return filter(this._componentsMap.get("series"), function(oneSeries) { return !!oneSeries && nameStr != null && oneSeries.name === nameStr; }); }; /** * Get series list before filtered by index. */ GlobalModel.prototype.getSeriesByIndex = function(seriesIndex) { return this._componentsMap.get("series")[seriesIndex]; }; /** * Get series list before filtered by type. * FIXME: rename to getRawSeriesByType? */ GlobalModel.prototype.getSeriesByType = function(subType) { return filter(this._componentsMap.get("series"), function(oneSeries) { return !!oneSeries && oneSeries.subType === subType; }); }; /** * Get all series before filtered. */ GlobalModel.prototype.getSeries = function() { return filter(this._componentsMap.get("series"), function(oneSeries) { return !!oneSeries; }); }; /** * Count series before filtered. */ GlobalModel.prototype.getSeriesCount = function() { return this._componentsCount.get("series"); }; /** * After filtering, series may be different * from raw series. */ GlobalModel.prototype.eachSeries = function(cb, context) { assertSeriesInitialized(this); each$12(this._seriesIndices, function(rawSeriesIndex) { var series = this._componentsMap.get("series")[rawSeriesIndex]; cb.call(context, series, rawSeriesIndex); }, this); }; /** * Iterate raw series before filtered. */ GlobalModel.prototype.eachRawSeries = function(cb, context) { each$12(this._componentsMap.get("series"), function(series) { series && cb.call(context, series, series.componentIndex); }); }; /** * After filtering, series may be different. * from raw series. */ GlobalModel.prototype.eachSeriesByType = function(subType, cb, context) { assertSeriesInitialized(this); each$12(this._seriesIndices, function(rawSeriesIndex) { var series = this._componentsMap.get("series")[rawSeriesIndex]; if (series.subType === subType) cb.call(context, series, rawSeriesIndex); }, this); }; /** * Iterate raw series before filtered of given type. */ GlobalModel.prototype.eachRawSeriesByType = function(subType, cb, context) { return each$12(this.getSeriesByType(subType), cb, context); }; /** * It means "filtered out". */ GlobalModel.prototype.isSeriesFiltered = function(seriesModel) { assertSeriesInitialized(this); return this._seriesIndicesMap.get(seriesModel.componentIndex) == null; }; GlobalModel.prototype.getCurrentSeriesIndices = function() { return (this._seriesIndices || []).slice(); }; GlobalModel.prototype.filterSeries = function(cb, context) { assertSeriesInitialized(this); var newSeriesIndices = []; each$12(this._seriesIndices, function(seriesRawIdx) { var series = this._componentsMap.get("series")[seriesRawIdx]; cb.call(context, series, seriesRawIdx) && newSeriesIndices.push(seriesRawIdx); }, this); this._seriesIndices = newSeriesIndices; this._seriesIndicesMap = createHashMap(newSeriesIndices); }; GlobalModel.prototype.restoreData = function(payload) { reCreateSeriesIndices(this); var componentsMap = this._componentsMap; var componentTypes = []; componentsMap.each(function(components, componentType) { if (ComponentModel.hasClass(componentType)) componentTypes.push(componentType); }); ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function(componentType) { each$12(componentsMap.get(componentType), function(component) { if (component && (componentType !== "series" || !isNotTargetSeries(component, payload))) component.restoreData(); }); }); }; GlobalModel.internalField = function() { reCreateSeriesIndices = function(ecModel) { var seriesIndices = ecModel._seriesIndices = []; each$12(ecModel._componentsMap.get("series"), function(series) { series && seriesIndices.push(series.componentIndex); }); ecModel._seriesIndicesMap = createHashMap(seriesIndices); }; assertSeriesInitialized = function(ecModel) { if (!ecModel._seriesIndices) throw new Error("Option should contains series."); }; initBase = function(ecModel, baseOption) { ecModel.option = {}; ecModel.option[OPTION_INNER_KEY] = OPTION_INNER_VALUE; ecModel._componentsMap = createHashMap({ series: [] }); ecModel._componentsCount = createHashMap(); var airaOption = baseOption.aria; if (isObject$3(airaOption) && airaOption.enabled == null) airaOption.enabled = true; mergeTheme(baseOption, ecModel._theme.option); merge(baseOption, globalDefault_default, false); ecModel._mergeOption(baseOption, null); }; }(); return GlobalModel; }(Model); function isNotTargetSeries(seriesModel, payload) { if (payload) { var index = payload.seriesIndex; var id = payload.seriesId; var name_1 = payload.seriesName; return index != null && seriesModel.componentIndex !== index || id != null && seriesModel.id !== id || name_1 != null && seriesModel.name !== name_1; } } function mergeTheme(option, theme) { var notMergeColorLayer = option.color && !option.colorLayer; each$12(theme, function(themeItem, name) { if (name === "colorLayer" && notMergeColorLayer || name === "color" && option.color) return; if (!ComponentModel.hasClass(name)) { if (typeof themeItem === "object") option[name] = !option[name] ? clone$4(themeItem) : merge(option[name], themeItem, false); else if (option[name] == null) option[name] = themeItem; } }); } function queryByIdOrName(attr, idOrName, cmpts) { if (isArray$1(idOrName)) { var keyMap_1 = createHashMap(); each$12(idOrName, function(idOrNameItem) { if (idOrNameItem != null) convertOptionIdName(idOrNameItem, null) != null && keyMap_1.set(idOrNameItem, true); }); return filter(cmpts, function(cmpt) { return cmpt && keyMap_1.get(cmpt[attr]); }); } else { var idName_1 = convertOptionIdName(idOrName, null); return filter(cmpts, function(cmpt) { return cmpt && idName_1 != null && cmpt[attr] === idName_1; }); } } function filterBySubType(components, condition) { return condition.hasOwnProperty("subType") ? filter(components, function(cmpt) { return cmpt && cmpt.subType === condition.subType; }) : components; } function normalizeSetOptionInput(opts) { var replaceMergeMainTypeMap = createHashMap(); opts && each$12(normalizeToArray(opts.replaceMerge), function(mainType) { assert(ComponentModel.hasClass(mainType), "\"" + mainType + "\" is not valid component main type in \"replaceMerge\""); replaceMergeMainTypeMap.set(mainType, true); }); return { replaceMergeMainTypeMap }; } mixin(GlobalModel, PaletteMixin); //#endregion //#region node_modules/echarts/lib/model/OptionManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var QUERY_REG = /^(min|max)?(.+)$/; /** * TERM EXPLANATIONS: * See `ECOption` and `ECUnitOption` in `src/util/types.ts`. */ var OptionManager = function() { function OptionManager(api) { this._timelineOptions = []; this._mediaList = []; /** * -1, means default. * empty means no media. */ this._currentMediaIndices = []; this._api = api; } OptionManager.prototype.setOption = function(rawOption, optionPreprocessorFuncs, opt) { if (rawOption) { each$12(normalizeToArray(rawOption.series), function(series) { series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data); }); each$12(normalizeToArray(rawOption.dataset), function(dataset) { dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source); }); } rawOption = clone$4(rawOption); var optionBackup = this._optionBackup; var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs, !optionBackup); this._newBaseOption = newParsedOption.baseOption; if (optionBackup) { if (newParsedOption.timelineOptions.length) optionBackup.timelineOptions = newParsedOption.timelineOptions; if (newParsedOption.mediaList.length) optionBackup.mediaList = newParsedOption.mediaList; if (newParsedOption.mediaDefault) optionBackup.mediaDefault = newParsedOption.mediaDefault; } else this._optionBackup = newParsedOption; }; OptionManager.prototype.mountOption = function(isRecreate) { var optionBackup = this._optionBackup; this._timelineOptions = optionBackup.timelineOptions; this._mediaList = optionBackup.mediaList; this._mediaDefault = optionBackup.mediaDefault; this._currentMediaIndices = []; return clone$4(isRecreate ? optionBackup.baseOption : this._newBaseOption); }; OptionManager.prototype.getTimelineOption = function(ecModel) { var option; var timelineOptions = this._timelineOptions; if (timelineOptions.length) { var timelineModel = ecModel.getComponent("timeline"); if (timelineModel) option = clone$4(timelineOptions[timelineModel.getCurrentIndex()]); } return option; }; OptionManager.prototype.getMediaOption = function(ecModel) { var ecWidth = this._api.getWidth(); var ecHeight = this._api.getHeight(); var mediaList = this._mediaList; var mediaDefault = this._mediaDefault; var indices = []; var result = []; if (!mediaList.length && !mediaDefault) return result; for (var i = 0, len = mediaList.length; i < len; i++) if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) indices.push(i); if (!indices.length && mediaDefault) indices = [-1]; if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) result = map$1(indices, function(index) { return clone$4(index === -1 ? mediaDefault.option : mediaList[index].option); }); this._currentMediaIndices = indices; return result; }; return OptionManager; }(); /** * [RAW_OPTION_PATTERNS] * (Note: "series: []" represents all other props in `ECUnitOption`) * * (1) No prop "baseOption" declared: * Root option is used as "baseOption" (except prop "options" and "media"). * ```js * option = { * series: [], * timeline: {}, * options: [], * }; * option = { * series: [], * media: {}, * }; * option = { * series: [], * timeline: {}, * options: [], * media: {}, * } * ``` * * (2) Prop "baseOption" declared: * If "baseOption" declared, `ECUnitOption` props can only be declared * inside "baseOption" except prop "timeline" (compat ec2). * ```js * option = { * baseOption: { * timeline: {}, * series: [], * }, * options: [] * }; * option = { * baseOption: { * series: [], * }, * media: [] * }; * option = { * baseOption: { * timeline: {}, * series: [], * }, * options: [] * media: [] * }; * option = { * // ec3 compat ec2: allow (only) `timeline` declared * // outside baseOption. Keep this setting for compat. * timeline: {}, * baseOption: { * series: [], * }, * options: [], * media: [] * }; * ``` */ function parseRawOption(rawOption, optionPreprocessorFuncs, isNew) { var mediaList = []; var mediaDefault; var baseOption; var declaredBaseOption = rawOption.baseOption; var timelineOnRoot = rawOption.timeline; var timelineOptionsOnRoot = rawOption.options; var mediaOnRoot = rawOption.media; var hasMedia = !!rawOption.media; var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline); if (declaredBaseOption) { baseOption = declaredBaseOption; if (!baseOption.timeline) baseOption.timeline = timelineOnRoot; } else { if (hasTimeline || hasMedia) rawOption.options = rawOption.media = null; baseOption = rawOption; } if (hasMedia) { if (isArray$1(mediaOnRoot)) each$12(mediaOnRoot, function(singleMedia) { if (singleMedia && !singleMedia.option && isObject$3(singleMedia.query) && isObject$3(singleMedia.query.option)) error("Illegal media option. Must be like { media: [ { query: {}, option: {} } ] }"); if (singleMedia && singleMedia.option) { if (singleMedia.query) mediaList.push(singleMedia); else if (!mediaDefault) mediaDefault = singleMedia; } }); else error("Illegal media option. Must be an array. Like { media: [ {...}, {...} ] }"); } doPreprocess(baseOption); each$12(timelineOptionsOnRoot, function(option) { return doPreprocess(option); }); each$12(mediaList, function(media) { return doPreprocess(media.option); }); function doPreprocess(option) { each$12(optionPreprocessorFuncs, function(preProcess) { preProcess(option, isNew); }); } return { baseOption, timelineOptions: timelineOptionsOnRoot || [], mediaDefault, mediaList }; } /** * @see * Support: width, height, aspectRatio * Can use max or min as prefix. */ function applyMediaQuery(query, ecWidth, ecHeight) { var realMap = { width: ecWidth, height: ecHeight, aspectratio: ecWidth / ecHeight }; var applicable = true; each$12(query, function(value, attr) { var matched = attr.match(QUERY_REG); if (!matched || !matched[1] || !matched[2]) return; var operator = matched[1]; if (!compare(realMap[matched[2].toLowerCase()], value, operator)) applicable = false; }); return applicable; } function compare(real, expect, operator) { if (operator === "min") return real >= expect; else if (operator === "max") return real <= expect; else return real === expect; } function indicesEquals(indices1, indices2) { return indices1.join(",") === indices2.join(","); } //#endregion //#region node_modules/echarts/lib/preprocessor/helper/compatStyle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each$10 = each$12; var isObject$2 = isObject$3; var POSSIBLE_STYLES = [ "areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine" ]; function compatEC2ItemStyle(opt) { var itemStyleOpt = opt && opt.itemStyle; if (!itemStyleOpt) return; for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) { var styleName = POSSIBLE_STYLES[i]; var normalItemStyleOpt = itemStyleOpt.normal; var emphasisItemStyleOpt = itemStyleOpt.emphasis; if (normalItemStyleOpt && normalItemStyleOpt[styleName]) { deprecateReplaceLog("itemStyle.normal." + styleName, styleName); opt[styleName] = opt[styleName] || {}; if (!opt[styleName].normal) opt[styleName].normal = normalItemStyleOpt[styleName]; else merge(opt[styleName].normal, normalItemStyleOpt[styleName]); normalItemStyleOpt[styleName] = null; } if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) { deprecateReplaceLog("itemStyle.emphasis." + styleName, "emphasis." + styleName); opt[styleName] = opt[styleName] || {}; if (!opt[styleName].emphasis) opt[styleName].emphasis = emphasisItemStyleOpt[styleName]; else merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]); emphasisItemStyleOpt[styleName] = null; } } } function convertNormalEmphasis(opt, optType, useExtend) { if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) { var normalOpt = opt[optType].normal; var emphasisOpt = opt[optType].emphasis; if (normalOpt) { deprecateLog("'normal' hierarchy in " + optType + " has been removed since 4.0. All style properties are configured in " + optType + " directly now."); if (useExtend) { opt[optType].normal = opt[optType].emphasis = null; defaults(opt[optType], normalOpt); } else opt[optType] = normalOpt; } if (emphasisOpt) { deprecateLog(optType + ".emphasis has been changed to emphasis." + optType + " since 4.0"); opt.emphasis = opt.emphasis || {}; opt.emphasis[optType] = emphasisOpt; if (emphasisOpt.focus) opt.emphasis.focus = emphasisOpt.focus; if (emphasisOpt.blurScope) opt.emphasis.blurScope = emphasisOpt.blurScope; } } } function removeEC3NormalStatus(opt) { convertNormalEmphasis(opt, "itemStyle"); convertNormalEmphasis(opt, "lineStyle"); convertNormalEmphasis(opt, "areaStyle"); convertNormalEmphasis(opt, "label"); convertNormalEmphasis(opt, "labelLine"); convertNormalEmphasis(opt, "upperLabel"); convertNormalEmphasis(opt, "edgeLabel"); } function compatTextStyle(opt, propName) { var labelOptSingle = isObject$2(opt) && opt[propName]; var textStyle = isObject$2(labelOptSingle) && labelOptSingle.textStyle; if (textStyle) { deprecateLog("textStyle hierarchy in " + propName + " has been removed since 4.0. All textStyle properties are configured in " + propName + " directly now."); for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) { var textPropName = TEXT_STYLE_OPTIONS[i]; if (textStyle.hasOwnProperty(textPropName)) labelOptSingle[textPropName] = textStyle[textPropName]; } } } function compatEC3CommonStyles(opt) { if (opt) { removeEC3NormalStatus(opt); compatTextStyle(opt, "label"); opt.emphasis && compatTextStyle(opt.emphasis, "label"); } } function processSeries(seriesOpt) { if (!isObject$2(seriesOpt)) return; compatEC2ItemStyle(seriesOpt); removeEC3NormalStatus(seriesOpt); compatTextStyle(seriesOpt, "label"); compatTextStyle(seriesOpt, "upperLabel"); compatTextStyle(seriesOpt, "edgeLabel"); if (seriesOpt.emphasis) { compatTextStyle(seriesOpt.emphasis, "label"); compatTextStyle(seriesOpt.emphasis, "upperLabel"); compatTextStyle(seriesOpt.emphasis, "edgeLabel"); } var markPoint = seriesOpt.markPoint; if (markPoint) { compatEC2ItemStyle(markPoint); compatEC3CommonStyles(markPoint); } var markLine = seriesOpt.markLine; if (markLine) { compatEC2ItemStyle(markLine); compatEC3CommonStyles(markLine); } var markArea = seriesOpt.markArea; if (markArea) compatEC3CommonStyles(markArea); var data = seriesOpt.data; if (seriesOpt.type === "graph") { data = data || seriesOpt.nodes; var edgeData = seriesOpt.links || seriesOpt.edges; if (edgeData && !isTypedArray(edgeData)) for (var i = 0; i < edgeData.length; i++) compatEC3CommonStyles(edgeData[i]); each$12(seriesOpt.categories, function(opt) { removeEC3NormalStatus(opt); }); } if (data && !isTypedArray(data)) for (var i = 0; i < data.length; i++) compatEC3CommonStyles(data[i]); markPoint = seriesOpt.markPoint; if (markPoint && markPoint.data) { var mpData = markPoint.data; for (var i = 0; i < mpData.length; i++) compatEC3CommonStyles(mpData[i]); } markLine = seriesOpt.markLine; if (markLine && markLine.data) { var mlData = markLine.data; for (var i = 0; i < mlData.length; i++) if (isArray$1(mlData[i])) { compatEC3CommonStyles(mlData[i][0]); compatEC3CommonStyles(mlData[i][1]); } else compatEC3CommonStyles(mlData[i]); } if (seriesOpt.type === "gauge") { compatTextStyle(seriesOpt, "axisLabel"); compatTextStyle(seriesOpt, "title"); compatTextStyle(seriesOpt, "detail"); } else if (seriesOpt.type === "treemap") { convertNormalEmphasis(seriesOpt.breadcrumb, "itemStyle"); each$12(seriesOpt.levels, function(opt) { removeEC3NormalStatus(opt); }); } else if (seriesOpt.type === "tree") removeEC3NormalStatus(seriesOpt.leaves); } function toArr(o) { return isArray$1(o) ? o : o ? [o] : []; } function toObj(o) { return (isArray$1(o) ? o[0] : o) || {}; } function globalCompatStyle(option, isTheme) { each$10(toArr(option.series), function(seriesOpt) { isObject$2(seriesOpt) && processSeries(seriesOpt); }); var axes = [ "xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar" ]; isTheme && axes.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"); each$10(axes, function(axisName) { each$10(toArr(option[axisName]), function(axisOpt) { if (axisOpt) { compatTextStyle(axisOpt, "axisLabel"); compatTextStyle(axisOpt.axisPointer, "label"); } }); }); each$10(toArr(option.parallel), function(parallelOpt) { var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault; compatTextStyle(parallelAxisDefault, "axisLabel"); compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, "label"); }); each$10(toArr(option.calendar), function(calendarOpt) { convertNormalEmphasis(calendarOpt, "itemStyle"); compatTextStyle(calendarOpt, "dayLabel"); compatTextStyle(calendarOpt, "monthLabel"); compatTextStyle(calendarOpt, "yearLabel"); }); each$10(toArr(option.radar), function(radarOpt) { compatTextStyle(radarOpt, "name"); if (radarOpt.name && radarOpt.axisName == null) { radarOpt.axisName = radarOpt.name; delete radarOpt.name; deprecateLog("name property in radar component has been changed to axisName"); } if (radarOpt.nameGap != null && radarOpt.axisNameGap == null) { radarOpt.axisNameGap = radarOpt.nameGap; delete radarOpt.nameGap; deprecateLog("nameGap property in radar component has been changed to axisNameGap"); } each$10(radarOpt.indicator, function(indicatorOpt) { if (indicatorOpt.text) deprecateReplaceLog("text", "name", "radar.indicator"); }); }); each$10(toArr(option.geo), function(geoOpt) { if (isObject$2(geoOpt)) { compatEC3CommonStyles(geoOpt); each$10(toArr(geoOpt.regions), function(regionObj) { compatEC3CommonStyles(regionObj); }); } }); each$10(toArr(option.timeline), function(timelineOpt) { compatEC3CommonStyles(timelineOpt); convertNormalEmphasis(timelineOpt, "label"); convertNormalEmphasis(timelineOpt, "itemStyle"); convertNormalEmphasis(timelineOpt, "controlStyle", true); var data = timelineOpt.data; isArray$1(data) && each$12(data, function(item) { if (isObject$3(item)) { convertNormalEmphasis(item, "label"); convertNormalEmphasis(item, "itemStyle"); } }); }); each$10(toArr(option.toolbox), function(toolboxOpt) { convertNormalEmphasis(toolboxOpt, "iconStyle"); each$10(toolboxOpt.feature, function(featureOpt) { convertNormalEmphasis(featureOpt, "iconStyle"); }); }); compatTextStyle(toObj(option.axisPointer), "label"); compatTextStyle(toObj(option.tooltip).axisPointer, "label"); } //#endregion //#region node_modules/echarts/lib/preprocessor/backwardCompat.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function get(opt, path) { var pathArr = path.split(","); var obj = opt; for (var i = 0; i < pathArr.length; i++) { obj = obj && obj[pathArr[i]]; if (obj == null) break; } return obj; } function set(opt, path, val, overwrite) { var pathArr = path.split(","); var obj = opt; var key; var i = 0; for (; i < pathArr.length - 1; i++) { key = pathArr[i]; if (obj[key] == null) obj[key] = {}; obj = obj[key]; } if (overwrite || obj[pathArr[i]] == null) obj[pathArr[i]] = val; } function compatLayoutProperties(option) { option && each$12(LAYOUT_PROPERTIES, function(prop) { if (prop[0] in option && !(prop[1] in option)) option[prop[1]] = option[prop[0]]; }); } var LAYOUT_PROPERTIES = [ ["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"] ]; var COMPATITABLE_COMPONENTS = [ "grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline" ]; var BAR_ITEM_STYLE_MAP = [ ["borderRadius", "barBorderRadius"], ["borderColor", "barBorderColor"], ["borderWidth", "barBorderWidth"] ]; function compatBarItemStyle(option) { var itemStyle = option && option.itemStyle; if (itemStyle) for (var i = 0; i < BAR_ITEM_STYLE_MAP.length; i++) { var oldName = BAR_ITEM_STYLE_MAP[i][1]; var newName = BAR_ITEM_STYLE_MAP[i][0]; if (itemStyle[oldName] != null) { itemStyle[newName] = itemStyle[oldName]; deprecateReplaceLog(oldName, newName); } } } function compatPieLabel(option) { if (!option) return; if (option.alignTo === "edge" && option.margin != null && option.edgeDistance == null) { deprecateReplaceLog("label.margin", "label.edgeDistance", "pie"); option.edgeDistance = option.margin; } } function compatSunburstState(option) { if (!option) return; if (option.downplay && !option.blur) { option.blur = option.downplay; deprecateReplaceLog("downplay", "blur", "sunburst"); } } function compatGraphFocus(option) { if (!option) return; if (option.focusNodeAdjacency != null) { option.emphasis = option.emphasis || {}; if (option.emphasis.focus == null) { deprecateReplaceLog("focusNodeAdjacency", "emphasis: { focus: 'adjacency'}", "graph/sankey"); option.emphasis.focus = "adjacency"; } } } function traverseTree(data, cb) { if (data) for (var i = 0; i < data.length; i++) { cb(data[i]); data[i] && traverseTree(data[i].children, cb); } } function globalBackwardCompat(option, isTheme) { globalCompatStyle(option, isTheme); option.series = normalizeToArray(option.series); each$12(option.series, function(seriesOpt) { if (!isObject$3(seriesOpt)) return; var seriesType = seriesOpt.type; if (seriesType === "line") { if (seriesOpt.clipOverflow != null) { seriesOpt.clip = seriesOpt.clipOverflow; deprecateReplaceLog("clipOverflow", "clip", "line"); } } else if (seriesType === "pie" || seriesType === "gauge") { if (seriesOpt.clockWise != null) { seriesOpt.clockwise = seriesOpt.clockWise; deprecateReplaceLog("clockWise", "clockwise"); } compatPieLabel(seriesOpt.label); var data = seriesOpt.data; if (data && !isTypedArray(data)) for (var i = 0; i < data.length; i++) compatPieLabel(data[i]); if (seriesOpt.hoverOffset != null) { seriesOpt.emphasis = seriesOpt.emphasis || {}; if (seriesOpt.emphasis.scaleSize = null) { deprecateReplaceLog("hoverOffset", "emphasis.scaleSize"); seriesOpt.emphasis.scaleSize = seriesOpt.hoverOffset; } } } else if (seriesType === "gauge") { var pointerColor = get(seriesOpt, "pointer.color"); pointerColor != null && set(seriesOpt, "itemStyle.color", pointerColor); } else if (seriesType === "bar") { compatBarItemStyle(seriesOpt); compatBarItemStyle(seriesOpt.backgroundStyle); compatBarItemStyle(seriesOpt.emphasis); var data = seriesOpt.data; if (data && !isTypedArray(data)) { for (var i = 0; i < data.length; i++) if (typeof data[i] === "object") { compatBarItemStyle(data[i]); compatBarItemStyle(data[i] && data[i].emphasis); } } } else if (seriesType === "sunburst") { var highlightPolicy = seriesOpt.highlightPolicy; if (highlightPolicy) { seriesOpt.emphasis = seriesOpt.emphasis || {}; if (!seriesOpt.emphasis.focus) { seriesOpt.emphasis.focus = highlightPolicy; deprecateReplaceLog("highlightPolicy", "emphasis.focus", "sunburst"); } } compatSunburstState(seriesOpt); traverseTree(seriesOpt.data, compatSunburstState); } else if (seriesType === "graph" || seriesType === "sankey") compatGraphFocus(seriesOpt); else if (seriesType === "map") { if (seriesOpt.mapType && !seriesOpt.map) { deprecateReplaceLog("mapType", "map", "map"); seriesOpt.map = seriesOpt.mapType; } if (seriesOpt.mapLocation) { deprecateLog("`mapLocation` is not used anymore."); defaults(seriesOpt, seriesOpt.mapLocation); } } if (seriesOpt.hoverAnimation != null) { seriesOpt.emphasis = seriesOpt.emphasis || {}; if (seriesOpt.emphasis && seriesOpt.emphasis.scale == null) { deprecateReplaceLog("hoverAnimation", "emphasis.scale"); seriesOpt.emphasis.scale = seriesOpt.hoverAnimation; } } compatLayoutProperties(seriesOpt); }); if (option.dataRange) option.visualMap = option.dataRange; each$12(COMPATITABLE_COMPONENTS, function(componentName) { var options = option[componentName]; if (options) { if (!isArray$1(options)) options = [options]; each$12(options, function(option) { compatLayoutProperties(option); }); } }); } //#endregion //#region node_modules/echarts/lib/processor/dataStack.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var dataStackStageHandler = createSimpleOverallStageHandler2(dataStack$1); function dataStack$1(ecModel) { var stackInfoMap = createHashMap(); ecModel.eachSeries(function(seriesModel) { var stack = seriesModel.get("stack"); if (stack) { var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []); var data = seriesModel.getData(); var stackInfo = { stackResultDimension: data.getCalculationInfo("stackResultDimension"), stackedOverDimension: data.getCalculationInfo("stackedOverDimension"), stackedDimension: data.getCalculationInfo("stackedDimension"), stackedByDimension: data.getCalculationInfo("stackedByDimension"), isStackedByIndex: data.getCalculationInfo("isStackedByIndex"), data, seriesModel }; if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) return; stackInfoList.push(stackInfo); } }); stackInfoMap.each(function(stackInfoList) { if (stackInfoList.length === 0) return; if ((stackInfoList[0].seriesModel.get("stackOrder") || "seriesAsc") === "seriesDesc") stackInfoList.reverse(); each$12(stackInfoList, function(stackInfo, index) { stackInfo.data.setCalculationInfo("stackedOnSeries", index > 0 ? stackInfoList[index - 1].seriesModel : null); }); calculateStack(stackInfoList); }); } function calculateStack(stackInfoList) { each$12(stackInfoList, function(targetStackInfo, idxInStack) { var resultVal = []; var resultNaN = [NaN, NaN]; var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension]; var targetData = targetStackInfo.data; var isStackedByIndex = targetStackInfo.isStackedByIndex; var stackStrategy = targetStackInfo.seriesModel.get("stackStrategy") || "samesign"; targetData.modify(dims, function(v0, v1, dataIndex) { var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); if (isNaN(sum)) return resultNaN; var byValue; var stackedDataRawIndex; if (isStackedByIndex) stackedDataRawIndex = targetData.getRawIndex(dataIndex); else byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex); var stackedOver = NaN; for (var j = idxInStack - 1; j >= 0; j--) { var stackInfo = stackInfoList[j]; if (!isStackedByIndex) stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue); if (stackedDataRawIndex >= 0) { var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex); if (stackStrategy === "all" || stackStrategy === "positive" && val > 0 || stackStrategy === "negative" && val < 0 || stackStrategy === "samesign" && sum >= 0 && val > 0 || stackStrategy === "samesign" && sum <= 0 && val < 0) { sum = addSafe(sum, val); stackedOver = val; break; } } } resultVal[0] = sum; resultVal[1] = stackedOver; return resultVal; }); }); } //#endregion //#region node_modules/echarts/lib/data/Source.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SourceImpl = function() { function SourceImpl(fields) { this.data = fields.data || (fields.sourceFormat === "keyedColumns" ? {} : []); this.sourceFormat = fields.sourceFormat || "unknown"; this.seriesLayoutBy = fields.seriesLayoutBy || "column"; this.startIndex = fields.startIndex || 0; this.dimensionsDetectedCount = fields.dimensionsDetectedCount; this.metaRawOption = fields.metaRawOption; var dimensionsDefine = this.dimensionsDefine = fields.dimensionsDefine; if (dimensionsDefine) for (var i = 0; i < dimensionsDefine.length; i++) { var dim = dimensionsDefine[i]; if (dim.type == null) { if (guessOrdinal(this, i) === BE_ORDINAL.Must) dim.type = "ordinal"; } } } return SourceImpl; }(); function isSourceInstance(val) { return val instanceof SourceImpl; } /** * Create a source from option. * NOTE: Created source is immutable. Don't change any properties in it. */ function createSource(sourceData, thisMetaRawOption, sourceFormat) { sourceFormat = sourceFormat || detectSourceFormat(sourceData); var seriesLayoutBy = thisMetaRawOption.seriesLayoutBy; var determined = determineSourceDimensions(sourceData, sourceFormat, seriesLayoutBy, thisMetaRawOption.sourceHeader, thisMetaRawOption.dimensions); return new SourceImpl({ data: sourceData, sourceFormat, seriesLayoutBy, dimensionsDefine: determined.dimensionsDefine, startIndex: determined.startIndex, dimensionsDetectedCount: determined.dimensionsDetectedCount, metaRawOption: clone$4(thisMetaRawOption) }); } /** * Wrap original series data for some compatibility cases. */ function createSourceFromSeriesDataOption(data) { return new SourceImpl({ data, sourceFormat: isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL }); } /** * Clone source but excludes source data. */ function cloneSourceShallow(source) { return new SourceImpl({ data: source.data, sourceFormat: source.sourceFormat, seriesLayoutBy: source.seriesLayoutBy, dimensionsDefine: clone$4(source.dimensionsDefine), startIndex: source.startIndex, dimensionsDetectedCount: source.dimensionsDetectedCount }); } /** * Note: An empty array will be detected as `SOURCE_FORMAT_ARRAY_ROWS`. */ function detectSourceFormat(data) { var sourceFormat = SOURCE_FORMAT_UNKNOWN; if (isTypedArray(data)) sourceFormat = SOURCE_FORMAT_TYPED_ARRAY; else if (isArray$1(data)) { if (data.length === 0) sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; for (var i = 0, len = data.length; i < len; i++) { var item = data[i]; if (item == null) continue; else if (isArray$1(item) || isTypedArray(item)) { sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; break; } else if (isObject$3(item)) { sourceFormat = SOURCE_FORMAT_OBJECT_ROWS; break; } } } else if (isObject$3(data)) { for (var key in data) if (hasOwn(data, key) && isArrayLike(data[key])) { sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS; break; } } return sourceFormat; } /** * Determine the source definitions from data standalone dimensions definitions * are not specified. */ function determineSourceDimensions(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) { var dimensionsDetectedCount; var startIndex; if (!data) return { dimensionsDefine: normalizeDimensionsOption(dimensionsDefine), startIndex, dimensionsDetectedCount }; if (sourceFormat === "arrayRows") { var dataArrayRows = data; if (sourceHeader === "auto" || sourceHeader == null) arrayRowsTravelFirst(function(val) { if (val != null && val !== "-") { if (isString(val)) startIndex ??= 1; else startIndex = 0; } }, seriesLayoutBy, dataArrayRows, 10); else startIndex = isNumber(sourceHeader) ? sourceHeader : sourceHeader ? 1 : 0; if (!dimensionsDefine && startIndex === 1) { dimensionsDefine = []; arrayRowsTravelFirst(function(val, index) { dimensionsDefine[index] = val != null ? val + "" : ""; }, seriesLayoutBy, dataArrayRows, Infinity); } dimensionsDetectedCount = dimensionsDefine ? dimensionsDefine.length : seriesLayoutBy === "row" ? dataArrayRows.length : dataArrayRows[0] ? dataArrayRows[0].length : null; } else if (sourceFormat === "objectRows") { if (!dimensionsDefine) dimensionsDefine = objectRowsCollectDimensions(data); } else if (sourceFormat === "keyedColumns") { if (!dimensionsDefine) { dimensionsDefine = []; each$12(data, function(colArr, key) { dimensionsDefine.push(key); }); } } else if (sourceFormat === "original") { var value0 = getDataItemValue(data[0]); dimensionsDetectedCount = isArray$1(value0) && value0.length || 1; } else if (sourceFormat === "typedArray") assert(!!dimensionsDefine, "dimensions must be given if data is TypedArray."); return { startIndex, dimensionsDefine: normalizeDimensionsOption(dimensionsDefine), dimensionsDetectedCount }; } function objectRowsCollectDimensions(data) { var firstIndex = 0; var obj; while (firstIndex < data.length && !(obj = data[firstIndex++])); if (obj) return keys(obj); } function normalizeDimensionsOption(dimensionsDefine) { if (!dimensionsDefine) return; var nameMap = createHashMap(); return map$1(dimensionsDefine, function(rawItem, index) { rawItem = isObject$3(rawItem) ? rawItem : { name: rawItem }; var item = { name: rawItem.name, displayName: rawItem.displayName, type: rawItem.type }; if (item.name == null) return item; item.name += ""; if (item.displayName == null) item.displayName = item.name; var exist = nameMap.get(item.name); if (!exist) nameMap.set(item.name, { count: 1 }); else item.name += "-" + exist.count++; return item; }); } function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) { if (seriesLayoutBy === "row") for (var i = 0; i < data.length && i < maxLoop; i++) cb(data[i] ? data[i][0] : null, i); else { var value0 = data[0] || []; for (var i = 0; i < value0.length && i < maxLoop; i++) cb(value0[i], i); } } function shouldRetrieveDataByName(source) { var sourceFormat = source.sourceFormat; return sourceFormat === "objectRows" || sourceFormat === "keyedColumns"; } //#endregion //#region node_modules/echarts/lib/data/helper/dataProvider.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var _a; var _b; var _c; var _d; var providerMethods; var mountMethods; /** * If normal array used, mutable chunk size is supported. * If typed array used, chunk size must be fixed. */ var DefaultDataProvider = function() { function DefaultDataProvider(sourceParam, dimSize) { var source = !isSourceInstance(sourceParam) ? createSourceFromSeriesDataOption(sourceParam) : sourceParam; this._source = source; var data = this._data = source.data; var sourceFormat = source.sourceFormat; var seriesLayoutBy = source.seriesLayoutBy; if (sourceFormat === "typedArray") { if (dimSize == null) throw new Error("Typed array data must specify dimension size"); this._offset = 0; this._dimSize = dimSize; this._data = data; } var validator = rawSourceDataValidatorMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; validator && validator(data, source.dimensionsDefine); mountMethods(this, data, source); } DefaultDataProvider.prototype.getSource = function() { return this._source; }; DefaultDataProvider.prototype.count = function() { return 0; }; DefaultDataProvider.prototype.getItem = function(idx, out) {}; DefaultDataProvider.prototype.appendData = function(newData) {}; DefaultDataProvider.prototype.clean = function() {}; DefaultDataProvider.protoInitialize = function() { var proto = DefaultDataProvider.prototype; proto.pure = false; proto.persistent = true; }(); DefaultDataProvider.internalField = function() { var _a; mountMethods = function(provider, data, source) { var sourceFormat = source.sourceFormat; var seriesLayoutBy = source.seriesLayoutBy; var startIndex = source.startIndex; var dimsDef = source.dimensionsDefine; var methods = providerMethods[getMethodMapKey(sourceFormat, seriesLayoutBy)]; assert(methods, "Invalide sourceFormat: " + sourceFormat); extend(provider, methods); if (sourceFormat === "typedArray") { provider.getItem = getItemForTypedArray; provider.count = countForTypedArray; provider.fillStorage = fillStorageForTypedArray; } else { provider.getItem = bind$1(getRawSourceItemGetter(sourceFormat, seriesLayoutBy), null, data, startIndex, dimsDef); provider.count = bind$1(getRawSourceDataCounter(sourceFormat, seriesLayoutBy), null, data, startIndex, dimsDef); } }; var getItemForTypedArray = function(idx, out) { idx = idx - this._offset; out = out || []; var data = this._data; var dimSize = this._dimSize; var offset = dimSize * idx; for (var i = 0; i < dimSize; i++) out[i] = data[offset + i]; return out; }; var fillStorageForTypedArray = function(start, end, storage, extent) { var data = this._data; var dimSize = this._dimSize; for (var dim = 0; dim < dimSize; dim++) { var dimExtent = extent[dim]; var min = dimExtent[0] == null ? Infinity : dimExtent[0]; var max = dimExtent[1] == null ? -Infinity : dimExtent[1]; var count = end - start; var arr = storage[dim]; for (var i = 0; i < count; i++) { var val = data[i * dimSize + dim]; arr[start + i] = val; val < min && (min = val); val > max && (max = val); } dimExtent[0] = min; dimExtent[1] = max; } }; var countForTypedArray = function() { return this._data ? this._data.length / this._dimSize : 0; }; providerMethods = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = { pure: true, appendData: appendDataSimply }, _a[SOURCE_FORMAT_ARRAY_ROWS + "_row"] = { pure: true, appendData: function() { throw new Error("Do not support appendData when set seriesLayoutBy: \"row\"."); } }, _a[SOURCE_FORMAT_OBJECT_ROWS] = { pure: true, appendData: appendDataSimply }, _a[SOURCE_FORMAT_KEYED_COLUMNS] = { pure: true, appendData: function(newData) { var data = this._data; each$12(newData, function(newCol, key) { var oldCol = data[key] || (data[key] = []); for (var i = 0; i < (newCol || []).length; i++) oldCol.push(newCol[i]); }); } }, _a[SOURCE_FORMAT_ORIGINAL] = { appendData: appendDataSimply }, _a[SOURCE_FORMAT_TYPED_ARRAY] = { persistent: false, pure: true, appendData: function(newData) { assert(isTypedArray(newData), "Added data must be TypedArray if data in initialization is TypedArray"); this._data = newData; }, clean: function() { this._offset += this.count(); this._data = null; } }, _a); function appendDataSimply(newData) { for (var i = 0; i < newData.length; i++) this._data.push(newData[i]); } }(); return DefaultDataProvider; }(); var validateSimply = function(rawData) { if (!isArray$1(rawData)) error("series.data or dataset.source must be an array."); }; /** * Only run in dev mode - hint users for debug. */ var rawSourceDataValidatorMap = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = validateSimply, _a[SOURCE_FORMAT_ARRAY_ROWS + "_row"] = validateSimply, _a[SOURCE_FORMAT_OBJECT_ROWS] = validateSimply, _a[SOURCE_FORMAT_KEYED_COLUMNS] = function(rawData, dimsDef) { for (var i = 0; i < dimsDef.length; i++) if (dimsDef[i].name == null) error("dimension name must not be null/undefined."); }, _a[SOURCE_FORMAT_ORIGINAL] = validateSimply, _a); var getItemSimply = function(rawData, startIndex, dimsDef, idx) { return rawData[idx]; }; var rawSourceItemGetterMap = (_b = {}, _b[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = function(rawData, startIndex, dimsDef, idx) { return rawData[idx + startIndex]; }, _b[SOURCE_FORMAT_ARRAY_ROWS + "_row"] = function(rawData, startIndex, dimsDef, idx, out) { idx += startIndex; var item = out || []; var data = rawData; for (var i = 0; i < data.length; i++) { var row = data[i]; item[i] = row ? row[idx] : null; } return item; }, _b[SOURCE_FORMAT_OBJECT_ROWS] = getItemSimply, _b[SOURCE_FORMAT_KEYED_COLUMNS] = function(rawData, startIndex, dimsDef, idx, out) { var item = out || []; for (var i = 0; i < dimsDef.length; i++) { var dimName = dimsDef[i].name; var col = dimName != null ? rawData[dimName] : null; item[i] = col ? col[idx] : null; } return item; }, _b[SOURCE_FORMAT_ORIGINAL] = getItemSimply, _b); function getRawSourceItemGetter(sourceFormat, seriesLayoutBy) { var method = rawSourceItemGetterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; assert(method, "Do not support get item on \"" + sourceFormat + "\", \"" + seriesLayoutBy + "\"."); return method; } var countSimply = function(rawData, startIndex, dimsDef) { return rawData.length; }; var rawSourceDataCounterMap = (_c = {}, _c[SOURCE_FORMAT_ARRAY_ROWS + "_" + SERIES_LAYOUT_BY_COLUMN] = function(rawData, startIndex, dimsDef) { return Math.max(0, rawData.length - startIndex); }, _c[SOURCE_FORMAT_ARRAY_ROWS + "_row"] = function(rawData, startIndex, dimsDef) { var row = rawData[0]; return row ? Math.max(0, row.length - startIndex) : 0; }, _c[SOURCE_FORMAT_OBJECT_ROWS] = countSimply, _c[SOURCE_FORMAT_KEYED_COLUMNS] = function(rawData, startIndex, dimsDef) { var dimName = dimsDef[0].name; var col = dimName != null ? rawData[dimName] : null; return col ? col.length : 0; }, _c[SOURCE_FORMAT_ORIGINAL] = countSimply, _c); function getRawSourceDataCounter(sourceFormat, seriesLayoutBy) { var method = rawSourceDataCounterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; assert(method, "Do not support count on \"" + sourceFormat + "\", \"" + seriesLayoutBy + "\"."); return method; } var getRawValueSimply = function(dataItem, dimIndex, property) { return dataItem[dimIndex]; }; var rawSourceValueGetterMap = (_d = {}, _d[SOURCE_FORMAT_ARRAY_ROWS] = getRawValueSimply, _d[SOURCE_FORMAT_OBJECT_ROWS] = function(dataItem, dimIndex, property) { return dataItem[property]; }, _d[SOURCE_FORMAT_KEYED_COLUMNS] = getRawValueSimply, _d[SOURCE_FORMAT_ORIGINAL] = function(dataItem, dimIndex, property) { var value = getDataItemValue(dataItem); return !(value instanceof Array) ? value : value[dimIndex]; }, _d[SOURCE_FORMAT_TYPED_ARRAY] = getRawValueSimply, _d); function getRawSourceValueGetter(sourceFormat) { var method = rawSourceValueGetterMap[sourceFormat]; assert(method, "Do not support get value on \"" + sourceFormat + "\"."); return method; } function getMethodMapKey(sourceFormat, seriesLayoutBy) { return sourceFormat === "arrayRows" ? sourceFormat + "_" + seriesLayoutBy : sourceFormat; } function retrieveRawValue(data, dataIndex, dim) { if (!data) return; var dataItem = data.getRawDataItem(dataIndex); if (dataItem == null) return; var store = data.getStore(); var sourceFormat = store.getSource().sourceFormat; if (dim != null) { var dimIndex = data.getDimensionIndex(dim); var property = store.getDimensionProperty(dimIndex); return getRawSourceValueGetter(sourceFormat)(dataItem, dimIndex, property); } else { var result = dataItem; if (sourceFormat === "original") result = getDataItemValue(dataItem); return result; } } //#endregion //#region node_modules/echarts/lib/model/mixin/dataFormat.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DIMENSION_LABEL_REG = /\{@(.+?)\}/g; var DataFormatMixin = function() { function DataFormatMixin() {} /** * Get params for formatter */ DataFormatMixin.prototype.getDataParams = function(dataIndex, dataType) { var data = this.getData(dataType); var rawValue = this.getRawValue(dataIndex, dataType); var rawDataIndex = data.getRawIndex(dataIndex); var name = data.getName(dataIndex); var itemOpt = data.getRawDataItem(dataIndex); var style = data.getItemVisual(dataIndex, "style"); var color = style && style[data.getItemVisual(dataIndex, "drawType") || "fill"]; var borderColor = style && style.stroke; var mainType = this.mainType; var isSeries = mainType === "series"; var userOutput = data.userOutput && data.userOutput.get(); return { componentType: mainType, componentSubType: this.subType, componentIndex: this.componentIndex, seriesType: isSeries ? this.subType : null, seriesIndex: this.seriesIndex, seriesId: isSeries ? this.id : null, seriesName: isSeries ? this.name : null, name, dataIndex: rawDataIndex, data: itemOpt, dataType, value: rawValue, color, borderColor, dimensionNames: userOutput ? userOutput.fullDimensions : null, encode: userOutput ? userOutput.encode : null, $vars: [ "seriesName", "name", "value" ] }; }; /** * Format label * @param dataIndex * @param status 'normal' by default * @param dataType * @param labelDimIndex Only used in some chart that * use formatter in different dimensions, like radar. * @param formatter Formatter given outside. * @return return null/undefined if no formatter */ DataFormatMixin.prototype.getFormattedLabel = function(dataIndex, status, dataType, labelDimIndex, formatter, extendParams) { status = status || "normal"; var data = this.getData(dataType); var params = this.getDataParams(dataIndex, dataType); if (extendParams) params.value = extendParams.interpolatedValue; if (labelDimIndex != null && isArray$1(params.value)) params.value = params.value[labelDimIndex]; if (!formatter) formatter = data.getItemModel(dataIndex).get(status === "normal" ? ["label", "formatter"] : [ status, "label", "formatter" ]); if (isFunction(formatter)) { params.status = status; params.dimensionIndex = labelDimIndex; return formatter(params); } else if (isString(formatter)) return formatTpl(formatter, params).replace(DIMENSION_LABEL_REG, function(origin, dimStr) { var len = dimStr.length; var dimLoose = dimStr; if (dimLoose.charAt(0) === "[" && dimLoose.charAt(len - 1) === "]") { dimLoose = +dimLoose.slice(1, len - 1); if (isNaN(dimLoose)) error("Invalide label formatter: @" + dimStr + ", only support @[0], @[1], @[2], ..."); } var val = retrieveRawValue(data, dataIndex, dimLoose); if (extendParams && isArray$1(extendParams.interpolatedValue)) { var dimIndex = data.getDimensionIndex(dimLoose); if (dimIndex >= 0) val = extendParams.interpolatedValue[dimIndex]; } return val != null ? val + "" : ""; }); }; /** * Get raw value in option */ DataFormatMixin.prototype.getRawValue = function(idx, dataType) { return retrieveRawValue(this.getData(dataType), idx); }; /** * Should be implemented. * @param {number} dataIndex * @param {boolean} [multipleSeries=false] * @param {string} [dataType] */ DataFormatMixin.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) {}; return DataFormatMixin; }(); /** * For backward compat, normalize the return from `formatTooltip`. */ function normalizeTooltipFormatResult(result) { var markupText; var markupFragment; if (isObject$3(result)) { if (result.type) markupFragment = result; else console.warn("The return type of `formatTooltip` is not supported: " + makePrintable(result)); } else markupText = result; return { text: markupText, frag: markupFragment }; } //#endregion //#region node_modules/echarts/lib/core/task.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @param {Object} define * @return See the return of `createTask`. */ function createTask(define) { return new Task(define); } var Task = function() { function Task(define) { define = define || {}; this._reset = define.reset; this._plan = define.plan; this._count = define.count; this._onDirty = define.onDirty; this._dirty = true; } /** * @param step Specified step. * @param skip Skip customer perform call. * @param modBy Sampling window size. * @param modDataCount Sampling count. * @return whether unfinished. */ Task.prototype.perform = function(performArgs) { var upTask = this._upstream; var skip = performArgs && performArgs.skip; if (this._dirty && upTask) { var context = this.context; context.data = context.outputData = upTask.context.outputData; } if (this.__pipeline) this.__pipeline.currentTask = this; var planResult; if (this._plan && !skip) planResult = this._plan(this.context); var lastModBy = normalizeModBy(this._modBy); var lastModDataCount = this._modDataCount || 0; var modBy = normalizeModBy(performArgs && performArgs.modBy); var modDataCount = performArgs && performArgs.modDataCount || 0; if (lastModBy !== modBy || lastModDataCount !== modDataCount) planResult = "reset"; function normalizeModBy(val) { !(val >= 1) && (val = 1); return val; } var forceFirstProgress; if (this._dirty || planResult === "reset") { this._dirty = false; forceFirstProgress = this._doReset(skip); } this._modBy = modBy; this._modDataCount = modDataCount; var step = performArgs && performArgs.step; if (upTask) { assert(upTask._outputDueEnd != null); this._dueEnd = upTask._outputDueEnd; } else { assert(!this._progress || this._count); this._dueEnd = this._count ? this._count(this.context) : Infinity; } if (this._progress) { var start = this._dueIndex; var end = Math.min(step != null ? this._dueIndex + step : Infinity, this._dueEnd); if (!skip && (forceFirstProgress || start < end)) { var progress = this._progress; if (isArray$1(progress)) for (var i = 0; i < progress.length; i++) this._doProgress(progress[i], start, end, modBy, modDataCount); else this._doProgress(progress, start, end, modBy, modDataCount); } this._dueIndex = end; var outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : end; assert(outputDueEnd >= this._outputDueEnd); this._outputDueEnd = outputDueEnd; } else this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : this._dueEnd; return this.unfinished(); }; /** * @tutorial [EC_TASK_DIRTY] * Task `dirty()` calls typically originate from a trigger of EC_FULL_UPDATE_CYCLE and * EC_PARTIAL_UPDATE_CYCLE) (See comments in EC_CYCLE. Generally, task dirty propagates * to downstream tasks. * Task dirty leads to the `StageHandler['reset']` or `StageHandler['overallReset']` call, * which discards the previous result and starts over the processing. */ Task.prototype.dirty = function() { this._dirty = true; this._onDirty && this._onDirty(this.context); }; Task.prototype._doProgress = function(progress, start, end, modBy, modDataCount) { iterator.reset(start, end, modBy, modDataCount); this._callingProgress = progress; this._callingProgress({ start, end, count: end - start, next: iterator.next }, this.context); }; Task.prototype._doReset = function(skip) { this._dueIndex = this._outputDueEnd = this._dueEnd = 0; this._settedOutputEnd = null; var progress; var forceFirstProgress; if (!skip && this._reset) { progress = this._reset(this.context); if (progress && progress.progress) { forceFirstProgress = progress.forceFirstProgress; progress = progress.progress; } if (isArray$1(progress) && !progress.length) progress = null; } this._progress = progress; this._modBy = this._modDataCount = null; var downstream = this._downstream; downstream && downstream.dirty(); return forceFirstProgress; }; Task.prototype.unfinished = function() { return this._progress && this._dueIndex < this._dueEnd; }; /** * @param downTask The downstream task. * @return The downstream task. */ Task.prototype.pipe = function(downTask) { assert(downTask && !downTask._disposed && downTask !== this); if (this._downstream !== downTask || this._dirty) { this._downstream = downTask; downTask._upstream = this; downTask.dirty(); } }; Task.prototype.dispose = function() { if (this._disposed) return; this._upstream && (this._upstream._downstream = null); this._downstream && (this._downstream._upstream = null); this._dirty = false; this._disposed = true; }; Task.prototype.getUpstream = function() { return this._upstream; }; Task.prototype.getDownstream = function() { return this._downstream; }; Task.prototype.setOutputEnd = function(end) { this._outputDueEnd = this._settedOutputEnd = end; }; return Task; }(); var iterator = function() { var end; var current; var modBy; var modDataCount; var winCount; var it = { reset: function(s, e, sStep, sCount) { current = s; end = e; modBy = sStep; modDataCount = sCount; winCount = Math.ceil(modDataCount / modBy); it.next = modBy > 1 && modDataCount > 0 ? modNext : sequentialNext; } }; return it; function sequentialNext() { return current < end ? current++ : null; } function modNext() { var dataIndex = current % winCount * modBy + Math.ceil(current / winCount); var result = current >= end ? null : dataIndex < modDataCount ? dataIndex : current; current++; return result; } }(); //#endregion //#region node_modules/echarts/lib/data/helper/dataValueHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Convert raw the value in to inner value in List. * * [Performance sensitive] * * [Caution]: this is the key logic of user value parser. * For backward compatibility, do not modify it until you have to! */ function parseDataValue(value, opt) { var dimType = opt && opt.type; if (dimType === "ordinal") return value; if (dimType === "time" && !isNumber(value) && value != null && value !== "-") value = +parseDate(value); return value == null || value === "" ? NaN : Number(value); } var valueParserMap = createHashMap({ "number": function(val) { return parseFloat(val); }, "time": function(val) { return +parseDate(val); }, "trim": function(val) { return isString(val) ? trim$1(val) : val; } }); function getRawValueParser(type) { return valueParserMap.get(type); } var ORDER_COMPARISON_OP_MAP = { lt: function(lval, rval) { return lval < rval; }, lte: function(lval, rval) { return lval <= rval; }, gt: function(lval, rval) { return lval > rval; }, gte: function(lval, rval) { return lval >= rval; } }; var FilterOrderComparator = function() { function FilterOrderComparator(op, rval) { if (!isNumber(rval)) { var errMsg = ""; errMsg = "rvalue of \"<\", \">\", \"<=\", \">=\" can only be number in filter."; throwError(errMsg); } this._opFn = ORDER_COMPARISON_OP_MAP[op]; this._rvalFloat = numericToNumber(rval); } FilterOrderComparator.prototype.evaluate = function(lval) { return isNumber(lval) ? this._opFn(lval, this._rvalFloat) : this._opFn(numericToNumber(lval), this._rvalFloat); }; return FilterOrderComparator; }(); var SortOrderComparator = function() { /** * @param order by default: 'asc' * @param incomparable by default: Always on the tail. * That is, if 'asc' => 'max', if 'desc' => 'min' * See the definition of "incomparable" in [SORT_COMPARISON_RULE]. */ function SortOrderComparator(order, incomparable) { var isDesc = order === "desc"; this._resultLT = isDesc ? 1 : -1; if (incomparable == null) incomparable = isDesc ? "min" : "max"; this._incomparable = incomparable === "min" ? -Infinity : Infinity; } SortOrderComparator.prototype.evaluate = function(lval, rval) { var lvalFloat = isNumber(lval) ? lval : numericToNumber(lval); var rvalFloat = isNumber(rval) ? rval : numericToNumber(rval); var lvalNotNumeric = isNaN(lvalFloat); var rvalNotNumeric = isNaN(rvalFloat); if (lvalNotNumeric) lvalFloat = this._incomparable; if (rvalNotNumeric) rvalFloat = this._incomparable; if (lvalNotNumeric && rvalNotNumeric) { var lvalIsStr = isString(lval); var rvalIsStr = isString(rval); if (lvalIsStr) lvalFloat = rvalIsStr ? lval : 0; if (rvalIsStr) rvalFloat = lvalIsStr ? rval : 0; } return lvalFloat < rvalFloat ? this._resultLT : lvalFloat > rvalFloat ? -this._resultLT : 0; }; return SortOrderComparator; }(); var FilterEqualityComparator = function() { function FilterEqualityComparator(isEq, rval) { this._rval = rval; this._isEQ = isEq; this._rvalTypeof = typeof rval; this._rvalFloat = numericToNumber(rval); } FilterEqualityComparator.prototype.evaluate = function(lval) { var eqResult = lval === this._rval; if (!eqResult) { var lvalTypeof = typeof lval; if (lvalTypeof !== this._rvalTypeof && (lvalTypeof === "number" || this._rvalTypeof === "number")) eqResult = numericToNumber(lval) === this._rvalFloat; } return this._isEQ ? eqResult : !eqResult; }; return FilterEqualityComparator; }(); /** * [FILTER_COMPARISON_RULE] * `lt`|`lte`|`gt`|`gte`: * + rval must be a number. And lval will be converted to number (`numericToNumber`) to compare. * `eq`: * + If same type, compare with `===`. * + If there is one number, convert to number (`numericToNumber`) to compare. * + Else return `false`. * `ne`: * + Not `eq`. * * * [SORT_COMPARISON_RULE] * All the values are grouped into three categories: * + "numeric" (number and numeric string) * + "non-numeric-string" (string that excluding numeric string) * + "others" * "numeric" vs "numeric": values are ordered by number order. * "non-numeric-string" vs "non-numeric-string": values are ordered by ES spec (#sec-abstract-relational-comparison). * "others" vs "others": do not change order (always return 0). * "numeric" vs "non-numeric-string": "non-numeric-string" is treated as "incomparable". * "number" vs "others": "others" is treated as "incomparable". * "non-numeric-string" vs "others": "others" is treated as "incomparable". * "incomparable" will be seen as -Infinity or Infinity (depends on the settings). * MEMO: * Non-numeric string sort makes sense when we need to put the items with the same tag together. * But if we support string sort, we still need to avoid the misleading like `'2' > '12'`, * So we treat "numeric-string" sorted by number order rather than string comparison. * * * [CHECK_LIST_OF_THE_RULE_DESIGN] * + Do not support string comparison until required. And also need to * avoid the misleading of "2" > "12". * + Should avoid the misleading case: * `" 22 " gte "22"` is `true` but `" 22 " eq "22"` is `false`. * + JS bad case should be avoided: null <= 0, [] <= 0, ' ' <= 0, ... * + Only "numeric" can be converted to comparable number, otherwise converted to NaN. * See `util/number.ts#numericToNumber`. * * @return If `op` is not `RelationalOperator`, return null; */ function createFilterComparator(op, rval) { return op === "eq" || op === "ne" ? new FilterEqualityComparator(op === "eq", rval) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, rval) : null; } /** * @usage * const filterParsed = parseSanitizationFilter(filter); * for( ... ) { * const val = ...; * if (!filter || passesFilter(filterParsed, val)) { * // normal handling * } * } */ function parseSanitizationFilter(filter) { var filterKey = ""; var filterG = -Infinity; var filterGE = -Infinity; var filterL = Infinity; var filterLE = Infinity; if (filter) { if (filter.g != null) { filterKey += "G" + filter.g; filterG = filter.g; } if (filter.ge != null) { filterKey += "GE" + filter.ge; filterGE = filter.ge; } if (filter.l != null) { filterKey += "L" + filter.l; filterL = filter.l; } if (filter.le != null) { filterKey += "LE" + filter.le; filterLE = filter.le; } } return { key: filterKey, g: filterG, ge: filterGE, l: filterL, le: filterLE }; } function passesSanitizationFilter(filterParsed, value) { return value > filterParsed.g && value >= filterParsed.ge && value < filterParsed.l && value <= filterParsed.le; } //#endregion //#region node_modules/echarts/lib/data/helper/transform.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * TODO: disable writable. * This structure will be exposed to users. */ var ExternalSource = function() { function ExternalSource() {} ExternalSource.prototype.getRawData = function() { throw new Error("not supported"); }; ExternalSource.prototype.getRawDataItem = function(dataIndex) { throw new Error("not supported"); }; ExternalSource.prototype.cloneRawData = function() {}; /** * @return If dimension not found, return null/undefined. */ ExternalSource.prototype.getDimensionInfo = function(dim) {}; /** * dimensions defined if and only if either: * (a) dataset.dimensions are declared. * (b) dataset data include dimensions definitions in data (detected or via specified `sourceHeader`). * If dimensions are defined, `dimensionInfoAll` is corresponding to * the defined dimensions. * Otherwise, `dimensionInfoAll` is determined by data columns. * @return Always return an array (even empty array). */ ExternalSource.prototype.cloneAllDimensionInfo = function() {}; ExternalSource.prototype.count = function() {}; /** * Only support by dimension index. * No need to support by dimension name in transform function, * because transform function is not case-specific, no need to use name literally. */ ExternalSource.prototype.retrieveValue = function(dataIndex, dimIndex) {}; ExternalSource.prototype.retrieveValueFromItem = function(dataItem, dimIndex) {}; ExternalSource.prototype.convertValue = function(rawVal, dimInfo) { return parseDataValue(rawVal, dimInfo); }; return ExternalSource; }(); function createExternalSource(internalSource, externalTransform) { var extSource = new ExternalSource(); var data = internalSource.data; var sourceFormat = extSource.sourceFormat = internalSource.sourceFormat; var sourceHeaderCount = internalSource.startIndex; var errMsg = ""; if (internalSource.seriesLayoutBy !== "column") { errMsg = "`seriesLayoutBy` of upstream dataset can only be \"column\" in data transform."; throwError(errMsg); } var dimensions = []; var dimsByName = {}; var dimsDef = internalSource.dimensionsDefine; if (dimsDef) each$12(dimsDef, function(dimDef, idx) { var name = dimDef.name; var dimDefExt = { index: idx, name, displayName: dimDef.displayName }; dimensions.push(dimDefExt); if (name != null) { var errMsg_1 = ""; if (hasOwn(dimsByName, name)) { errMsg_1 = "dimension name \"" + name + "\" duplicated."; throwError(errMsg_1); } dimsByName[name] = dimDefExt; } }); else for (var i = 0; i < internalSource.dimensionsDetectedCount || 0; i++) dimensions.push({ index: i }); var rawItemGetter = getRawSourceItemGetter(sourceFormat, SERIES_LAYOUT_BY_COLUMN); if (externalTransform.__isBuiltIn) { extSource.getRawDataItem = function(dataIndex) { return rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex); }; extSource.getRawData = bind$1(getRawData, null, internalSource); } extSource.cloneRawData = bind$1(cloneRawData, null, internalSource); extSource.count = bind$1(getRawSourceDataCounter(sourceFormat, SERIES_LAYOUT_BY_COLUMN), null, data, sourceHeaderCount, dimensions); var rawValueGetter = getRawSourceValueGetter(sourceFormat); extSource.retrieveValue = function(dataIndex, dimIndex) { return retrieveValueFromItem(rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex), dimIndex); }; var retrieveValueFromItem = extSource.retrieveValueFromItem = function(dataItem, dimIndex) { if (dataItem == null) return; var dimDef = dimensions[dimIndex]; if (dimDef) return rawValueGetter(dataItem, dimIndex, dimDef.name); }; extSource.getDimensionInfo = bind$1(getDimensionInfo, null, dimensions, dimsByName); extSource.cloneAllDimensionInfo = bind$1(cloneAllDimensionInfo, null, dimensions); return extSource; } function getRawData(upstream) { var sourceFormat = upstream.sourceFormat; if (!isSupportedSourceFormat(sourceFormat)) { var errMsg = ""; errMsg = "`getRawData` is not supported in source format " + sourceFormat; throwError(errMsg); } return upstream.data; } function cloneRawData(upstream) { var sourceFormat = upstream.sourceFormat; var data = upstream.data; if (!isSupportedSourceFormat(sourceFormat)) { var errMsg = ""; errMsg = "`cloneRawData` is not supported in source format " + sourceFormat; throwError(errMsg); } if (sourceFormat === "arrayRows") { var result = []; for (var i = 0, len = data.length; i < len; i++) result.push(data[i].slice()); return result; } else if (sourceFormat === "objectRows") { var result = []; for (var i = 0, len = data.length; i < len; i++) result.push(extend({}, data[i])); return result; } } function getDimensionInfo(dimensions, dimsByName, dim) { if (dim == null) return; if (isNumber(dim) || !isNaN(dim) && !hasOwn(dimsByName, dim)) return dimensions[dim]; else if (hasOwn(dimsByName, dim)) return dimsByName[dim]; } function cloneAllDimensionInfo(dimensions) { return clone$4(dimensions); } var externalTransformMap = createHashMap(); function registerExternalTransform(externalTransform) { externalTransform = clone$4(externalTransform); var type = externalTransform.type; var errMsg = ""; if (!type) { errMsg = "Must have a `type` when `registerTransform`."; throwError(errMsg); } var typeParsed = type.split(":"); if (typeParsed.length !== 2) { errMsg = "Name must include namespace like \"ns:regression\"."; throwError(errMsg); } var isBuiltIn = false; if (typeParsed[0] === "echarts") { type = typeParsed[1]; isBuiltIn = true; } externalTransform.__isBuiltIn = isBuiltIn; externalTransformMap.set(type, externalTransform); } function applyDataTransform(rawTransOption, sourceList, infoForPrint) { var pipedTransOption = normalizeToArray(rawTransOption); var pipeLen = pipedTransOption.length; var errMsg = ""; if (!pipeLen) { errMsg = "If `transform` declared, it should at least contain one transform."; throwError(errMsg); } for (var i = 0, len = pipeLen; i < len; i++) { var transOption = pipedTransOption[i]; sourceList = applySingleDataTransform(transOption, sourceList, infoForPrint, pipeLen === 1 ? null : i); if (i !== len - 1) sourceList.length = Math.max(sourceList.length, 1); } return sourceList; } function applySingleDataTransform(transOption, upSourceList, infoForPrint, pipeIndex) { var errMsg = ""; if (!upSourceList.length) { errMsg = "Must have at least one upstream dataset."; throwError(errMsg); } if (!isObject$3(transOption)) { errMsg = "transform declaration must be an object rather than " + typeof transOption + "."; throwError(errMsg); } var transType = transOption.type; var externalTransform = externalTransformMap.get(transType); if (!externalTransform) { errMsg = "Can not find transform on type \"" + transType + "\"."; throwError(errMsg); } var extUpSourceList = map$1(upSourceList, function(upSource) { return createExternalSource(upSource, externalTransform); }); var resultList = normalizeToArray(externalTransform.transform({ upstream: extUpSourceList[0], upstreamList: extUpSourceList, config: clone$4(transOption.config) })); if (transOption.print) log(map$1(resultList, function(extSource) { var pipeIndexStr = pipeIndex != null ? " === pipe index: " + pipeIndex : ""; return [ "=== dataset index: " + infoForPrint.datasetIndex + pipeIndexStr + " ===", "- transform result data:", makePrintable(extSource.data), "- transform result dimensions:", makePrintable(extSource.dimensions) ].join("\n"); }).join("\n")); return map$1(resultList, function(result, resultIndex) { var errMsg = ""; if (!isObject$3(result)) { errMsg = "A transform should not return some empty results."; throwError(errMsg); } if (!result.data) { errMsg = "Transform result data should be not be null or undefined"; throwError(errMsg); } if (!isSupportedSourceFormat(detectSourceFormat(result.data))) { errMsg = "Transform result data should be array rows or object rows."; throwError(errMsg); } var resultMetaRawOption; var firstUpSource = upSourceList[0]; /** * Intuitively, the end users known the content of the original `dataset.source`, * calucating the transform result in mind. * Suppose the original `dataset.source` is: * ```js * [ * ['product', '2012', '2013', '2014', '2015'], * ['AAA', 41.1, 30.4, 65.1, 53.3], * ['BBB', 86.5, 92.1, 85.7, 83.1], * ['CCC', 24.1, 67.2, 79.5, 86.4] * ] * ``` * The dimension info have to be detected from the source data. * Some of the transformers (like filter, sort) will follow the dimension info * of upstream, while others use new dimensions (like aggregate). * Transformer can output a field `dimensions` to define the its own output dimensions. * We also allow transformers to ignore the output `dimensions` field, and * inherit the upstream dimensions definition. It can reduce the burden of handling * dimensions in transformers. * * See also [DIMENSION_INHERIT_RULE] in `sourceManager.ts`. */ if (firstUpSource && resultIndex === 0 && !result.dimensions) { var startIndex = firstUpSource.startIndex; if (startIndex) result.data = firstUpSource.data.slice(0, startIndex).concat(result.data); resultMetaRawOption = { seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, sourceHeader: startIndex, dimensions: firstUpSource.metaRawOption.dimensions }; } else resultMetaRawOption = { seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, sourceHeader: 0, dimensions: result.dimensions }; return createSource(result.data, resultMetaRawOption, null); }); } function isSupportedSourceFormat(sourceFormat) { return sourceFormat === "arrayRows" || sourceFormat === "objectRows"; } //#endregion //#region node_modules/echarts/lib/data/DataStore.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CtorUint32Array = typeof Uint32Array === "undefined" ? Array : Uint32Array; var CtorUint16Array = typeof Uint16Array === "undefined" ? Array : Uint16Array; var CtorInt32Array$1 = typeof Int32Array === "undefined" ? Array : Int32Array; var CtorFloat64Array = typeof Float64Array === "undefined" ? Array : Float64Array; /** * Multi dimensional data store */ var dataCtors = { "float": CtorFloat64Array, "int": CtorInt32Array$1, "ordinal": Array, "number": Array, "time": CtorFloat64Array }; var defaultDimValueGetters; function getIndicesCtor(rawCount) { return rawCount > 65535 ? CtorUint32Array : CtorUint16Array; } function cloneChunk(originalChunk) { var Ctor = originalChunk.constructor; return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk); } function prepareStore(store, dimIdx, dimType, end, append) { var DataCtor = dataCtors[dimType || "float"]; if (append) { var oldStore = store[dimIdx]; var oldLen = oldStore && oldStore.length; if (!(oldLen === end)) { var newStore = new DataCtor(end); for (var j = 0; j < oldLen; j++) newStore[j] = oldStore[j]; store[dimIdx] = newStore; } } else store[dimIdx] = new DataCtor(end); } /** * Basically, DataStore API keep immutable. */ var DataStore = function() { function DataStore() { this._chunks = []; this._rawExtent = []; this._extent = []; this._count = 0; this._rawCount = 0; this._calcDimNameToIdx = createHashMap(); } /** * Initialize from data */ DataStore.prototype.initData = function(provider, inputDimensions, dimValueGetter) { assert(isFunction(provider.getItem) && isFunction(provider.count), "Invalid data provider."); this._provider = provider; this._chunks = []; this._indices = null; this.getRawIndex = this._getRawIdxIdentity; var source = provider.getSource(); var defaultGetter = this.defaultDimValueGetter = defaultDimValueGetters[source.sourceFormat]; this._dimValueGetter = dimValueGetter || defaultGetter; this._rawExtent = []; var willRetrieveDataByName = shouldRetrieveDataByName(source); this._dimensions = map$1(inputDimensions, function(dim) { if (willRetrieveDataByName) assert(dim.property != null); return { type: dim.type, property: dim.property }; }); this._initDataFromProvider(0, provider.count()); }; DataStore.prototype.getProvider = function() { return this._provider; }; /** * Caution: even when a `source` instance owned by a series, the created data store * may still be shared by different sereis (the source hash does not use all `source` * props, see `sourceManager`). In this case, the `source` props that are not used in * hash (like `source.dimensionDefine`) probably only belongs to a certain series and * thus should not be fetch here. */ DataStore.prototype.getSource = function() { return this._provider.getSource(); }; /** * @caution Only used in dataStack. */ DataStore.prototype.ensureCalculationDimension = function(dimName, type) { var calcDimNameToIdx = this._calcDimNameToIdx; var dimensions = this._dimensions; var calcDimIdx = calcDimNameToIdx.get(dimName); if (calcDimIdx != null) { if (dimensions[calcDimIdx].type === type) return calcDimIdx; } else calcDimIdx = dimensions.length; dimensions[calcDimIdx] = { type }; calcDimNameToIdx.set(dimName, calcDimIdx); this._chunks[calcDimIdx] = new dataCtors[type || "float"](this._rawCount); this._rawExtent[calcDimIdx] = initExtentForUnion(); return calcDimIdx; }; DataStore.prototype.collectOrdinalMeta = function(dimIdx, ordinalMeta) { var chunk = this._chunks[dimIdx]; var dim = this._dimensions[dimIdx]; var rawExtents = this._rawExtent; var offset = dim.ordinalOffset || 0; var len = chunk.length; if (offset === 0) rawExtents[dimIdx] = initExtentForUnion(); var dimRawExtent = rawExtents[dimIdx]; for (var i = offset; i < len; i++) { var val = chunk[i] = ordinalMeta.parseAndCollect(chunk[i]); if (!isNaN(val)) { dimRawExtent[0] = Math.min(val, dimRawExtent[0]); dimRawExtent[1] = Math.max(val, dimRawExtent[1]); } } dim.ordinalMeta = ordinalMeta; dim.ordinalOffset = len; dim.type = "ordinal"; }; DataStore.prototype.getOrdinalMeta = function(dimIdx) { return this._dimensions[dimIdx].ordinalMeta; }; DataStore.prototype.getDimensionProperty = function(dimIndex) { var item = this._dimensions[dimIndex]; return item && item.property; }; /** * Caution: Can be only called on raw data (before `this._indices` created). */ DataStore.prototype.appendData = function(data) { assert(!this._indices, "appendData can only be called on raw data."); var provider = this._provider; var start = this.count(); provider.appendData(data); var end = provider.count(); if (!provider.persistent) end += start; if (start < end) this._initDataFromProvider(start, end, true); return [start, end]; }; DataStore.prototype.appendValues = function(values, minFillLen) { var chunks = this._chunks; var dimensions = this._dimensions; var dimLen = dimensions.length; var rawExtent = this._rawExtent; var start = this.count(); var end = start + Math.max(values.length, minFillLen || 0); for (var i = 0; i < dimLen; i++) { var dim = dimensions[i]; prepareStore(chunks, i, dim.type, end, true); } var emptyDataItem = []; for (var idx = start; idx < end; idx++) { var sourceIdx = idx - start; for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) { var dim = dimensions[dimIdx]; var val = defaultDimValueGetters.arrayRows.call(this, values[sourceIdx] || emptyDataItem, dim.property, sourceIdx, dimIdx); chunks[dimIdx][idx] = val; var dimRawExtent = rawExtent[dimIdx]; val < dimRawExtent[0] && (dimRawExtent[0] = val); val > dimRawExtent[1] && (dimRawExtent[1] = val); } } this._rawCount = this._count = end; return { start, end }; }; DataStore.prototype._initDataFromProvider = function(start, end, append) { var provider = this._provider; var chunks = this._chunks; var dimensions = this._dimensions; var dimLen = dimensions.length; var rawExtent = this._rawExtent; var dimNames = map$1(dimensions, function(dim) { return dim.property; }); for (var i = 0; i < dimLen; i++) { var dim = dimensions[i]; if (!rawExtent[i]) rawExtent[i] = initExtentForUnion(); prepareStore(chunks, i, dim.type, end, append); } if (provider.fillStorage) provider.fillStorage(start, end, chunks, rawExtent); else { var dataItem = []; for (var idx = start; idx < end; idx++) { dataItem = provider.getItem(idx, dataItem); for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) { var dimStorage = chunks[dimIdx]; var val = this._dimValueGetter(dataItem, dimNames[dimIdx], idx, dimIdx); dimStorage[idx] = val; var dimRawExtent = rawExtent[dimIdx]; val < dimRawExtent[0] && (dimRawExtent[0] = val); val > dimRawExtent[1] && (dimRawExtent[1] = val); } } } if (!provider.persistent && provider.clean) provider.clean(); this._rawCount = this._count = end; this._extent = []; }; DataStore.prototype.count = function() { return this._count; }; /** * Get value. Return NaN if idx is out of range. */ DataStore.prototype.get = function(dim, idx) { if (!(idx >= 0 && idx < this._count)) return NaN; var dimStore = this._chunks[dim]; return dimStore ? dimStore[this.getRawIndex(idx)] : NaN; }; DataStore.prototype.getValues = function(dimensions, idx) { var values = []; var dimArr = []; if (idx == null) { idx = dimensions; dimensions = []; for (var i = 0; i < this._dimensions.length; i++) dimArr.push(i); } else dimArr = dimensions; for (var i = 0, len = dimArr.length; i < len; i++) values.push(this.get(dimArr[i], idx)); return values; }; /** * @param dim concrete dim */ DataStore.prototype.getByRawIndex = function(dim, rawIdx) { if (!(rawIdx >= 0 && rawIdx < this._rawCount)) return NaN; var dimStore = this._chunks[dim]; return dimStore ? dimStore[rawIdx] : NaN; }; /** * Get sum of data in one dimension */ DataStore.prototype.getSum = function(dim) { var dimData = this._chunks[dim]; var sum = 0; if (dimData) for (var i = 0, len = this.count(); i < len; i++) { var value = this.get(dim, i); if (!isNaN(value)) sum += value; } return sum; }; /** * Get median of data in one dimension */ DataStore.prototype.getMedian = function(dim) { var dimDataArray = []; this.each([dim], function(val) { if (!isNaN(val)) dimDataArray.push(val); }); asc$1(dimDataArray); var len = this.count(); return len === 0 ? 0 : len % 2 === 1 ? dimDataArray[(len - 1) / 2] : (dimDataArray[len / 2] + dimDataArray[len / 2 - 1]) / 2; }; /** * Retrieve the index with given raw data index. */ DataStore.prototype.indexOfRawIndex = function(rawIndex) { if (rawIndex >= this._rawCount || rawIndex < 0) return -1; if (!this._indices) return rawIndex; var indices = this._indices; var rawDataIndex = indices[rawIndex]; if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) return rawIndex; var left = 0; var right = this._count - 1; while (left <= right) { var mid = (left + right) / 2 | 0; if (indices[mid] < rawIndex) left = mid + 1; else if (indices[mid] > rawIndex) right = mid - 1; else return mid; } return -1; }; DataStore.prototype.getIndices = function() { var newIndices; var indices = this._indices; if (indices) { var Ctor = indices.constructor; var thisCount = this._count; if (Ctor === Array) { newIndices = new Ctor(thisCount); for (var i = 0; i < thisCount; i++) newIndices[i] = indices[i]; } else newIndices = new Ctor(indices.buffer, 0, thisCount); } else { var Ctor = getIndicesCtor(this._rawCount); newIndices = new Ctor(this.count()); for (var i = 0; i < newIndices.length; i++) newIndices[i] = i; } return newIndices; }; /** * [NOTICE]: Performance-sensitive for large data. */ DataStore.prototype.filter = function(dims, cb) { if (!this._count) return this; var newStore = this.clone(); var count = newStore.count(); var newIndices = new (getIndicesCtor(newStore._rawCount))(count); var value = []; var dimSize = dims.length; var offset = 0; var dim0 = dims[0]; var chunks = newStore._chunks; for (var i = 0; i < count; i++) { var keep = void 0; var rawIdx = newStore.getRawIndex(i); if (dimSize === 0) keep = cb(i); else if (dimSize === 1) { var val = chunks[dim0][rawIdx]; keep = cb(val, i); } else { var k = 0; for (; k < dimSize; k++) value[k] = chunks[dims[k]][rawIdx]; value[k] = i; keep = cb.apply(null, value); } if (keep) newIndices[offset++] = rawIdx; } if (offset < count) newStore._indices = newIndices; newStore._count = offset; newStore._extent = []; newStore._updateGetRawIdx(); return newStore; }; /** * Select data in range. (For optimization of filter) * (Manually inline code, support 5 million data filtering in data zoom.) */ DataStore.prototype.selectRange = function(range) { var newStore = this.clone(); var len = newStore._count; if (!len) return this; var dims = keys(range); var dimSize = dims.length; if (!dimSize) return this; var originalCount = newStore.count(); var newIndices = new (getIndicesCtor(newStore._rawCount))(originalCount); var offset = 0; var dim0 = dims[0]; var min = range[dim0][0]; var max = range[dim0][1]; var storeArr = newStore._chunks; var quickFinished = false; if (!newStore._indices) { var idx = 0; if (dimSize === 1) { var dimStorage = storeArr[dims[0]]; for (var i = 0; i < len; i++) { var val = dimStorage[i]; if (val >= min && val <= max || isNaN(val)) newIndices[offset++] = idx; idx++; } quickFinished = true; } else if (dimSize === 2) { var dimStorage = storeArr[dims[0]]; var dimStorage2 = storeArr[dims[1]]; var min2 = range[dims[1]][0]; var max2 = range[dims[1]][1]; for (var i = 0; i < len; i++) { var val = dimStorage[i]; var val2 = dimStorage2[i]; if ((val >= min && val <= max || isNaN(val)) && (val2 >= min2 && val2 <= max2 || isNaN(val2))) newIndices[offset++] = idx; idx++; } quickFinished = true; } } if (!quickFinished) { if (dimSize === 1) for (var i = 0; i < originalCount; i++) { var rawIndex = newStore.getRawIndex(i); var val = storeArr[dims[0]][rawIndex]; if (val >= min && val <= max || isNaN(val)) newIndices[offset++] = rawIndex; } else for (var i = 0; i < originalCount; i++) { var keep = true; var rawIndex = newStore.getRawIndex(i); for (var k = 0; k < dimSize; k++) { var dimk = dims[k]; var val = storeArr[dimk][rawIndex]; if (val < range[dimk][0] || val > range[dimk][1]) keep = false; } if (keep) newIndices[offset++] = newStore.getRawIndex(i); } } if (offset < originalCount) newStore._indices = newIndices; newStore._count = offset; newStore._extent = []; newStore._updateGetRawIdx(); return newStore; }; /** * Data mapping to a new List with given dimensions */ DataStore.prototype.map = function(dims, cb) { var target = this.clone(dims); this._updateDims(target, dims, cb); return target; }; /** * @caution Danger!! Only used in dataStack. */ DataStore.prototype.modify = function(dims, cb) { this._updateDims(this, dims, cb); }; DataStore.prototype._updateDims = function(target, dims, cb) { var targetChunks = target._chunks; var tmpRetValue = []; var dimSize = dims.length; var dataCount = target.count(); var values = []; var rawExtent = target._rawExtent; for (var i = 0; i < dims.length; i++) rawExtent[dims[i]] = initExtentForUnion(); for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) { var rawIndex = target.getRawIndex(dataIndex); for (var k = 0; k < dimSize; k++) values[k] = targetChunks[dims[k]][rawIndex]; values[dimSize] = dataIndex; var retValue = cb && cb.apply(null, values); if (retValue != null) { if (typeof retValue !== "object") { tmpRetValue[0] = retValue; retValue = tmpRetValue; } for (var i = 0; i < retValue.length; i++) { var dim = dims[i]; var val = retValue[i]; var rawExtentOnDim = rawExtent[dim]; var dimStore = targetChunks[dim]; if (dimStore) dimStore[rawIndex] = val; if (val < rawExtentOnDim[0]) rawExtentOnDim[0] = val; if (val > rawExtentOnDim[1]) rawExtentOnDim[1] = val; } } } }; /** * Large data down sampling using largest-triangle-three-buckets * @param {string} valueDimension * @param {number} targetCount */ DataStore.prototype.lttbDownSample = function(valueDimension, rate) { var target = this.clone([valueDimension], true); var dimStore = target._chunks[valueDimension]; var len = this.count(); var sampledIndex = 0; var frameSize = Math.floor(1 / rate); var currentRawIndex = this.getRawIndex(0); var maxArea; var area; var nextRawIndex; var newIndices = new (getIndicesCtor(this._rawCount))(Math.min((Math.ceil(len / frameSize) + 2) * 2, len)); newIndices[sampledIndex++] = currentRawIndex; for (var i = 1; i < len - 1; i += frameSize) { var nextFrameStart = Math.min(i + frameSize, len - 1); var nextFrameEnd = Math.min(i + frameSize * 2, len); var avgX = (nextFrameEnd + nextFrameStart) / 2; var avgY = 0; for (var idx = nextFrameStart; idx < nextFrameEnd; idx++) { var rawIndex = this.getRawIndex(idx); var y = dimStore[rawIndex]; if (isNaN(y)) continue; avgY += y; } avgY /= nextFrameEnd - nextFrameStart; var frameStart = i; var frameEnd = Math.min(i + frameSize, len); var pointAX = i - 1; var pointAY = dimStore[currentRawIndex]; maxArea = -1; nextRawIndex = frameStart; var firstNaNIndex = -1; var countNaN = 0; for (var idx = frameStart; idx < frameEnd; idx++) { var rawIndex = this.getRawIndex(idx); var y = dimStore[rawIndex]; if (isNaN(y)) { countNaN++; if (firstNaNIndex < 0) firstNaNIndex = rawIndex; continue; } area = Math.abs((pointAX - avgX) * (y - pointAY) - (pointAX - idx) * (avgY - pointAY)); if (area > maxArea) { maxArea = area; nextRawIndex = rawIndex; } } if (countNaN > 0 && countNaN < frameEnd - frameStart) { newIndices[sampledIndex++] = Math.min(firstNaNIndex, nextRawIndex); nextRawIndex = Math.max(firstNaNIndex, nextRawIndex); } newIndices[sampledIndex++] = nextRawIndex; currentRawIndex = nextRawIndex; } newIndices[sampledIndex++] = this.getRawIndex(len - 1); target._count = sampledIndex; target._indices = newIndices; target.getRawIndex = this._getRawIdx; return target; }; /** * Large data down sampling using min-max * @param {string} valueDimension * @param {number} rate */ DataStore.prototype.minmaxDownSample = function(valueDimension, rate) { var target = this.clone([valueDimension], true); var targetStorage = target._chunks; var frameSize = Math.floor(1 / rate); var dimStore = targetStorage[valueDimension]; var len = this.count(); var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len / frameSize) * 2); var offset = 0; for (var i = 0; i < len; i += frameSize) { var minIndex = i; var minValue = dimStore[this.getRawIndex(minIndex)]; var maxIndex = i; var maxValue = dimStore[this.getRawIndex(maxIndex)]; var thisFrameSize = frameSize; if (i + frameSize > len) thisFrameSize = len - i; for (var k = 0; k < thisFrameSize; k++) { var value = dimStore[this.getRawIndex(i + k)]; if (value < minValue) { minValue = value; minIndex = i + k; } if (value > maxValue) { maxValue = value; maxIndex = i + k; } } var rawMinIndex = this.getRawIndex(minIndex); var rawMaxIndex = this.getRawIndex(maxIndex); if (minIndex < maxIndex) { newIndices[offset++] = rawMinIndex; newIndices[offset++] = rawMaxIndex; } else { newIndices[offset++] = rawMaxIndex; newIndices[offset++] = rawMinIndex; } } target._count = offset; target._indices = newIndices; target._updateGetRawIdx(); return target; }; /** * Large data down sampling on given dimension * @param sampleIndex Sample index for name and id */ DataStore.prototype.downSample = function(dimension, rate, sampleValue, sampleIndex) { var target = this.clone([dimension], true); var targetStorage = target._chunks; var frameValues = []; var frameSize = Math.floor(1 / rate); var dimStore = targetStorage[dimension]; var len = this.count(); var rawExtentOnDim = target._rawExtent[dimension] = initExtentForUnion(); var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len / frameSize)); var offset = 0; for (var i = 0; i < len; i += frameSize) { if (frameSize > len - i) { frameSize = len - i; frameValues.length = frameSize; } for (var k = 0; k < frameSize; k++) { var dataIdx = this.getRawIndex(i + k); frameValues[k] = dimStore[dataIdx]; } var value = sampleValue(frameValues); var sampleFrameIdx = this.getRawIndex(Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)); dimStore[sampleFrameIdx] = value; if (value < rawExtentOnDim[0]) rawExtentOnDim[0] = value; if (value > rawExtentOnDim[1]) rawExtentOnDim[1] = value; newIndices[offset++] = sampleFrameIdx; } target._count = offset; target._indices = newIndices; target._updateGetRawIdx(); return target; }; /** * Data iteration * @param ctx default this * @example * list.each(0, function (x, idx) {}); * list.each([0, 1], function (x, y, idx) {}); * list.each(function (idx) {}) */ DataStore.prototype.each = function(dims, cb) { if (!this._count) return; var dimSize = dims.length; var chunks = this._chunks; for (var i = 0, len = this.count(); i < len; i++) { var rawIdx = this.getRawIndex(i); switch (dimSize) { case 0: cb(i); break; case 1: cb(chunks[dims[0]][rawIdx], i); break; case 2: cb(chunks[dims[0]][rawIdx], chunks[dims[1]][rawIdx], i); break; default: var k = 0; var value = []; for (; k < dimSize; k++) value[k] = chunks[dims[k]][rawIdx]; value[k] = i; cb.apply(null, value); } } }; DataStore.prototype.getDataExtent = function(dim, filter) { var dimData = this._chunks[dim]; var initialExtent = initExtentForUnion(); if (!dimData) return initialExtent; var currEnd = this.count(); if (!this._indices && !filter) return this._rawExtent[dim].slice(); var thisExtent = this._extent; var dimExtentRecord = thisExtent[dim] || (thisExtent[dim] = {}); var filterParsed = parseSanitizationFilter(filter); var filterKey = filterParsed.key; var dimExtent = dimExtentRecord[filterKey]; if (dimExtent) return dimExtent.slice(); var min = initialExtent[0]; var max = initialExtent[1]; for (var i = 0; i < currEnd; i++) { var value = dimData[this.getRawIndex(i)]; if (!filter || passesSanitizationFilter(filterParsed, value)) { if (value < min) min = value; if (value > max) max = value; } } return dimExtentRecord[filterKey] = [min, max]; }; /** * Get raw data item */ DataStore.prototype.getRawDataItem = function(idx) { var rawIdx = this.getRawIndex(idx); if (!this._provider.persistent) { var val = []; var chunks = this._chunks; for (var i = 0; i < chunks.length; i++) val.push(chunks[i][rawIdx]); return val; } else return this._provider.getItem(rawIdx); }; /** * Clone shallow. * * @param clonedDims Determine which dims to clone. Will share the data if not specified. */ DataStore.prototype.clone = function(clonedDims, ignoreIndices) { var target = new DataStore(); var chunks = this._chunks; var clonedDimsMap = clonedDims && reduce(clonedDims, function(obj, dimIdx) { obj[dimIdx] = true; return obj; }, {}); if (clonedDimsMap) for (var i = 0; i < chunks.length; i++) target._chunks[i] = !clonedDimsMap[i] ? chunks[i] : cloneChunk(chunks[i]); else target._chunks = chunks; this._copyCommonProps(target); if (!ignoreIndices) target._indices = this._cloneIndices(); target._updateGetRawIdx(); return target; }; DataStore.prototype._copyCommonProps = function(target) { target._count = this._count; target._rawCount = this._rawCount; target._provider = this._provider; target._dimensions = this._dimensions; target._extent = clone$4(this._extent); target._rawExtent = clone$4(this._rawExtent); }; DataStore.prototype._cloneIndices = function() { if (this._indices) { var Ctor = this._indices.constructor; var indices = void 0; if (Ctor === Array) { var thisCount = this._indices.length; indices = new Ctor(thisCount); for (var i = 0; i < thisCount; i++) indices[i] = this._indices[i]; } else indices = new Ctor(this._indices); return indices; } return null; }; DataStore.prototype._getRawIdxIdentity = function(idx) { return idx; }; DataStore.prototype._getRawIdx = function(idx) { if (idx < this._count && idx >= 0) return this._indices[idx]; return -1; }; DataStore.prototype._updateGetRawIdx = function() { this.getRawIndex = this._indices ? this._getRawIdx : this._getRawIdxIdentity; }; DataStore.internalField = function() { function getDimValueSimply(dataItem, property, dataIndex, dimIndex) { return parseDataValue(dataItem[dimIndex], this._dimensions[dimIndex]); } defaultDimValueGetters = { arrayRows: getDimValueSimply, objectRows: function(dataItem, property, dataIndex, dimIndex) { return parseDataValue(dataItem[property], this._dimensions[dimIndex]); }, keyedColumns: getDimValueSimply, original: function(dataItem, property, dataIndex, dimIndex) { var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value); return parseDataValue(value instanceof Array ? value[dimIndex] : value, this._dimensions[dimIndex]); }, typedArray: function(dataItem, property, dataIndex, dimIndex) { return dataItem[dimIndex]; } }; }(); return DataStore; }(); //#endregion //#region node_modules/echarts/lib/data/helper/sourceManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * [REQUIREMENT_MEMO]: * (0) `metaRawOption` means `dimensions`/`sourceHeader`/`seriesLayoutBy` in raw option. * (1) Keep support the feature: `metaRawOption` can be specified both on `series` and * `root-dataset`. Them on `series` has higher priority. * (2) Do not support to set `metaRawOption` on a `non-root-dataset`, because it might * confuse users: whether those props indicate how to visit the upstream source or visit * the transform result source, and some transforms has nothing to do with these props, * and some transforms might have multiple upstream. * (3) Transforms should specify `metaRawOption` in each output, just like they can be * declared in `root-dataset`. * (4) At present only support visit source in `SERIES_LAYOUT_BY_COLUMN` in transforms. * That is for reducing complexity in transforms. * PENDING: Whether to provide transposition transform? * * [IMPLEMENTAION_MEMO]: * "sourceVisitConfig" are calculated from `metaRawOption` and `data`. * They will not be calculated until `source` is about to be visited (to prevent from * duplicate calcuation). `source` is visited only in series and input to transforms. * * [DIMENSION_INHERIT_RULE]: * By default the dimensions are inherited from ancestors, unless a transform return * a new dimensions definition. * Consider the case: * ```js * dataset: [{ * source: [ ['Product', 'Sales', 'Prise'], ['Cookies', 321, 44.21], ...] * }, { * transform: { type: 'filter', ... } * }] * dataset: [{ * dimension: ['Product', 'Sales', 'Prise'], * source: [ ['Cookies', 321, 44.21], ...] * }, { * transform: { type: 'filter', ... } * }] * ``` * The two types of option should have the same behavior after transform. * * * [SCENARIO]: * (1) Provide source data directly: * ```js * series: { * encode: {...}, * dimensions: [...] * seriesLayoutBy: 'row', * data: [[...]] * } * ``` * (2) Series refer to dataset. * ```js * series: [{ * encode: {...} * // Ignore datasetIndex means `datasetIndex: 0` * // and the dimensions defination in dataset is used * }, { * encode: {...}, * seriesLayoutBy: 'column', * datasetIndex: 1 * }] * ``` * (3) dataset transform * ```js * dataset: [{ * source: [...] * }, { * source: [...] * }, { * // By default from 0. * transform: { type: 'filter', config: {...} } * }, { * // Piped. * transform: [ * { type: 'filter', config: {...} }, * { type: 'sort', config: {...} } * ] * }, { * id: 'regressionData', * fromDatasetIndex: 1, * // Third-party transform * transform: { type: 'ecStat:regression', config: {...} } * }, { * // retrieve the extra result. * id: 'regressionFormula', * fromDatasetId: 'regressionData', * fromTransformResult: 1 * }] * ``` */ var SourceManager = function() { function SourceManager(sourceHost) { this._sourceList = []; this._storeList = []; this._upstreamSignList = []; this._versionSignBase = 0; this._dirty = true; this._sourceHost = sourceHost; } /** * Mark dirty. */ SourceManager.prototype.dirty = function() { this._setLocalSource([], []); this._storeList = []; this._dirty = true; }; SourceManager.prototype._setLocalSource = function(sourceList, upstreamSignList) { this._sourceList = sourceList; this._upstreamSignList = upstreamSignList; this._versionSignBase++; if (this._versionSignBase > 9e10) this._versionSignBase = 0; }; /** * For detecting whether the upstream source is dirty, so that * the local cached source (in `_sourceList`) should be discarded. */ SourceManager.prototype._getVersionSign = function() { return this._sourceHost.uid + "_" + this._versionSignBase; }; /** * Always return a source instance. Otherwise throw error. */ SourceManager.prototype.prepareSource = function() { if (this._isDirty()) { this._createSource(); this._dirty = false; } }; SourceManager.prototype._createSource = function() { this._setLocalSource([], []); var sourceHost = this._sourceHost; var upSourceMgrList = this._getUpstreamSourceManagers(); var hasUpstream = !!upSourceMgrList.length; var resultSourceList; var upstreamSignList; if (isSeries(sourceHost)) { var seriesModel = sourceHost; var data = void 0; var sourceFormat = void 0; var upSource = void 0; if (hasUpstream) { var upSourceMgr = upSourceMgrList[0]; upSourceMgr.prepareSource(); upSource = upSourceMgr.getSource(); data = upSource.data; sourceFormat = upSource.sourceFormat; upstreamSignList = [upSourceMgr._getVersionSign()]; } else { data = seriesModel.get("data", true); sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL; upstreamSignList = []; } var newMetaRawOption = this._getSourceMetaRawOption() || {}; var upMetaRawOption = upSource && upSource.metaRawOption || {}; var seriesLayoutBy = retrieve2(newMetaRawOption.seriesLayoutBy, upMetaRawOption.seriesLayoutBy) || null; var sourceHeader = retrieve2(newMetaRawOption.sourceHeader, upMetaRawOption.sourceHeader); var dimensions = retrieve2(newMetaRawOption.dimensions, upMetaRawOption.dimensions); resultSourceList = seriesLayoutBy !== upMetaRawOption.seriesLayoutBy || !!sourceHeader !== !!upMetaRawOption.sourceHeader || dimensions ? [createSource(data, { seriesLayoutBy, sourceHeader, dimensions }, sourceFormat)] : []; } else { var datasetModel = sourceHost; if (hasUpstream) { var result = this._applyTransform(upSourceMgrList); resultSourceList = result.sourceList; upstreamSignList = result.upstreamSignList; } else { resultSourceList = [createSource(datasetModel.get("source", true), this._getSourceMetaRawOption(), null)]; upstreamSignList = []; } } assert(resultSourceList && upstreamSignList); this._setLocalSource(resultSourceList, upstreamSignList); }; SourceManager.prototype._applyTransform = function(upMgrList) { var datasetModel = this._sourceHost; var transformOption = datasetModel.get("transform", true); var fromTransformResult = datasetModel.get("fromTransformResult", true); assert(fromTransformResult != null || transformOption != null); if (fromTransformResult != null) { var errMsg = ""; if (upMgrList.length !== 1) { errMsg = "When using `fromTransformResult`, there should be only one upstream dataset"; doThrow(errMsg); } } var sourceList; var upSourceList = []; var upstreamSignList = []; each$12(upMgrList, function(upMgr) { upMgr.prepareSource(); var upSource = upMgr.getSource(fromTransformResult || 0); var errMsg = ""; if (fromTransformResult != null && !upSource) { errMsg = "Can not retrieve result by `fromTransformResult`: " + fromTransformResult; doThrow(errMsg); } upSourceList.push(upSource); upstreamSignList.push(upMgr._getVersionSign()); }); if (transformOption) sourceList = applyDataTransform(transformOption, upSourceList, { datasetIndex: datasetModel.componentIndex }); else if (fromTransformResult != null) sourceList = [cloneSourceShallow(upSourceList[0])]; return { sourceList, upstreamSignList }; }; SourceManager.prototype._isDirty = function() { if (this._dirty) return true; var upSourceMgrList = this._getUpstreamSourceManagers(); for (var i = 0; i < upSourceMgrList.length; i++) { var upSrcMgr = upSourceMgrList[i]; if (upSrcMgr._isDirty() || this._upstreamSignList[i] !== upSrcMgr._getVersionSign()) return true; } }; /** * @param sourceIndex By default 0, means "main source". * In most cases there is only one source. */ SourceManager.prototype.getSource = function(sourceIndex) { sourceIndex = sourceIndex || 0; var source = this._sourceList[sourceIndex]; if (!source) { var upSourceMgrList = this._getUpstreamSourceManagers(); return upSourceMgrList[0] && upSourceMgrList[0].getSource(sourceIndex); } return source; }; /** * * Get a data store which can be shared across series. * Only available for series. * * @param seriesDimRequest Dimensions that are generated in series. * Should have been sorted by `storeDimIndex` asc. */ SourceManager.prototype.getSharedDataStore = function(seriesDimRequest) { assert(isSeries(this._sourceHost), "Can only call getDataStore on series source manager."); var schema = seriesDimRequest.makeStoreSchema(); return this._innerGetDataStore(schema.dimensions, seriesDimRequest.source, schema.hash); }; SourceManager.prototype._innerGetDataStore = function(storeDims, seriesSource, sourceReadKey) { var sourceIndex = 0; var storeList = this._storeList; var cachedStoreMap = storeList[sourceIndex]; if (!cachedStoreMap) cachedStoreMap = storeList[sourceIndex] = {}; var cachedStore = cachedStoreMap[sourceReadKey]; if (!cachedStore) { var upSourceMgr = this._getUpstreamSourceManagers()[0]; if (isSeries(this._sourceHost) && upSourceMgr) cachedStore = upSourceMgr._innerGetDataStore(storeDims, seriesSource, sourceReadKey); else { cachedStore = new DataStore(); cachedStore.initData(new DefaultDataProvider(seriesSource, storeDims.length), storeDims); } cachedStoreMap[sourceReadKey] = cachedStore; } return cachedStore; }; /** * PENDING: Is it fast enough? * If no upstream, return empty array. */ SourceManager.prototype._getUpstreamSourceManagers = function() { var sourceHost = this._sourceHost; if (isSeries(sourceHost)) { var datasetModel = querySeriesUpstreamDatasetModel(sourceHost); return !datasetModel ? [] : [datasetModel.getSourceManager()]; } else return map$1(queryDatasetUpstreamDatasetModels(sourceHost), function(datasetModel) { return datasetModel.getSourceManager(); }); }; SourceManager.prototype._getSourceMetaRawOption = function() { var sourceHost = this._sourceHost; var seriesLayoutBy; var sourceHeader; var dimensions; if (isSeries(sourceHost)) { seriesLayoutBy = sourceHost.get("seriesLayoutBy", true); sourceHeader = sourceHost.get("sourceHeader", true); dimensions = sourceHost.get("dimensions", true); } else if (!this._getUpstreamSourceManagers().length) { var model = sourceHost; seriesLayoutBy = model.get("seriesLayoutBy", true); sourceHeader = model.get("sourceHeader", true); dimensions = model.get("dimensions", true); } return { seriesLayoutBy, sourceHeader, dimensions }; }; return SourceManager; }(); function disableTransformOptionMerge(datasetModel) { datasetModel.option.transform && setAsPrimitive(datasetModel.option.transform); } function isSeries(sourceHost) { return sourceHost.mainType === "series"; } function doThrow(errMsg) { throw new Error(errMsg); } //#endregion //#region node_modules/echarts/lib/component/tooltip/tooltipMarkup.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TOOLTIP_LINE_HEIGHT_CSS = "line-height:1"; function getTooltipLineHeight(textStyle) { var lineHeight = textStyle.lineHeight; if (lineHeight == null) return TOOLTIP_LINE_HEIGHT_CSS; else return "line-height:" + encodeHTML(lineHeight + "") + "px"; } function getTooltipTextStyle(textStyle, renderMode) { var nameFontColor = textStyle.color || tokens.color.tertiary; var nameFontSize = textStyle.fontSize || 12; var nameFontWeight = textStyle.fontWeight || "400"; var valueFontColor = textStyle.color || tokens.color.secondary; var valueFontSize = textStyle.fontSize || 14; var valueFontWeight = textStyle.fontWeight || "900"; if (renderMode === "html") return { nameStyle: "font-size:" + encodeHTML(nameFontSize + "") + "px;color:" + encodeHTML(nameFontColor) + ";font-weight:" + encodeHTML(nameFontWeight + ""), valueStyle: "font-size:" + encodeHTML(valueFontSize + "") + "px;color:" + encodeHTML(valueFontColor) + ";font-weight:" + encodeHTML(valueFontWeight + "") }; else return { nameStyle: { fontSize: nameFontSize, fill: nameFontColor, fontWeight: nameFontWeight }, valueStyle: { fontSize: valueFontSize, fill: valueFontColor, fontWeight: valueFontWeight } }; } var HTML_GAPS = [ 0, 10, 20, 30 ]; var RICH_TEXT_GAPS = [ "", "\n", "\n\n", "\n\n\n" ]; function createTooltipMarkup(type, option) { option.type = type; return option; } function isSectionFragment(frag) { return frag.type === "section"; } function getBuilder(frag) { return isSectionFragment(frag) ? buildSection : buildNameValue; } function getBlockGapLevel(frag) { if (isSectionFragment(frag)) { var gapLevel_1 = 0; var subBlockLen = frag.blocks.length; var hasInnerGap_1 = subBlockLen > 1 || subBlockLen > 0 && !frag.noHeader; each$12(frag.blocks, function(subBlock) { var subGapLevel = getBlockGapLevel(subBlock); if (subGapLevel >= gapLevel_1) gapLevel_1 = subGapLevel + +(hasInnerGap_1 && (!subGapLevel || isSectionFragment(subBlock) && !subBlock.noHeader)); }); return gapLevel_1; } return 0; } function buildSection(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) { var noHeader = fragment.noHeader; var gaps = getGap(getBlockGapLevel(fragment)); var subMarkupTextList = []; var subBlocks = fragment.blocks || []; assert(!subBlocks || isArray$1(subBlocks)); subBlocks = subBlocks || []; var orderMode = ctx.orderMode; if (fragment.sortBlocks && orderMode) { subBlocks = subBlocks.slice(); var orderMap = { valueAsc: "asc", valueDesc: "desc" }; if (hasOwn(orderMap, orderMode)) { var comparator_1 = new SortOrderComparator(orderMap[orderMode], null); subBlocks.sort(function(a, b) { return comparator_1.evaluate(a.sortParam, b.sortParam); }); } else if (orderMode === "seriesDesc") subBlocks.reverse(); } each$12(subBlocks, function(subBlock, idx) { var valueFormatter = fragment.valueFormatter; var subMarkupText = getBuilder(subBlock)(valueFormatter ? extend(extend({}, ctx), { valueFormatter }) : ctx, subBlock, idx > 0 ? gaps.html : 0, toolTipTextStyle); subMarkupText != null && subMarkupTextList.push(subMarkupText); }); var subMarkupText = ctx.renderMode === "richText" ? subMarkupTextList.join(gaps.richText) : wrapBlockHTML(toolTipTextStyle, subMarkupTextList.join(""), noHeader ? topMarginForOuterGap : gaps.html); if (noHeader) return subMarkupText; var displayableHeader = makeValueReadable(fragment.header, "ordinal", ctx.useUTC); var nameStyle = getTooltipTextStyle(toolTipTextStyle, ctx.renderMode).nameStyle; var tooltipLineHeight = getTooltipLineHeight(toolTipTextStyle); if (ctx.renderMode === "richText") return wrapInlineNameRichText(ctx, displayableHeader, nameStyle) + gaps.richText + subMarkupText; else return wrapBlockHTML(toolTipTextStyle, "
" + encodeHTML(displayableHeader) + "
" + subMarkupText, topMarginForOuterGap); } function buildNameValue(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) { var renderMode = ctx.renderMode; var noName = fragment.noName; var noValue = fragment.noValue; var noMarker = !fragment.markerType; var name = fragment.name; var useUTC = ctx.useUTC; var valueFormatter = fragment.valueFormatter || ctx.valueFormatter || function(value) { value = isArray$1(value) ? value : [value]; return map$1(value, function(val, idx) { return makeValueReadable(val, isArray$1(valueTypeOption) ? valueTypeOption[idx] : valueTypeOption, useUTC); }); }; if (noName && noValue) return; var markerStr = noMarker ? "" : ctx.markupStyleCreator.makeTooltipMarker(fragment.markerType, fragment.markerColor || tokens.color.secondary, renderMode); var readableName = noName ? "" : makeValueReadable(name, "ordinal", useUTC); var valueTypeOption = fragment.valueType; var readableValueList = noValue ? [] : valueFormatter(fragment.value, fragment.rawDataIndex); var valueAlignRight = !noMarker || !noName; var valueCloseToMarker = !noMarker && noName; var _a = getTooltipTextStyle(toolTipTextStyle, renderMode), nameStyle = _a.nameStyle, valueStyle = _a.valueStyle; return renderMode === "richText" ? (noMarker ? "" : markerStr) + (noName ? "" : wrapInlineNameRichText(ctx, readableName, nameStyle)) + (noValue ? "" : wrapInlineValueRichText(ctx, readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)) : wrapBlockHTML(toolTipTextStyle, (noMarker ? "" : markerStr) + (noName ? "" : wrapInlineNameHTML(readableName, !noMarker, nameStyle)) + (noValue ? "" : wrapInlineValueHTML(readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)), topMarginForOuterGap); } /** * @return markupText. null/undefined means no content. */ function buildTooltipMarkup(fragment, markupStyleCreator, renderMode, orderMode, useUTC, toolTipTextStyle) { if (!fragment) return; return getBuilder(fragment)({ useUTC, renderMode, orderMode, markupStyleCreator, valueFormatter: fragment.valueFormatter }, fragment, 0, toolTipTextStyle); } function getGap(gapLevel) { return { html: HTML_GAPS[gapLevel], richText: RICH_TEXT_GAPS[gapLevel] }; } function wrapBlockHTML(textStyle, encodedContent, topGap) { var clearfix = "
"; var marginCSS = "margin: " + topGap + "px 0 0"; var tooltipLineHeight = getTooltipLineHeight(textStyle); return "
" + encodedContent + clearfix + "
"; } function wrapInlineNameHTML(name, leftHasMarker, style) { var marginCss = leftHasMarker ? "margin-left:2px" : ""; return "" + encodeHTML(name) + ""; } function wrapInlineValueHTML(valueList, alignRight, valueCloseToMarker, style) { var alignCSS = alignRight ? "float:right;margin-left:" + (valueCloseToMarker ? "10px" : "20px") : ""; valueList = isArray$1(valueList) ? valueList : [valueList]; return "" + map$1(valueList, function(value) { return encodeHTML(value); }).join("  ") + ""; } function wrapInlineNameRichText(ctx, name, style) { return ctx.markupStyleCreator.wrapRichTextStyle(name, style); } function wrapInlineValueRichText(ctx, values, alignRight, valueCloseToMarker, style) { var styles = [style]; var paddingLeft = valueCloseToMarker ? 10 : 20; alignRight && styles.push({ padding: [ 0, 0, 0, paddingLeft ], align: "right" }); return ctx.markupStyleCreator.wrapRichTextStyle(isArray$1(values) ? values.join(" ") : values, styles); } function retrieveVisualColorForTooltipMarker(series, dataIndex) { var color = series.getData().getItemVisual(dataIndex, "style")[series.visualDrawType]; return convertToColorString(color); } function getPaddingFromTooltipModel(model, renderMode) { var padding = model.get("padding"); return padding != null ? padding : renderMode === "richText" ? [8, 10] : 10; } /** * The major feature is generate styles for `renderMode: 'richText'`. * But it also serves `renderMode: 'html'` to provide * "renderMode-independent" API. */ var TooltipMarkupStyleCreator = function() { function TooltipMarkupStyleCreator() { this.richTextStyles = {}; this._nextStyleNameId = getRandomIdBase(); } TooltipMarkupStyleCreator.prototype._generateStyleName = function() { return "__EC_aUTo_" + this._nextStyleNameId++; }; TooltipMarkupStyleCreator.prototype.makeTooltipMarker = function(markerType, colorStr, renderMode) { var markerId = renderMode === "richText" ? this._generateStyleName() : null; var marker = getTooltipMarker({ color: colorStr, type: markerType, renderMode, markerId }); if (isString(marker)) return marker; else { assert(markerId); this.richTextStyles[markerId] = marker.style; return marker.content; } }; /** * @usage * ```ts * const styledText = markupStyleCreator.wrapRichTextStyle([ * // The styles will be auto merged. * { * fontSize: 12, * color: 'blue' * }, * { * padding: 20 * } * ]); * ``` */ TooltipMarkupStyleCreator.prototype.wrapRichTextStyle = function(text, styles) { var finalStl = {}; if (isArray$1(styles)) each$12(styles, function(stl) { return extend(finalStl, stl); }); else extend(finalStl, styles); var styleName = this._generateStyleName(); this.richTextStyles[styleName] = finalStl; return "{" + styleName + "|" + text + "}"; }; return TooltipMarkupStyleCreator; }(); //#endregion //#region node_modules/echarts/lib/component/tooltip/seriesFormatTooltip.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function defaultSeriesFormatTooltip(opt) { var series = opt.series; var dataIndex = opt.dataIndex; var multipleSeries = opt.multipleSeries; var data = series.getData(); var tooltipDims = data.mapDimensionsAll("defaultedTooltip"); var tooltipDimLen = tooltipDims.length; var value = series.getRawValue(dataIndex); var isValueArr = isArray$1(value); var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex); var inlineValue; var inlineValueType; var subBlocks; var sortParam; if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) { var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor); inlineValue = formatArrResult.inlineValues; inlineValueType = formatArrResult.inlineValueTypes; subBlocks = formatArrResult.blocks; sortParam = formatArrResult.inlineValues[0]; } else if (tooltipDimLen) { var dimInfo = data.getDimensionInfo(tooltipDims[0]); sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]); inlineValueType = dimInfo.type; } else sortParam = inlineValue = isValueArr ? value[0] : value; var seriesNameSpecified = isNameSpecified(series); var seriesName = seriesNameSpecified && series.name || ""; var itemName = data.getName(dataIndex); var inlineName = multipleSeries ? seriesName : itemName; return createTooltipMarkup("section", { header: seriesName, noHeader: multipleSeries || !seriesNameSpecified, sortParam, blocks: [createTooltipMarkup("nameValue", { markerType: "item", markerColor, name: inlineName, noName: !trim$1(inlineName), value: inlineValue, valueType: inlineValueType, rawDataIndex: data.getRawIndex(dataIndex) })].concat(subBlocks || []) }); } function formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) { var data = series.getData(); var isValueMultipleLine = reduce(value, function(isValueMultipleLine, val, idx) { var dimItem = data.getDimensionInfo(idx); return isValueMultipleLine = isValueMultipleLine || dimItem && dimItem.tooltip !== false && dimItem.displayName != null; }, false); var inlineValues = []; var inlineValueTypes = []; var blocks = []; tooltipDims.length ? each$12(tooltipDims, function(dim) { setEachItem(retrieveRawValue(data, dataIndex, dim), dim); }) : each$12(value, setEachItem); function setEachItem(val, dim) { var dimInfo = data.getDimensionInfo(dim); if (!dimInfo || dimInfo.otherDims.tooltip === false) return; if (isValueMultipleLine) blocks.push(createTooltipMarkup("nameValue", { markerType: "subItem", markerColor: colorStr, name: dimInfo.displayName, value: val, valueType: dimInfo.type })); else { inlineValues.push(val); inlineValueTypes.push(dimInfo.type); } } return { inlineValues, inlineValueTypes, blocks }; } //#endregion //#region node_modules/echarts/lib/model/Series.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$22 = makeInner(); function getSelectionKey(data, dataIndex) { return data.getName(dataIndex) || data.getId(dataIndex); } var SERIES_UNIVERSAL_TRANSITION_PROP = "__universalTransitionEnabled"; var SeriesModel = function(_super) { __extends(SeriesModel, _super); function SeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._selectedDataIndicesMap = {}; return _this; } SeriesModel.prototype.init = function(option, parentModel, ecModel) { this.seriesIndex = this.componentIndex; this.dataTask = createTask({ count: dataTaskCount, reset: dataTaskReset }); this.dataTask.context = { model: this }; this.mergeDefaultAndTheme(option, ecModel); (inner$22(this).sourceManager = new SourceManager(this)).prepareSource(); var data = this.getInitialData(option, ecModel); wrapData(data, this); this.dataTask.context.data = data; assert(data, "getInitialData returned invalid data."); inner$22(this).dataBeforeProcessed = data; autoSeriesName(this); this._initSelectedMapFromData(data); }; /** * Util for merge default and theme to option */ SeriesModel.prototype.mergeDefaultAndTheme = function(option, ecModel) { var layoutMode = fetchLayoutMode(this); var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; var themeSubType = this.subType; if (ComponentModel.hasClass(themeSubType)) themeSubType += "Series"; merge(option, ecModel.getTheme().get(this.subType)); merge(option, this.getDefaultOption()); defaultEmphasis(option, "label", ["show"]); this.fillDataTextStyle(option.data); if (layoutMode) mergeLayoutParam(option, inputPositionParams, layoutMode); }; SeriesModel.prototype.mergeOption = function(newSeriesOption, ecModel) { newSeriesOption = merge(this.option, newSeriesOption, true); this.fillDataTextStyle(newSeriesOption.data); var layoutMode = fetchLayoutMode(this); if (layoutMode) mergeLayoutParam(this.option, newSeriesOption, layoutMode); var sourceManager = inner$22(this).sourceManager; sourceManager.dirty(); sourceManager.prepareSource(); var data = this.getInitialData(newSeriesOption, ecModel); wrapData(data, this); this.dataTask.dirty(); this.dataTask.context.data = data; inner$22(this).dataBeforeProcessed = data; autoSeriesName(this); this._initSelectedMapFromData(data); }; SeriesModel.prototype.fillDataTextStyle = function(data) { if (data && !isTypedArray(data)) { var props = ["show"]; for (var i = 0; i < data.length; i++) if (data[i] && data[i].label) defaultEmphasis(data[i], "label", props); } }; /** * Init a data structure from data related option in series * Must be overridden. */ SeriesModel.prototype.getInitialData = function(option, ecModel) {}; /** * Append data to list */ SeriesModel.prototype.appendData = function(params) { this.getRawData().appendData(params.data); }; /** * Consider some method like `filter`, `map` need make new data, * We should make sure that `seriesModel.getData()` get correct * data in the stream procedure. So we fetch data from upstream * each time `task.perform` called. */ SeriesModel.prototype.getData = function(dataType) { var task = getCurrentTask(this); if (task) { var data = task.context.data; return dataType == null || !data.getLinkedData ? data : data.getLinkedData(dataType); } else return inner$22(this).data; }; SeriesModel.prototype.getAllData = function() { var mainData = this.getData(); return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{ data: mainData }]; }; SeriesModel.prototype.setData = function(data) { var task = getCurrentTask(this); if (task) { var context = task.context; context.outputData = data; if (task !== this.dataTask) context.data = data; } inner$22(this).data = data; }; SeriesModel.prototype.getEncode = function() { var encode = this.get("encode", true); if (encode) return createHashMap(encode); }; SeriesModel.prototype.getSourceManager = function() { return inner$22(this).sourceManager; }; SeriesModel.prototype.getSource = function() { return this.getSourceManager().getSource(); }; /** * Get data before processed */ SeriesModel.prototype.getRawData = function() { return inner$22(this).dataBeforeProcessed; }; SeriesModel.prototype.getColorBy = function() { return this.get("colorBy") || "series"; }; SeriesModel.prototype.isColorBySeries = function() { return this.getColorBy() === "series"; }; /** * Get base axis if has coordinate system and has axis. * By default use coordSys.getBaseAxis(); * Can be overridden for some chart. * @return {type} description */ SeriesModel.prototype.getBaseAxis = function() { var coordSys = this.coordinateSystem; return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis(); }; /** * Retrieve the index of nearest value in the view coordinate. * Data position is compared with each axis's dataToCoord. * * @param axisDim axis dimension * @param dim data dimension * @param value * @param [maxDistance=Infinity] The maximum distance in view coordinate space * @return If and only if multiple indices has * the same value, they are put to the result. */ SeriesModel.prototype.indicesOfNearest = function(axisDim, dim, value, maxDistance) { var data = this.getData(); var coordSys = this.coordinateSystem; var axis = coordSys && coordSys.getAxis(axisDim); if (!coordSys || !axis) return []; var targetCoord = axis.dataToCoord(value); if (maxDistance == null) maxDistance = Infinity; var nearestIndices = []; var minDist = Infinity; var minDiff = -1; var nearestIndicesLen = 0; var dimIdx = data.getDimensionIndex(dim); var store = data.getStore(); for (var idx = 0, len = store.count(); idx < len; idx++) { var dimValue = store.get(dimIdx, idx); var diff = targetCoord - axis.dataToCoord(dimValue); var dist = Math.abs(diff); if (dist <= maxDistance) { if (dist < minDist || dist === minDist && diff >= 0 && minDiff < 0) { minDist = dist; minDiff = diff; nearestIndicesLen = 0; } if (diff === minDiff) nearestIndices[nearestIndicesLen++] = idx; } } nearestIndices.length = nearestIndicesLen; return nearestIndices; }; /** * Default tooltip formatter * * @param dataIndex * @param multipleSeries * @param dataType * @param renderMode valid values: 'html'(by default) and 'richText'. * 'html' is used for rendering tooltip in extra DOM form, and the result * string is used as DOM HTML content. * 'richText' is used for rendering tooltip in rich text form, for those where * DOM operation is not supported. * @return formatted tooltip with `html` and `markers` * Notice: The override method can also return string */ SeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { return defaultSeriesFormatTooltip({ series: this, dataIndex, multipleSeries }); }; SeriesModel.prototype.isAnimationEnabled = function() { var ecModel = this.ecModel; if (env.node && !(ecModel && ecModel.ssr)) return false; var animationEnabled = this.getShallow("animation"); if (animationEnabled) { if (this.getData().count() > this.getShallow("animationThreshold")) animationEnabled = false; } return !!animationEnabled; }; SeriesModel.prototype.restoreData = function() { this.dataTask.dirty(); }; SeriesModel.prototype.getColorFromPalette = function(name, scope, requestColorNum) { var ecModel = this.ecModel; var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum); if (!color) color = ecModel.getColorFromPalette(name, scope, requestColorNum); return color; }; /** * Use `data.mapDimensionsAll(coordDim)` instead. * @deprecated */ SeriesModel.prototype.coordDimToDataDim = function(coordDim) { return this.getRawData().mapDimensionsAll(coordDim); }; /** * Get progressive rendering count each step */ SeriesModel.prototype.getProgressive = function() { return this.get("progressive"); }; /** * Get progressive rendering count each step */ SeriesModel.prototype.getProgressiveThreshold = function() { return this.get("progressiveThreshold"); }; SeriesModel.prototype.select = function(innerDataIndices, dataType) { this._innerSelect(this.getData(dataType), innerDataIndices); }; SeriesModel.prototype.unselect = function(innerDataIndices, dataType) { var selectedMap = this.option.selectedMap; if (!selectedMap) return; var selectedMode = this.option.selectedMode; var data = this.getData(dataType); if (selectedMode === "series" || selectedMap === "all") { this.option.selectedMap = {}; this._selectedDataIndicesMap = {}; return; } for (var i = 0; i < innerDataIndices.length; i++) { var dataIndex = innerDataIndices[i]; var nameOrId = getSelectionKey(data, dataIndex); selectedMap[nameOrId] = false; this._selectedDataIndicesMap[nameOrId] = -1; } }; SeriesModel.prototype.toggleSelect = function(innerDataIndices, dataType) { var tmpArr = []; for (var i = 0; i < innerDataIndices.length; i++) { tmpArr[0] = innerDataIndices[i]; this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr, dataType) : this.select(tmpArr, dataType); } }; SeriesModel.prototype.getSelectedDataIndices = function() { if (this.option.selectedMap === "all") return [].slice.call(this.getData().getIndices()); var selectedDataIndicesMap = this._selectedDataIndicesMap; var nameOrIds = keys(selectedDataIndicesMap); var dataIndices = []; for (var i = 0; i < nameOrIds.length; i++) { var dataIndex = selectedDataIndicesMap[nameOrIds[i]]; if (dataIndex >= 0) dataIndices.push(dataIndex); } return dataIndices; }; SeriesModel.prototype.isSelected = function(dataIndex, dataType) { var selectedMap = this.option.selectedMap; if (!selectedMap) return false; var data = this.getData(dataType); return (selectedMap === "all" || selectedMap[getSelectionKey(data, dataIndex)]) && !data.getItemModel(dataIndex).get(["select", "disabled"]); }; SeriesModel.prototype.isUniversalTransitionEnabled = function() { if (this["__universalTransitionEnabled"]) return true; var universalTransitionOpt = this.option.universalTransition; if (!universalTransitionOpt) return false; if (universalTransitionOpt === true) return true; return universalTransitionOpt && universalTransitionOpt.enabled; }; SeriesModel.prototype._innerSelect = function(data, innerDataIndices) { var _a, _b; var option = this.option; var selectedMode = option.selectedMode; var len = innerDataIndices.length; if (!selectedMode || !len) return; if (selectedMode === "series") option.selectedMap = "all"; else if (selectedMode === "multiple") { if (!isObject$3(option.selectedMap)) option.selectedMap = {}; var selectedMap = option.selectedMap; for (var i = 0; i < len; i++) { var dataIndex = innerDataIndices[i]; var nameOrId = getSelectionKey(data, dataIndex); selectedMap[nameOrId] = true; this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex); } } else if (selectedMode === "single" || selectedMode === true) { var lastDataIndex = innerDataIndices[len - 1]; var nameOrId = getSelectionKey(data, lastDataIndex); option.selectedMap = (_a = {}, _a[nameOrId] = true, _a); this._selectedDataIndicesMap = (_b = {}, _b[nameOrId] = data.getRawIndex(lastDataIndex), _b); } }; SeriesModel.prototype._initSelectedMapFromData = function(data) { if (this.option.selectedMap) return; var dataIndices = []; if (data.hasItemOption) data.each(function(idx) { var rawItem = data.getRawDataItem(idx); if (rawItem && rawItem.selected) dataIndices.push(idx); }); if (dataIndices.length > 0) this._innerSelect(data, dataIndices); }; SeriesModel.registerClass = function(clz) { return ComponentModel.registerClass(clz); }; SeriesModel.protoInitialize = function() { var proto = SeriesModel.prototype; proto.type = "series.__base__"; proto.seriesIndex = 0; proto.ignoreStyleOnData = false; proto.hasSymbolVisual = false; proto.defaultSymbol = "circle"; proto.visualStyleAccessPath = "itemStyle"; proto.visualDrawType = "fill"; }(); return SeriesModel; }(ComponentModel); mixin(SeriesModel, DataFormatMixin); mixin(SeriesModel, PaletteMixin); mountExtend(SeriesModel, ComponentModel); /** * MUST be called after `prepareSource` called * Here we need to make auto series, especially for auto legend. But we * do not modify series.name in option to avoid side effects. */ function autoSeriesName(seriesModel) { var name = seriesModel.name; if (!isNameSpecified(seriesModel)) seriesModel.name = getSeriesAutoName(seriesModel) || name; } function getSeriesAutoName(seriesModel) { var data = seriesModel.getRawData(); var dataDims = data.mapDimensionsAll("seriesName"); var nameArr = []; each$12(dataDims, function(dataDim) { var dimInfo = data.getDimensionInfo(dataDim); dimInfo.displayName && nameArr.push(dimInfo.displayName); }); return nameArr.join(" "); } function dataTaskCount(context) { return context.model.getRawData().count(); } function dataTaskReset(context) { var seriesModel = context.model; seriesModel.setData(seriesModel.getRawData().cloneShallow()); return dataTaskProgress; } function dataTaskProgress(param, context) { if (context.outputData && param.end > context.outputData.count()) context.model.getRawData().cloneShallow(context.outputData); } function wrapData(data, seriesModel) { each$12(concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function(methodName) { data.wrapMethod(methodName, curry$1(onDataChange, seriesModel)); }); } function onDataChange(seriesModel, newList) { var task = getCurrentTask(seriesModel); if (task) task.setOutputEnd((newList || this).count()); return newList; } function getCurrentTask(seriesModel) { var scheduler = (seriesModel.ecModel || {}).scheduler; var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid); if (pipeline) { var task = pipeline.currentTask; if (task) { var agentStubMap = task.agentStubMap; if (agentStubMap) task = agentStubMap.get(seriesModel.uid); } return task; } } //#endregion //#region node_modules/echarts/lib/view/Component.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ComponentView = function() { function ComponentView() { this.group = new Group$3(); this.uid = getUID("viewComponent"); } ComponentView.prototype.init = function(ecModel, api) {}; ComponentView.prototype.render = function(model, ecModel, api, payload) {}; ComponentView.prototype.dispose = function(ecModel, api) {}; ComponentView.prototype.updateView = function(model, ecModel, api, payload) {}; ComponentView.prototype.updateLayout = function(model, ecModel, api, payload) {}; ComponentView.prototype.updateVisual = function(model, ecModel, api, payload) {}; /** * Hook for toggle blur target series. * Can be used in marker for blur or leave blur the markers */ ComponentView.prototype.toggleBlurSeries = function(seriesModels, isBlur, ecModel) {}; /** * Traverse the new rendered elements. * * It will traverse the new added element in progressive rendering. * And traverse all in normal rendering. */ ComponentView.prototype.eachRendered = function(cb) { var group = this.group; if (group) group.traverse(cb); }; return ComponentView; }(); enableClassExtend(ComponentView); enableClassManagement(ComponentView); //#endregion //#region node_modules/echarts/lib/chart/helper/createRenderPlanner.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @return {string} If large mode changed, return string 'reset'; */ function createRenderPlanner() { var inner = makeInner(); return function(seriesModel) { var fields = inner(seriesModel); var pipelineContext = seriesModel.pipelineContext; var originalLarge = !!fields.large; var originalProgressive = !!fields.progressiveRender; var large = fields.large = !!(pipelineContext && pipelineContext.large); var progressive = fields.progressiveRender = !!(pipelineContext && pipelineContext.progressiveRender); return !!(originalLarge !== large || originalProgressive !== progressive) && "reset"; }; } //#endregion //#region node_modules/echarts/lib/view/Chart.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$21 = makeInner(); var renderPlanner = createRenderPlanner(); var ChartView = function() { function ChartView() { this.group = new Group$3(); this.uid = getUID("viewChart"); this.renderTask = createTask({ plan: renderTaskPlan, reset: renderTaskReset }); this.renderTask.context = { view: this }; } ChartView.prototype.init = function(ecModel, api) {}; ChartView.prototype.render = function(seriesModel, ecModel, api, payload) { throw new Error("render method must been implemented"); }; /** * Highlight series or specified data item. */ ChartView.prototype.highlight = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(payload && payload.dataType); if (!data) { error("Unknown dataType " + payload.dataType); return; } toggleHighlight(data, payload, "emphasis"); }; /** * Downplay series or specified data item. */ ChartView.prototype.downplay = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(payload && payload.dataType); if (!data) { error("Unknown dataType " + payload.dataType); return; } toggleHighlight(data, payload, "normal"); }; /** * `remove` only occurs when series is filtered out, typically by legend. * And theirafter the view can only be rendered again via * `ChartView['render']` or `ChartView['incrementalPrepareRender']`. */ ChartView.prototype.remove = function(ecModel, api) { this.group.removeAll(); }; /** * Dispose self. */ ChartView.prototype.dispose = function(ecModel, api) {}; ChartView.prototype.updateView = function(seriesModel, ecModel, api, payload) { this.render(seriesModel, ecModel, api, payload); }; ChartView.prototype.updateVisual = function(seriesModel, ecModel, api, payload) { this.render(seriesModel, ecModel, api, payload); }; /** * Traverse the new rendered elements. * * It will traverse the new added element in progressive rendering. * And traverse all in normal rendering. */ ChartView.prototype.eachRendered = function(cb) { traverseElements(this.group, cb); }; ChartView.markUpdateMethod = function(payload, methodName) { inner$21(payload).updateMethod = methodName; }; ChartView.protoInitialize = function() { var proto = ChartView.prototype; proto.type = "chart"; }(); return ChartView; }(); /** * Set state of single element */ function elSetState(el, state, highlightDigit) { if (el && isHighDownDispatcher(el)) (state === "emphasis" ? enterEmphasis : leaveEmphasis)(el, highlightDigit); } function toggleHighlight(data, payload, state) { var dataIndex = queryDataIndex(data, payload); var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null; if (dataIndex != null) each$12(normalizeToArray(dataIndex), function(dataIdx) { elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit); }); else data.eachItemGraphicEl(function(el) { elSetState(el, state, highlightDigit); }); } enableClassExtend(ChartView, ["dispose"]); enableClassManagement(ChartView); function renderTaskPlan(context) { return renderPlanner(context.model); } function renderTaskReset(context) { var seriesModel = context.model; var ecModel = context.ecModel; var api = context.api; var payload = context.payload; var progressiveRender = seriesModel.pipelineContext.progressiveRender; var view = context.view; var updateMethod = payload && inner$21(payload).updateMethod; var methodName = progressiveRender ? "incrementalPrepareRender" : updateMethod && view[updateMethod] ? updateMethod : "render"; if (methodName !== "render") view[methodName](seriesModel, ecModel, api, payload); return progressMethodMap[methodName]; } var progressMethodMap = { incrementalPrepareRender: { progress: function(params, context) { context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload); } }, render: { forceFirstProgress: true, progress: function(params, context) { context.view.render(context.model, context.ecModel, context.api, context.payload); } } }; //#endregion //#region node_modules/echarts/lib/util/throttle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ORIGIN_METHOD = "\0__throttleOriginMethod"; var RATE = "\0__throttleRate"; var THROTTLE_TYPE = "\0__throttleType"; /** * @public * @param {(Function)} fn * @param {number} [delay=0] Unit: ms. * @param {boolean} [debounce=false] * true: If call interval less than `delay`, only the last call works. * false: If call interval less than `delay, call works on fixed rate. * @return {(Function)} throttled fn. */ function throttle(fn, delay, debounce) { var currCall; var lastCall = 0; var lastExec = 0; var timer = null; var diff; var scope; var args; var debounceNextCall; delay = delay || 0; function exec() { lastExec = (/* @__PURE__ */ new Date()).getTime(); timer = null; fn.apply(scope, args || []); } var cb = function() { var cbArgs = []; for (var _i = 0; _i < arguments.length; _i++) cbArgs[_i] = arguments[_i]; currCall = (/* @__PURE__ */ new Date()).getTime(); scope = this; args = cbArgs; var thisDelay = debounceNextCall || delay; var thisDebounce = debounceNextCall || debounce; debounceNextCall = null; diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay; clearTimeout(timer); if (thisDebounce) timer = setTimeout(exec, thisDelay); else if (diff >= 0) exec(); else timer = setTimeout(exec, -diff); lastCall = currCall; }; /** * Clear throttle. * @public */ cb.clear = function() { if (timer) { clearTimeout(timer); timer = null; } }; /** * Enable debounce once. */ cb.debounceNextCall = function(debounceDelay) { debounceNextCall = debounceDelay; }; return cb; } /** * Create throttle method or update throttle rate. * * @example * ComponentView.prototype.render = function () { * ... * throttle.createOrUpdate( * this, * '_dispatchAction', * this.model.get('throttle'), * 'fixRate' * ); * }; * ComponentView.prototype.remove = function () { * throttle.clear(this, '_dispatchAction'); * }; * ComponentView.prototype.dispose = function () { * throttle.clear(this, '_dispatchAction'); * }; * */ function createOrUpdate(obj, fnAttr, rate, throttleType) { var fn = obj[fnAttr]; if (!fn) return; var originFn = fn[ORIGIN_METHOD] || fn; var lastThrottleType = fn[THROTTLE_TYPE]; if (fn[RATE] !== rate || lastThrottleType !== throttleType) { if (rate == null || !throttleType) return obj[fnAttr] = originFn; fn = obj[fnAttr] = throttle(originFn, rate, throttleType === "debounce"); fn[ORIGIN_METHOD] = originFn; fn[THROTTLE_TYPE] = throttleType; fn[RATE] = rate; } return fn; } /** * Clear throttle. Example see throttle.createOrUpdate. */ function clear$1(obj, fnAttr) { var fn = obj[fnAttr]; if (fn && fn[ORIGIN_METHOD]) { fn.clear && fn.clear(); obj[fnAttr] = fn[ORIGIN_METHOD]; } } //#endregion //#region node_modules/echarts/lib/visual/style.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$20 = makeInner(); var defaultStyleMappers = { itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true), lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true) }; var defaultColorKey = { lineStyle: "stroke", itemStyle: "fill" }; function getStyleMapper(seriesModel, stylePath) { var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath]; if (!styleMapper) { console.warn("Unknown style type '" + stylePath + "'."); return defaultStyleMappers.itemStyle; } return styleMapper; } function getDefaultColorKey(seriesModel, stylePath) { var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath]; if (!colorKey) { console.warn("Unknown style type '" + stylePath + "'."); return "fill"; } return colorKey; } var seriesStyleTask = { createOnAllSeries: true, performRawSeries: true, reset: function(seriesModel, ecModel) { var data = seriesModel.getData(); var stylePath = seriesModel.visualStyleAccessPath || "itemStyle"; var styleModel = seriesModel.getModel(stylePath); var globalStyle = getStyleMapper(seriesModel, stylePath)(styleModel); var decalOption = styleModel.getShallow("decal"); if (decalOption) { data.setVisual("decal", decalOption); decalOption.dirty = true; } var colorKey = getDefaultColorKey(seriesModel, stylePath); var color = globalStyle[colorKey]; var colorCallback = isFunction(color) ? color : null; var hasAutoColor = globalStyle.fill === "auto" || globalStyle.stroke === "auto"; if (!globalStyle[colorKey] || colorCallback || hasAutoColor) { var colorPalette = seriesModel.getColorFromPalette(seriesModel.name, null, ecModel.getSeriesCount()); if (!globalStyle[colorKey]) { globalStyle[colorKey] = colorPalette; data.setVisual("colorFromPalette", true); } globalStyle.fill = globalStyle.fill === "auto" || isFunction(globalStyle.fill) ? colorPalette : globalStyle.fill; globalStyle.stroke = globalStyle.stroke === "auto" || isFunction(globalStyle.stroke) ? colorPalette : globalStyle.stroke; } data.setVisual("style", globalStyle); data.setVisual("drawType", colorKey); if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) { data.setVisual("colorFromPalette", false); return { dataEach: function(data, idx) { var dataParams = seriesModel.getDataParams(idx); var itemStyle = extend({}, globalStyle); itemStyle[colorKey] = colorCallback(dataParams); data.setItemVisual(idx, "style", itemStyle); } }; } } }; var sharedModel = new Model(); var dataStyleTask = { createOnAllSeries: true, reset: function(seriesModel, ecModel) { if (seriesModel.ignoreStyleOnData) return; var data = seriesModel.getData(); var stylePath = seriesModel.visualStyleAccessPath || "itemStyle"; var getStyle = getStyleMapper(seriesModel, stylePath); var colorKey = data.getVisual("drawType"); return { dataEach: data.hasItemOption ? function(data, idx) { var rawItem = data.getRawDataItem(idx); if (rawItem && rawItem[stylePath]) { sharedModel.option = rawItem[stylePath]; var style = getStyle(sharedModel); extend(data.ensureUniqueItemVisual(idx, "style"), style); if (sharedModel.option.decal) { data.setItemVisual(idx, "decal", sharedModel.option.decal); sharedModel.option.decal.dirty = true; } if (colorKey in style) data.setItemVisual(idx, "colorFromPalette", false); } } : null }; } }; var dataColorPaletteTask = { performRawSeries: true, overallReset: function(ecModel) { var paletteScopeGroupByType = createHashMap(); ecModel.eachSeries(function(seriesModel) { if (!seriesModel.isColorBySeries()) { var key = seriesModel.type + "-" + seriesModel.getColorBy(); inner$20(seriesModel).scope = paletteScopeGroupByType.get(key) || paletteScopeGroupByType.set(key, {}); } }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.isColorBySeries()) return; var dataAll = seriesModel.getRawData(); var idxMap = {}; var data = seriesModel.getData(); var colorScope = inner$20(seriesModel).scope; var colorKey = getDefaultColorKey(seriesModel, seriesModel.visualStyleAccessPath || "itemStyle"); data.each(function(idx) { var rawIdx = data.getRawIndex(idx); idxMap[rawIdx] = idx; }); dataAll.each(function(rawIdx) { var idx = idxMap[rawIdx]; if (data.getItemVisual(idx, "colorFromPalette")) { var itemStyle = data.ensureUniqueItemVisual(idx, "style"); var name_1 = dataAll.getName(rawIdx) || rawIdx + ""; var dataCount = dataAll.count(); itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount); } }); }); } }; //#endregion //#region node_modules/echarts/lib/loading/default.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI$4 = Math.PI; /** * @param {module:echarts/ExtensionAPI} api * @param {Object} [opts] * @param {string} [opts.text] * @param {string} [opts.color] * @param {string} [opts.textColor] * @return {module:zrender/Element} */ function defaultLoading(api, opts) { opts = opts || {}; defaults(opts, { text: "loading", textColor: tokens.color.primary, fontSize: 12, fontWeight: "normal", fontStyle: "normal", fontFamily: "sans-serif", maskColor: "rgba(255,255,255,0.8)", showSpinner: true, color: tokens.color.theme[0], spinnerRadius: 10, lineWidth: 5, zlevel: 0 }); var group = new Group$3(); var mask = new Rect$2({ style: { fill: opts.maskColor }, zlevel: opts.zlevel, z: 1e4 }); group.add(mask); var textContent = new ZRText({ style: { text: opts.text, fill: opts.textColor, fontSize: opts.fontSize, fontWeight: opts.fontWeight, fontStyle: opts.fontStyle, fontFamily: opts.fontFamily }, zlevel: opts.zlevel, z: 10001 }); var labelRect = new Rect$2({ style: { fill: "none" }, textContent, textConfig: { position: "right", distance: 10 }, zlevel: opts.zlevel, z: 10001 }); group.add(labelRect); var arc; if (opts.showSpinner) { arc = new Arc({ shape: { startAngle: -PI$4 / 2, endAngle: -PI$4 / 2 + .1, r: opts.spinnerRadius }, style: { stroke: opts.color, lineCap: "round", lineWidth: opts.lineWidth }, zlevel: opts.zlevel, z: 10001 }); arc.animateShape(true).when(1e3, { endAngle: PI$4 * 3 / 2 }).start("circularInOut"); arc.animateShape(true).when(1e3, { startAngle: PI$4 * 3 / 2 }).delay(300).start("circularInOut"); group.add(arc); } group.resize = function() { var textWidth = textContent.getBoundingRect().width; var r = opts.showSpinner ? opts.spinnerRadius : 0; var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 - (opts.showSpinner && textWidth ? 0 : 5 + textWidth / 2) + (opts.showSpinner ? 0 : textWidth / 2) + (textWidth ? 0 : r); var cy = api.getHeight() / 2; opts.showSpinner && arc.setShape({ cx, cy }); labelRect.setShape({ x: cx - r, y: cy - r, width: r * 2, height: r * 2 }); mask.setShape({ x: 0, y: 0, width: api.getWidth(), height: api.getHeight() }); }; group.resize(); return group; } //#endregion //#region node_modules/echarts/lib/core/Scheduler.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Scheduler = function() { function Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) { this._stageTaskMap = createHashMap(); this.ecInstance = ecInstance; this.api = api; dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice(); visualHandlers = this._visualHandlers = visualHandlers.slice(); this._allHandlers = dataProcessorHandlers.concat(visualHandlers); } Scheduler.prototype.restoreData = function(ecModel, payload) { ecModel.restoreData(payload); this._stageTaskMap.each(function(taskRecord) { var overallTask = taskRecord.overallTask; overallTask && overallTask.dirty(); }); }; Scheduler.prototype.getPerformArgs = function(task, isBlock) { if (!task.__pipeline) return; var pipeline = this._pipelineMap.get(task.__pipeline.id); var pCtx = pipeline.context; var step = !isBlock && pipeline.progressiveEnabled && (!pCtx || pCtx.progressiveRender) && task.__idxInPipeline > pipeline.blockIndex ? pipeline.step : null; var modDataCount = pCtx && pCtx.modDataCount; return { step, modBy: modDataCount != null ? Math.ceil(modDataCount / step) : null, modDataCount }; }; Scheduler.prototype.getPipeline = function(pipelineId) { return this._pipelineMap.get(pipelineId); }; /** * Current, progressive rendering starts from visual and layout. * Always detect render mode in the same stage, avoiding that incorrect * detection caused by data filtering. * Caution: * `updateStreamModes` use `seriesModel.getData()`. */ Scheduler.prototype.updateStreamModes = function(seriesModel, view) { var pipeline = this._pipelineMap.get(seriesModel.uid); seriesModel.pipelineContext = pipeline.context = seriesModel.__preparePipelineContext ? seriesModel.__preparePipelineContext(view, pipeline) : preparePipelineContext(seriesModel, view, pipeline); }; Scheduler.prototype.restorePipelines = function(zr, ecModel) { var scheduler = this; var pipelineMap = scheduler._pipelineMap = createHashMap(); ecModel.eachSeries(function(seriesModel) { var progressive = zr.painter.type === "canvas" && seriesModel.getProgressive(); var pipelineId = seriesModel.uid; pipelineMap.set(pipelineId, { id: pipelineId, head: null, tail: null, threshold: seriesModel.getProgressiveThreshold(), progressiveEnabled: progressive && !(seriesModel.preventIncremental && seriesModel.preventIncremental()), blockIndex: -1, step: Math.round(progressive || 700), count: 0 }); scheduler._pipe(seriesModel, seriesModel.dataTask); }); }; Scheduler.prototype.prepareStageTasks = function() { var stageTaskMap = this._stageTaskMap; var ecModel = this.api.getModel(); var api = this.api; each$12(this._allHandlers, function(handler) { var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, {}); var errMsg = ""; errMsg = "\"reset\" and \"overallReset\" must not be both specified."; assert(!(handler.reset && handler.overallReset), errMsg); handler.reset && this._createSeriesStageTask(handler, record, ecModel, api); handler.overallReset && this._createOverallStageTask(handler, record, ecModel, api); }, this); }; Scheduler.prototype.prepareView = function(view, model, ecModel, api) { var renderTask = view.renderTask; var context = renderTask.context; context.model = model; context.ecModel = ecModel; context.api = api; renderTask.__block = !view.incrementalPrepareRender; this._pipe(model, renderTask); }; Scheduler.prototype.performDataProcessorTasks = function(ecModel, payload) { this._performStageTasks(this._dataProcessorHandlers, ecModel, payload, { block: true }); }; Scheduler.prototype.performVisualTasks = function(ecModel, payload, opt) { this._performStageTasks(this._visualHandlers, ecModel, payload, opt); }; Scheduler.prototype._performStageTasks = function(stageHandlers, ecModel, payload, opt) { opt = opt || {}; var unfinished = false; var scheduler = this; each$12(stageHandlers, function(stageHandler, idx) { if (opt.visualType && opt.visualType !== stageHandler.visualType) return; var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid); var seriesTaskMap = stageHandlerRecord.seriesTaskMap; var overallTask = stageHandlerRecord.overallTask; if (overallTask) { var overallNeedDirty_1; var agentStubMap = overallTask.agentStubMap; agentStubMap.each(function(stub) { if (needSetDirty(opt, stub)) { stub.dirty(); overallNeedDirty_1 = true; } }); overallNeedDirty_1 && overallTask.dirty(); scheduler.updatePayload(overallTask, payload); var performArgs_1 = scheduler.getPerformArgs(overallTask, opt.block); agentStubMap.each(function(stub) { stub.perform(performArgs_1); }); if (overallTask.perform(performArgs_1)) unfinished = true; } else if (seriesTaskMap) seriesTaskMap.each(function(task, pipelineId) { if (needSetDirty(opt, task)) task.dirty(); var performArgs = scheduler.getPerformArgs(task, opt.block); performArgs.skip = !stageHandler.performRawSeries && ecModel.isSeriesFiltered(task.context.model); scheduler.updatePayload(task, payload); if (task.perform(performArgs)) unfinished = true; }); }); function needSetDirty(opt, task) { return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id)); } this.unfinished = unfinished || this.unfinished; }; Scheduler.prototype.performSeriesTasks = function(ecModel) { var unfinished; ecModel.eachSeries(function(seriesModel) { unfinished = seriesModel.dataTask.perform() || unfinished; }); this.unfinished = unfinished || this.unfinished; }; Scheduler.prototype.plan = function() { this._pipelineMap.each(function(pipeline) { var task = pipeline.tail; do { if (task.__block) { pipeline.blockIndex = task.__idxInPipeline; break; } task = task.getUpstream(); } while (task); }); }; Scheduler.prototype.updatePayload = function(task, payload) { payload !== "remain" && (task.context.payload = payload); }; Scheduler.prototype._createSeriesStageTask = function(stageHandler, stageHandlerRecord, ecModel, api) { var scheduler = this; var oldSeriesTaskMap = stageHandlerRecord.seriesTaskMap; var newSeriesTaskMap = stageHandlerRecord.seriesTaskMap = createHashMap(); var seriesType = stageHandler.seriesType; var getTargetSeries = stageHandler.getTargetSeries; if (stageHandler.createOnAllSeries) ecModel.eachRawSeries(create); else if (seriesType) ecModel.eachRawSeriesByType(seriesType, create); else if (getTargetSeries) getTargetSeries(ecModel, api).each(create); function create(seriesModel) { var pipelineId = seriesModel.uid; var task = newSeriesTaskMap.set(pipelineId, oldSeriesTaskMap && oldSeriesTaskMap.get(pipelineId) || createTask({ plan: seriesTaskPlan, reset: seriesTaskReset, count: seriesTaskCount })); task.context = { model: seriesModel, ecModel, api, useClearVisual: stageHandler.isVisual && !stageHandler.isLayout, plan: stageHandler.plan, reset: stageHandler.reset, scheduler }; scheduler._pipe(seriesModel, task); } }; Scheduler.prototype._createOverallStageTask = function(stageHandler, stageHandlerRecord, ecModel, api) { var scheduler = this; var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask || createTask({ reset: overallTaskReset }); overallTask.context = { ecModel, api, overallReset: stageHandler.overallReset, scheduler }; var oldAgentStubMap = overallTask.agentStubMap; var newAgentStubMap = overallTask.agentStubMap = createHashMap(); var seriesType = stageHandler.seriesType; var getTargetSeries = stageHandler.getTargetSeries; var dirtyOnOverallProgress = stageHandler.dirtyOnOverallProgress; var shouldOverallTaskDirty = false; var errMsg = ""; errMsg = "\"createOnAllSeries\" is not supported for \"overallReset\", because it will block all streams."; assert(!stageHandler.createOnAllSeries, errMsg); if (seriesType) ecModel.eachRawSeriesByType(seriesType, createStub); else if (getTargetSeries) getTargetSeries(ecModel, api).each(createStub); else each$12(ecModel.getSeries(), createStub); function createStub(seriesModel) { var pipelineId = seriesModel.uid; var stub = newAgentStubMap.set(pipelineId, oldAgentStubMap && oldAgentStubMap.get(pipelineId) || (shouldOverallTaskDirty = true, createTask({ reset: stubReset, onDirty: stubOnDirty }))); stub.context = { model: seriesModel, dirtyOnOverallProgress }; stub.agent = overallTask; stub.__block = dirtyOnOverallProgress; scheduler._pipe(seriesModel, stub); } if (shouldOverallTaskDirty) overallTask.dirty(); }; Scheduler.prototype._pipe = function(seriesModel, task) { var pipelineId = seriesModel.uid; var pipeline = this._pipelineMap.get(pipelineId); !pipeline.head && (pipeline.head = task); pipeline.tail && pipeline.tail.pipe(task); pipeline.tail = task; task.__idxInPipeline = pipeline.count++; task.__pipeline = pipeline; }; Scheduler.wrapStageHandler = function(stageHandler, visualType) { if (isFunction(stageHandler)) stageHandler = { overallReset: stageHandler, seriesType: detectSeriseType(stageHandler) }; stageHandler.uid = getUID("stageHandler"); visualType && (stageHandler.visualType = visualType); return stageHandler; }; return Scheduler; }(); function overallTaskReset(context) { context.overallReset(context.ecModel, context.api, context.payload); } function stubReset(context) { return context.dirtyOnOverallProgress && stubProgress; } function stubProgress() { this.agent.dirty(); this.getDownstream().dirty(); } function stubOnDirty() { this.agent && this.agent.dirty(); } function seriesTaskPlan(context) { return context.plan ? context.plan(context.model, context.ecModel, context.api, context.payload) : null; } function seriesTaskReset(context) { if (context.useClearVisual) context.data.clearAllVisual(); var resetDefines = context.resetDefines = normalizeToArray(context.reset(context.model, context.ecModel, context.api, context.payload)); return resetDefines.length > 1 ? map$1(resetDefines, function(v, idx) { return makeSeriesTaskProgress(idx); }) : singleSeriesTaskProgress; } var singleSeriesTaskProgress = makeSeriesTaskProgress(0); function makeSeriesTaskProgress(resetDefineIdx) { return function(params, context) { var data = context.data; var resetDefine = context.resetDefines[resetDefineIdx]; if (resetDefine && resetDefine.dataEach) for (var i = params.start; i < params.end; i++) resetDefine.dataEach(data, i); else if (resetDefine && resetDefine.progress) resetDefine.progress(params, data); }; } function seriesTaskCount(context) { return context.data.count(); } /** * Only some legacy stage handlers (usually in echarts extensions) are pure function. * To ensure that they can work normally, they should work in block mode, that is, * they should not be started util the previous tasks finished. So they cause the * progressive rendering disabled. We try to detect the series type, to narrow down * the block range to only the series type they concern, but not all series. */ function detectSeriseType(legacyFunc) { seriesType = null; try { legacyFunc(ecModelMock, apiMock); } catch (e) {} return seriesType; } var ecModelMock = {}; var apiMock = {}; var seriesType; mockMethods(ecModelMock, GlobalModel); mockMethods(apiMock, ExtensionAPI); ecModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function(type) { seriesType = type; }; ecModelMock.eachComponent = function(cond) { if (cond.mainType === "series" && cond.subType) seriesType = cond.subType; }; function mockMethods(target, Clz) { for (var name_1 in Clz.prototype) target[name_1] = noop; } //#endregion //#region node_modules/echarts/lib/theme/dark.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var color = tokens.darkColor; var backgroundColor = color.background; var axisCommon = function() { return { axisLine: { lineStyle: { color: color.axisLine } }, splitLine: { lineStyle: { color: color.axisSplitLine } }, splitArea: { areaStyle: { color: [color.backgroundTint, color.backgroundTransparent] } }, minorSplitLine: { lineStyle: { color: color.axisMinorSplitLine } }, axisLabel: { color: color.axisLabel }, axisName: {} }; }; var matrixAxis = { label: { color: color.secondary }, itemStyle: { borderColor: color.borderTint }, dividerLineStyle: { color: color.border } }; var theme = { darkMode: true, color: color.theme, backgroundColor, axisPointer: { lineStyle: { color: color.border }, crossStyle: { color: color.borderShade }, label: { color: color.tertiary } }, legend: { textStyle: { color: color.secondary }, pageTextStyle: { color: color.tertiary } }, textStyle: { color: color.secondary }, title: { textStyle: { color: color.primary }, subtextStyle: { color: color.quaternary } }, toolbox: { iconStyle: { borderColor: color.accent50 }, feature: { dataView: { backgroundColor, textColor: color.primary, textareaColor: color.background, textareaBorderColor: color.border, buttonColor: color.accent50, buttonTextColor: color.neutral00 } } }, tooltip: { backgroundColor: color.neutral20, defaultBorderColor: color.border, textStyle: { color: color.tertiary } }, dataZoom: { borderColor: color.accent10, textStyle: { color: color.tertiary }, brushStyle: { color: color.backgroundTint }, handleStyle: { color: color.neutral00, borderColor: color.accent20 }, moveHandleStyle: { color: color.accent40 }, emphasis: { handleStyle: { borderColor: color.accent50 } }, dataBackground: { lineStyle: { color: color.accent30 }, areaStyle: { color: color.accent20 } }, selectedDataBackground: { lineStyle: { color: color.accent50 }, areaStyle: { color: color.accent30 } } }, visualMap: { textStyle: { color: color.secondary }, handleStyle: { borderColor: color.neutral30 } }, timeline: { lineStyle: { color: color.accent10 }, label: { color: color.tertiary }, controlStyle: { color: color.accent30, borderColor: color.accent30 } }, calendar: { itemStyle: { color: color.neutral00, borderColor: color.neutral20 }, dayLabel: { color: color.tertiary }, monthLabel: { color: color.secondary }, yearLabel: { color: color.secondary } }, matrix: { x: matrixAxis, y: matrixAxis, backgroundColor: { borderColor: color.axisLine }, body: { itemStyle: { borderColor: color.borderTint } } }, timeAxis: axisCommon(), logAxis: axisCommon(), valueAxis: axisCommon(), categoryAxis: axisCommon(), line: { symbol: "circle" }, graph: { color: color.theme }, gauge: { title: { color: color.secondary }, axisLine: { lineStyle: { color: [[1, color.neutral05]] } }, axisLabel: { color: color.axisLabel }, detail: { color: color.primary } }, candlestick: { itemStyle: { color: "#f64e56", color0: "#54ea92", borderColor: "#f64e56", borderColor0: "#54ea92" } }, funnel: { itemStyle: { borderColor: color.background } }, radar: function() { var radar = axisCommon(); radar.axisName = { color: color.axisLabel }; radar.axisLine.lineStyle.color = color.neutral20; return radar; }(), treemap: { breadcrumb: { itemStyle: { color: color.neutral20, textStyle: { color: color.secondary } }, emphasis: { itemStyle: { color: color.neutral30 } } } }, sunburst: { itemStyle: { borderColor: color.background } }, map: { itemStyle: { borderColor: color.border, areaColor: color.neutral10 }, label: { color: color.tertiary }, emphasis: { label: { color: color.primary }, itemStyle: { areaColor: color.highlight } }, select: { label: { color: color.primary }, itemStyle: { areaColor: color.highlight } } }, geo: { itemStyle: { borderColor: color.border, areaColor: color.neutral10 }, emphasis: { label: { color: color.primary }, itemStyle: { areaColor: color.highlight } }, select: { label: { color: color.primary }, itemStyle: { color: color.highlight } } } }; theme.categoryAxis.splitLine.show = false; //#endregion //#region node_modules/echarts/lib/util/ECEventProcessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Usage of query: * `chart.on('click', query, handler);` * The `query` can be: * + The component type query string, only `mainType` or `mainType.subType`, * like: 'xAxis', 'series', 'xAxis.category' or 'series.line'. * + The component query object, like: * `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`, * `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`. * + The data query object, like: * `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`. * + The other query object (cmponent customized query), like: * `{element: 'some'}` (only available in custom series). * * Caveat: If a prop in the `query` object is `null/undefined`, it is the * same as there is no such prop in the `query` object. */ var ECEventProcessor = function() { function ECEventProcessor() {} ECEventProcessor.prototype.normalizeQuery = function(query) { var cptQuery = {}; var dataQuery = {}; var otherQuery = {}; if (isString(query)) { var condCptType = parseClassType(query); cptQuery.mainType = condCptType.main || null; cptQuery.subType = condCptType.sub || null; } else { var suffixes_1 = [ "Index", "Name", "Id" ]; var dataKeys_1 = { name: 1, dataIndex: 1, dataType: 1 }; each$12(query, function(val, key) { var reserved = false; for (var i = 0; i < suffixes_1.length; i++) { var propSuffix = suffixes_1[i]; var suffixPos = key.lastIndexOf(propSuffix); if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) { var mainType = key.slice(0, suffixPos); if (mainType !== "data") { cptQuery.mainType = mainType; cptQuery[propSuffix.toLowerCase()] = val; reserved = true; } } } if (dataKeys_1.hasOwnProperty(key)) { dataQuery[key] = val; reserved = true; } if (!reserved) otherQuery[key] = val; }); } return { cptQuery, dataQuery, otherQuery }; }; ECEventProcessor.prototype.filter = function(eventType, query) { var eventInfo = this.eventInfo; if (!eventInfo) return true; var targetEl = eventInfo.targetEl; var packedEvent = eventInfo.packedEvent; var model = eventInfo.model; var view = eventInfo.view; if (!model || !view) return true; var cptQuery = query.cptQuery; var dataQuery = query.dataQuery; return check(cptQuery, model, "mainType") && check(cptQuery, model, "subType") && check(cptQuery, model, "index", "componentIndex") && check(cptQuery, model, "name") && check(cptQuery, model, "id") && check(dataQuery, packedEvent, "name") && check(dataQuery, packedEvent, "dataIndex") && check(dataQuery, packedEvent, "dataType") && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent)); function check(query, host, prop, propOnHost) { return query[prop] == null || host[propOnHost || prop] === query[prop]; } }; ECEventProcessor.prototype.afterTrigger = function() { this.eventInfo = null; }; return ECEventProcessor; }(); //#endregion //#region node_modules/echarts/lib/visual/symbol.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SYMBOL_PROPS_WITH_CB = [ "symbol", "symbolSize", "symbolRotate", "symbolOffset" ]; var SYMBOL_PROPS = SYMBOL_PROPS_WITH_CB.concat(["symbolKeepAspect"]); var seriesSymbolTask = { createOnAllSeries: true, performRawSeries: true, reset: function(seriesModel, ecModel) { var data = seriesModel.getData(); if (seriesModel.legendIcon) data.setVisual("legendIcon", seriesModel.legendIcon); if (!seriesModel.hasSymbolVisual) return; var symbolOptions = {}; var symbolOptionsCb = {}; var hasCallback = false; for (var i = 0; i < SYMBOL_PROPS_WITH_CB.length; i++) { var symbolPropName = SYMBOL_PROPS_WITH_CB[i]; var val = seriesModel.get(symbolPropName); if (isFunction(val)) { hasCallback = true; symbolOptionsCb[symbolPropName] = val; } else symbolOptions[symbolPropName] = val; } symbolOptions.symbol = symbolOptions.symbol || seriesModel.defaultSymbol; data.setVisual(extend({ legendIcon: seriesModel.legendIcon || symbolOptions.symbol, symbolKeepAspect: seriesModel.get("symbolKeepAspect") }, symbolOptions)); if (ecModel.isSeriesFiltered(seriesModel)) return; var symbolPropsCb = keys(symbolOptionsCb); function dataEach(data, idx) { var rawValue = seriesModel.getRawValue(idx); var params = seriesModel.getDataParams(idx); for (var i = 0; i < symbolPropsCb.length; i++) { var symbolPropName = symbolPropsCb[i]; data.setItemVisual(idx, symbolPropName, symbolOptionsCb[symbolPropName](rawValue, params)); } } return { dataEach: hasCallback ? dataEach : null }; } }; var dataSymbolTask = { createOnAllSeries: true, performRawSeries: true, reset: function(seriesModel, ecModel) { if (!seriesModel.hasSymbolVisual) return; if (ecModel.isSeriesFiltered(seriesModel)) return; var data = seriesModel.getData(); function dataEach(data, idx) { var itemModel = data.getItemModel(idx); for (var i = 0; i < SYMBOL_PROPS.length; i++) { var symbolPropName = SYMBOL_PROPS[i]; var val = itemModel.getShallow(symbolPropName, true); if (val != null) data.setItemVisual(idx, symbolPropName, val); } } return { dataEach: data.hasItemOption ? dataEach : null }; } }; //#endregion //#region node_modules/echarts/lib/visual/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getItemVisualFromData(data, dataIndex, key) { switch (key) { case "color": return data.getItemVisual(dataIndex, "style")[data.getVisual("drawType")]; case "opacity": return data.getItemVisual(dataIndex, "style").opacity; case "symbol": case "symbolSize": case "liftZ": return data.getItemVisual(dataIndex, key); default: console.warn("Unknown visual type " + key); } } function getVisualFromData(data, key) { switch (key) { case "color": return data.getVisual("style")[data.getVisual("drawType")]; case "opacity": return data.getVisual("style").opacity; case "symbol": case "symbolSize": case "liftZ": return data.getVisual(key); default: console.warn("Unknown visual type " + key); } } function setItemVisualFromData(data, dataIndex, key, value) { switch (key) { case "color": var style = data.ensureUniqueItemVisual(dataIndex, "style"); style[data.getVisual("drawType")] = value; data.setItemVisual(dataIndex, "colorFromPalette", false); break; case "opacity": data.ensureUniqueItemVisual(dataIndex, "style").opacity = value; break; case "symbol": case "symbolSize": case "liftZ": data.setItemVisual(dataIndex, key, value); break; default: console.warn("Unknown visual type " + key); } } //#endregion //#region node_modules/echarts/lib/legacy/dataSelectAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function createLegacyDataSelectAction(seriesType, ecRegisterAction) { function getSeriesIndices(ecModel, payload) { var seriesIndices = []; ecModel.eachComponent({ mainType: "series", subType: seriesType, query: payload }, function(seriesModel) { seriesIndices.push(seriesModel.seriesIndex); }); return seriesIndices; } each$12([ [seriesType + "ToggleSelect", "toggleSelect"], [seriesType + "Select", "select"], [seriesType + "UnSelect", "unselect"] ], function(eventsMap) { ecRegisterAction(eventsMap[0], function(payload, ecModel, api) { payload = extend({}, payload); deprecateReplaceLog(payload.type, eventsMap[1]); api.dispatchAction(extend(payload, { type: eventsMap[1], seriesIndex: getSeriesIndices(ecModel, payload) })); }); }); } function handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) { var legacyEventName = type + eventPostfix; if (!ecIns.isSilent(legacyEventName)) { deprecateLog("event " + legacyEventName + " is deprecated."); ecModel.eachComponent({ mainType: "series", subType: "pie" }, function(seriesModel) { var seriesIndex = seriesModel.seriesIndex; var selectedMap = seriesModel.option.selectedMap; var selected = payload.selected; for (var i = 0; i < selected.length; i++) if (selected[i].seriesIndex === seriesIndex) { var data = seriesModel.getData(); var dataIndex = queryDataIndex(data, payload.fromActionPayload); ecIns.trigger(legacyEventName, { type: legacyEventName, seriesId: seriesModel.id, name: isArray$1(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex), selected: isString(selectedMap) ? selectedMap : extend({}, selectedMap) }); } }); } } function handleLegacySelectEvents(messageCenter, ecIns, api) { messageCenter.on("selectchanged", function(params) { var ecModel = api.getModel(); if (params.isFromClick) { handleSeriesLegacySelectEvents("map", "selectchanged", ecIns, ecModel, params); handleSeriesLegacySelectEvents("pie", "selectchanged", ecIns, ecModel, params); } else if (params.fromAction === "select") { handleSeriesLegacySelectEvents("map", "selected", ecIns, ecModel, params); handleSeriesLegacySelectEvents("pie", "selected", ecIns, ecModel, params); } else if (params.fromAction === "unselect") { handleSeriesLegacySelectEvents("map", "unselected", ecIns, ecModel, params); handleSeriesLegacySelectEvents("pie", "unselected", ecIns, ecModel, params); } }); } //#endregion //#region node_modules/echarts/lib/util/event.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function findEventDispatcher(target, det, returnFirstMatch) { var found; while (target) { if (det(target)) { found = target; if (returnFirstMatch) break; } target = target.__hostTarget || target.parent; } return found; } //#endregion //#region node_modules/echarts/lib/core/lifecycle.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var lifecycle = new Eventful(); //#endregion //#region node_modules/echarts/lib/core/impl.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var implsStore = {}; function registerImpl(name, impl) { if (implsStore[name]) error("Already has an implementation of " + name + "."); implsStore[name] = impl; } function getImpl(name) { if (!implsStore[name]) error("Implementation of " + name + " doesn't exists."); return implsStore[name]; } //#endregion //#region node_modules/echarts/lib/chart/custom/customSeriesRegister.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var customRenderers = {}; function registerCustomSeries$1(type, renderItem) { customRenderers[type] = renderItem; } function getCustomSeries(type) { return customRenderers[type]; } //#endregion //#region node_modules/echarts/lib/util/cycleCache.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ecModelCacheInner$1 = makeInner(); /** * CAVEAT: Can only be called by `echarts.ts` */ function resetCachePerECPrepare(ecModel) { ecModelCacheInner$1(ecModel).prepare = {}; } /** * CAVEAT: Can only be called by `echarts.ts` */ function resetCachePerECFullUpdate(ecModel) { ecModelCacheInner$1(ecModel).fullUpdate = {}; } /** * The cache is auto cleared at the beginning of EC_PREPARE. * See also comments in EC_CYCLE. * * NOTICE: * - EC_PREPARE is not necessarily executed before each EC_FULL_UPDATE performing. * Typically, `setOption` trigger EC_PREPARE, but `dispatchAction` does not. * - It is not cleared in EC_PARTIAL_UPDATE and EC_PROGRESSIVE_CYCLE. * */ function getCachePerECPrepare(ecModel) { return ecModelCacheInner$1(ecModel).prepare; } /** * @usage * ```js * const cycleCache = makeInner<{ * prop1: number; * prop2: string; * }, GlobalModelCachePerECFullUpdate>(); * function doSomthing(ecModel: GlobalModel): void { * cycleCache(getCachePerECFullUpdate(ecModel)).prop1 = 123; * cycleCache(getCachePerECFullUpdate(ecModel)).prop2; * } * ``` * * The cache is auto cleared at the beginning of EC_FULL_UPDATE. * See also comments in EC_CYCLE. * * NOTICE: * - It is not cleared in EC_PARTIAL_UPDATE and EC_PROGRESSIVE_CYCLE. * - The cache should NOT be written before EC_FULL_UPDATE started, such as: * - should NOT in `getTargetSeries` methods of data processors. * - should NOT in `init`/`mergeOption`/`optionUpdated`/`getData` methods of component/series models. * - See `getCachePerECPrepare` for details. */ function getCachePerECFullUpdate(ecModel) { return ecModelCacheInner$1(ecModel).fullUpdate; } //#endregion //#region node_modules/zrender/lib/core/WeakMap.js var wmUniqueIndex = Math.round(Math.random() * 9); var supportDefineProperty = typeof Object.defineProperty === "function"; var WeakMap = function() { function WeakMap() { this._id = "__ec_inner_" + wmUniqueIndex++; } WeakMap.prototype.get = function(key) { return this._guard(key)[this._id]; }; WeakMap.prototype.set = function(key, value) { var target = this._guard(key); if (supportDefineProperty) Object.defineProperty(target, this._id, { value, enumerable: false, configurable: true }); else target[this._id] = value; return this; }; WeakMap.prototype["delete"] = function(key) { if (this.has(key)) { delete this._guard(key)[this._id]; return true; } return false; }; WeakMap.prototype.has = function(key) { return !!this._guard(key)[this._id]; }; WeakMap.prototype._guard = function(key) { if (key !== Object(key)) throw TypeError("Value of WeakMap is not a non-null object."); return key; }; return WeakMap; }(); //#endregion //#region node_modules/echarts/lib/util/symbol.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Triangle shape * @inner */ var Triangle = Path.extend({ type: "triangle", shape: { cx: 0, cy: 0, width: 0, height: 0 }, buildPath: function(path, shape) { var cx = shape.cx; var cy = shape.cy; var width = shape.width / 2; var height = shape.height / 2; path.moveTo(cx, cy - height); path.lineTo(cx + width, cy + height); path.lineTo(cx - width, cy + height); path.closePath(); } }); /** * Map of path constructors */ var symbolCtors = { line: Line$1, rect: Rect$2, roundRect: Rect$2, square: Rect$2, circle: Circle, diamond: Path.extend({ type: "diamond", shape: { cx: 0, cy: 0, width: 0, height: 0 }, buildPath: function(path, shape) { var cx = shape.cx; var cy = shape.cy; var width = shape.width / 2; var height = shape.height / 2; path.moveTo(cx, cy - height); path.lineTo(cx + width, cy); path.lineTo(cx, cy + height); path.lineTo(cx - width, cy); path.closePath(); } }), pin: Path.extend({ type: "pin", shape: { x: 0, y: 0, width: 0, height: 0 }, buildPath: function(path, shape) { var x = shape.x; var y = shape.y; var w = shape.width / 5 * 3; var h = Math.max(w, shape.height); var r = w / 2; var dy = r * r / (h - r); var cy = y - h + r + dy; var angle = Math.asin(dy / r); var dx = Math.cos(angle) * r; var tanX = Math.sin(angle); var tanY = Math.cos(angle); var cpLen = r * .6; var cpLen2 = r * .7; path.moveTo(x - dx, cy + dy); path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle); path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y); path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy); path.closePath(); } }), arrow: Path.extend({ type: "arrow", shape: { x: 0, y: 0, width: 0, height: 0 }, buildPath: function(ctx, shape) { var height = shape.height; var width = shape.width; var x = shape.x; var y = shape.y; var dx = width / 3 * 2; ctx.moveTo(x, y); ctx.lineTo(x + dx, y + height); ctx.lineTo(x, y + height / 4 * 3); ctx.lineTo(x - dx, y + height); ctx.lineTo(x, y); ctx.closePath(); } }), triangle: Triangle }; var symbolShapeMakers = { line: function(x, y, w, h, shape) { shape.x1 = x; shape.y1 = y + h / 2; shape.x2 = x + w; shape.y2 = y + h / 2; }, rect: function(x, y, w, h, shape) { shape.x = x; shape.y = y; shape.width = w; shape.height = h; }, roundRect: function(x, y, w, h, shape) { shape.x = x; shape.y = y; shape.width = w; shape.height = h; shape.r = Math.min(w, h) / 4; }, square: function(x, y, w, h, shape) { var size = Math.min(w, h); shape.x = x; shape.y = y; shape.width = size; shape.height = size; }, circle: function(x, y, w, h, shape) { shape.cx = x + w / 2; shape.cy = y + h / 2; shape.r = Math.min(w, h) / 2; }, diamond: function(x, y, w, h, shape) { shape.cx = x + w / 2; shape.cy = y + h / 2; shape.width = w; shape.height = h; }, pin: function(x, y, w, h, shape) { shape.x = x + w / 2; shape.y = y + h / 2; shape.width = w; shape.height = h; }, arrow: function(x, y, w, h, shape) { shape.x = x + w / 2; shape.y = y + h / 2; shape.width = w; shape.height = h; }, triangle: function(x, y, w, h, shape) { shape.cx = x + w / 2; shape.cy = y + h / 2; shape.width = w; shape.height = h; } }; var symbolBuildProxies = {}; each$12(symbolCtors, function(Ctor, name) { symbolBuildProxies[name] = new Ctor(); }); var SymbolClz = Path.extend({ type: "symbol", shape: { symbolType: "", x: 0, y: 0, width: 0, height: 0 }, calculateTextPosition: function(out, config, rect) { var res = calculateTextPosition(out, config, rect); var shape = this.shape; if (shape && shape.symbolType === "pin" && config.position === "inside") res.y = rect.y + rect.height * .4; return res; }, buildPath: function(ctx, shape, inBundle) { var symbolType = shape.symbolType; if (symbolType !== "none") { var proxySymbol = symbolBuildProxies[symbolType]; if (!proxySymbol) { symbolType = "rect"; proxySymbol = symbolBuildProxies[symbolType]; } symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape); proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle); } } }); function symbolPathSetColor(color, innerColor) { if (this.type !== "image") { var symbolStyle = this.style; if (this.__isEmptyBrush) { symbolStyle.stroke = color; symbolStyle.fill = innerColor || tokens.color.neutral00; symbolStyle.lineWidth = 2; } else if (this.shape.symbolType === "line") symbolStyle.stroke = color; else symbolStyle.fill = color; this.markRedraw(); } } /** * Create a symbol element with given symbol configuration: shape, x, y, width, height, color */ function createSymbol$1(symbolType, x, y, w, h, color, keepAspect) { var isEmpty = symbolType.indexOf("empty") === 0; if (isEmpty) symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6); var symbolPath; if (symbolType.indexOf("image://") === 0) symbolPath = makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? "center" : "cover"); else if (symbolType.indexOf("path://") === 0) symbolPath = makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? "center" : "cover"); else symbolPath = new SymbolClz({ shape: { symbolType, x, y, width: w, height: h } }); symbolPath.__isEmptyBrush = isEmpty; symbolPath.setColor = symbolPathSetColor; if (color) symbolPath.setColor(color); return symbolPath; } function normalizeSymbolSize(symbolSize) { if (!isArray$1(symbolSize)) symbolSize = [+symbolSize, +symbolSize]; return [symbolSize[0] || 0, symbolSize[1] || 0]; } function normalizeSymbolOffset(symbolOffset, symbolSize) { if (symbolOffset == null) return; if (!isArray$1(symbolOffset)) symbolOffset = [symbolOffset, symbolOffset]; return [parsePercent(symbolOffset[0], symbolSize[0]) || 0, parsePercent(retrieve2(symbolOffset[1], symbolOffset[0]), symbolSize[1]) || 0]; } //#endregion //#region node_modules/zrender/lib/canvas/helper.js function isSafeNum(num) { return isFinite(num); } function createLinearGradient(ctx, obj, rect) { var x = obj.x == null ? 0 : obj.x; var x2 = obj.x2 == null ? 1 : obj.x2; var y = obj.y == null ? 0 : obj.y; var y2 = obj.y2 == null ? 0 : obj.y2; if (!obj.global) { x = x * rect.width + rect.x; x2 = x2 * rect.width + rect.x; y = y * rect.height + rect.y; y2 = y2 * rect.height + rect.y; } x = isSafeNum(x) ? x : 0; x2 = isSafeNum(x2) ? x2 : 1; y = isSafeNum(y) ? y : 0; y2 = isSafeNum(y2) ? y2 : 0; return ctx.createLinearGradient(x, y, x2, y2); } function createRadialGradient(ctx, obj, rect) { var width = rect.width; var height = rect.height; var min = Math.min(width, height); var x = obj.x == null ? .5 : obj.x; var y = obj.y == null ? .5 : obj.y; var r = obj.r == null ? .5 : obj.r; if (!obj.global) { x = x * width + rect.x; y = y * height + rect.y; r = r * min; } x = isSafeNum(x) ? x : .5; y = isSafeNum(y) ? y : .5; r = r >= 0 && isSafeNum(r) ? r : .5; return ctx.createRadialGradient(x, y, 0, x, y, r); } function getCanvasGradient(ctx, obj, rect) { var canvasGradient = obj.type === "radial" ? createRadialGradient(ctx, obj, rect) : createLinearGradient(ctx, obj, rect); var colorStops = obj.colorStops; for (var i = 0; i < colorStops.length; i++) canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color); return canvasGradient; } function isClipPathChanged(clipPaths, prevClipPaths) { if (clipPaths === prevClipPaths || !clipPaths && !prevClipPaths) return false; if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) return true; for (var i = 0; i < clipPaths.length; i++) if (clipPaths[i] !== prevClipPaths[i]) return true; return false; } function parseInt10(val) { return parseInt(val, 10); } function getSize$1(root, whIdx, opts) { var wh = ["width", "height"][whIdx]; var cwh = ["clientWidth", "clientHeight"][whIdx]; var plt = ["paddingLeft", "paddingTop"][whIdx]; var prb = ["paddingRight", "paddingBottom"][whIdx]; if (opts[wh] != null && opts[wh] !== "auto") return parseFloat(opts[wh]); var stl = document.defaultView.getComputedStyle(root); return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) || 0; } //#endregion //#region node_modules/zrender/lib/canvas/dashStyle.js function normalizeLineDash(lineType, lineWidth) { if (!lineType || lineType === "solid" || !(lineWidth > 0)) return null; return lineType === "dashed" ? [4 * lineWidth, 2 * lineWidth] : lineType === "dotted" ? [lineWidth] : isNumber(lineType) ? [lineType] : isArray$1(lineType) ? lineType : null; } function getLineDash(el) { var style = el.style; var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth); var lineDashOffset = style.lineDashOffset; if (lineDash) { var lineScale_1 = style.strokeNoScale && el.getLineScale ? el.getLineScale() : 1; if (lineScale_1 && lineScale_1 !== 1) { lineDash = map$1(lineDash, function(rawVal) { return rawVal / lineScale_1; }); lineDashOffset /= lineScale_1; } } return [lineDash, lineDashOffset]; } //#endregion //#region node_modules/zrender/lib/canvas/graphic.js var pathProxyForDraw = new PathProxy(true); function styleHasStroke(style) { var stroke = style.stroke; return !(stroke == null || stroke === "none" || !(style.lineWidth > 0)); } function isValidStrokeFillStyle(strokeOrFill) { return typeof strokeOrFill === "string" && strokeOrFill !== "none"; } function styleHasFill(style) { var fill = style.fill; return fill != null && fill !== "none"; } function doFillPath(ctx, style) { if (style.fillOpacity != null && style.fillOpacity !== 1) { var originalGlobalAlpha = ctx.globalAlpha; ctx.globalAlpha = style.fillOpacity * style.opacity; ctx.fill(); ctx.globalAlpha = originalGlobalAlpha; } else ctx.fill(); } function doStrokePath(ctx, style) { if (style.strokeOpacity != null && style.strokeOpacity !== 1) { var originalGlobalAlpha = ctx.globalAlpha; ctx.globalAlpha = style.strokeOpacity * style.opacity; ctx.stroke(); ctx.globalAlpha = originalGlobalAlpha; } else ctx.stroke(); } function createCanvasPattern(ctx, pattern, el) { var image = createOrUpdateImage(pattern.image, pattern.__image, el); if (isImageReady(image)) { var canvasPattern = ctx.createPattern(image, pattern.repeat || "repeat"); if (typeof DOMMatrix === "function" && canvasPattern && canvasPattern.setTransform) { var matrix = new DOMMatrix(); matrix.translateSelf(pattern.x || 0, pattern.y || 0); matrix.rotateSelf(0, 0, (pattern.rotation || 0) * RADIAN_TO_DEGREE); matrix.scaleSelf(pattern.scaleX || 1, pattern.scaleY || 1); canvasPattern.setTransform(matrix); } return canvasPattern; } } function brushPath(ctx, el, style, canBatch, scope) { var _a; var hasStroke = styleHasStroke(style); var hasFill = styleHasFill(style); var strokePercent = style.strokePercent; var strokePart = strokePercent < 1; var firstDraw = !el.path; if ((!el.silent || strokePart) && firstDraw) el.createPathProxy(); var path = el.path || pathProxyForDraw; var dirtyFlag = el.__dirty; if (!canBatch) { var fill = style.fill; var stroke = style.stroke; var hasFillGradient = hasFill && !!fill.colorStops; var hasStrokeGradient = hasStroke && !!stroke.colorStops; var hasFillPattern = hasFill && !!fill.image; var hasStrokePattern = hasStroke && !!stroke.image; var fillGradient = void 0; var strokeGradient = void 0; var fillPattern = void 0; var strokePattern = void 0; var rect = void 0; if (hasFillGradient || hasStrokeGradient) rect = el.getBoundingRect(); if (hasFillGradient) { fillGradient = dirtyFlag ? getCanvasGradient(ctx, fill, rect) : el.__canvasFillGradient; el.__canvasFillGradient = fillGradient; } if (hasStrokeGradient) { strokeGradient = dirtyFlag ? getCanvasGradient(ctx, stroke, rect) : el.__canvasStrokeGradient; el.__canvasStrokeGradient = strokeGradient; } if (hasFillPattern) { fillPattern = dirtyFlag || !el.__canvasFillPattern ? createCanvasPattern(ctx, fill, el) : el.__canvasFillPattern; el.__canvasFillPattern = fillPattern; } if (hasStrokePattern) { strokePattern = dirtyFlag || !el.__canvasStrokePattern ? createCanvasPattern(ctx, stroke, el) : el.__canvasStrokePattern; el.__canvasStrokePattern = strokePattern; } if (hasFillGradient) ctx.fillStyle = fillGradient; else if (hasFillPattern) { if (fillPattern) ctx.fillStyle = fillPattern; else hasFill = false; } if (hasStrokeGradient) ctx.strokeStyle = strokeGradient; else if (hasStrokePattern) { if (strokePattern) ctx.strokeStyle = strokePattern; else hasStroke = false; } } var scale = el.getGlobalScale(); path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold); var lineDash; var lineDashOffset; if (ctx.setLineDash && style.lineDash) _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1]; var needsRebuild = true; if (firstDraw || dirtyFlag & 4) { path.setDPR(ctx.dpr); if (strokePart) path.setContext(null); else { path.setContext(ctx); needsRebuild = false; } path.reset(); el.buildPath(path, el.shape, canBatch); path.toStatic(); el.pathUpdated(); } if (needsRebuild) path.rebuildPath(ctx, strokePart ? strokePercent : 1); if (lineDash) { ctx.setLineDash(lineDash); ctx.lineDashOffset = lineDashOffset; } if (!canBatch) { if (style.strokeFirst) { if (hasStroke) doStrokePath(ctx, style); if (hasFill) doFillPath(ctx, style); } else { if (hasFill) doFillPath(ctx, style); if (hasStroke) doStrokePath(ctx, style); } } else { scope.batchFill = hasFill; scope.batchStroke = hasStroke; } if (lineDash) ctx.setLineDash([]); } function brushImage(ctx, el, style) { var image = el.__image = createOrUpdateImage(style.image, el.__image, el, el.onload); if (!image || !isImageReady(image)) return; var x = style.x || 0; var y = style.y || 0; var width = el.getWidth(); var height = el.getHeight(); var aspect = image.width / image.height; if (width == null && height != null) width = height * aspect; else if (height == null && width != null) height = width / aspect; else if (width == null && height == null) { width = image.width; height = image.height; } if (style.sWidth && style.sHeight) { var sx = style.sx || 0; var sy = style.sy || 0; ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height); } else if (style.sx && style.sy) { var sx = style.sx; var sy = style.sy; var sWidth = width - sx; var sHeight = height - sy; ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height); } else ctx.drawImage(image, x, y, width, height); } function brushText(ctx, el, style) { var _a; var text = style.text; text != null && (text += ""); if (text) { ctx.font = style.font || "12px sans-serif"; ctx.textAlign = style.textAlign; ctx.textBaseline = style.textBaseline; var lineDash = void 0; var lineDashOffset = void 0; if (ctx.setLineDash && style.lineDash) _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1]; if (lineDash) { ctx.setLineDash(lineDash); ctx.lineDashOffset = lineDashOffset; } if (style.strokeFirst) { if (styleHasStroke(style)) ctx.strokeText(text, style.x, style.y); if (styleHasFill(style)) ctx.fillText(text, style.x, style.y); } else { if (styleHasFill(style)) ctx.fillText(text, style.x, style.y); if (styleHasStroke(style)) ctx.strokeText(text, style.x, style.y); } if (lineDash) ctx.setLineDash([]); } } var SHADOW_NUMBER_PROPS = [ "shadowBlur", "shadowOffsetX", "shadowOffsetY" ]; var STROKE_PROPS = [ ["lineCap", "butt"], ["lineJoin", "miter"], ["miterLimit", 10] ]; function bindCommonProps(ctx, style, prevStyle, forceSetAll, scope) { var styleChanged = false; if (!forceSetAll) { prevStyle = prevStyle || {}; if (style === prevStyle) return false; } if (forceSetAll || style.opacity !== prevStyle.opacity) { flushPathDrawn(ctx, scope); styleChanged = true; var opacity = Math.max(Math.min(style.opacity, 1), 0); ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity; } if (forceSetAll || style.blend !== prevStyle.blend) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend; } for (var i = 0; i < SHADOW_NUMBER_PROPS.length; i++) { var propName = SHADOW_NUMBER_PROPS[i]; if (forceSetAll || style[propName] !== prevStyle[propName]) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx[propName] = ctx.dpr * (style[propName] || 0); } } if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor; } return styleChanged; } function bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetAll, scope) { var style = el.style; var prevStyle = forceSetAll ? null : prevEl && prevEl.style || {}; if (style === prevStyle) return false; var styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope); if (forceSetAll || style.fill !== prevStyle.fill) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill); } if (forceSetAll || style.stroke !== prevStyle.stroke) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke); } if (forceSetAll || style.opacity !== prevStyle.opacity) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx.globalAlpha = style.opacity == null ? 1 : style.opacity; } if (el.hasStroke()) { var newLineWidth = style.lineWidth / (style.strokeNoScale && el.getLineScale ? el.getLineScale() : 1); if (ctx.lineWidth !== newLineWidth) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx.lineWidth = newLineWidth; } } for (var i = 0; i < STROKE_PROPS.length; i++) { var prop = STROKE_PROPS[i]; var propName = prop[0]; if (forceSetAll || style[propName] !== prevStyle[propName]) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } ctx[propName] = style[propName] || prop[1]; } } return styleChanged; } function bindImageStyle(ctx, el, prevEl, forceSetAll, scope) { return bindCommonProps(ctx, el.style, prevEl && prevEl.style, forceSetAll, scope); } function setContextTransform(ctx, el) { var m = el.transform; var dpr = ctx.dpr || 1; if (m) ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]); else ctx.setTransform(dpr, 0, 0, dpr, 0, 0); } function updateClipStatus(clipPaths, ctx, scope) { var allClipped = false; for (var i = 0; i < clipPaths.length; i++) { var clipPath = clipPaths[i]; allClipped = allClipped || clipPath.isZeroArea(); setContextTransform(ctx, clipPath); ctx.beginPath(); clipPath.buildPath(ctx, clipPath.shape); ctx.clip(); } scope.allClipped = allClipped; } function isTransformChanged(m0, m1) { if (m0 && m1) return m0[0] !== m1[0] || m0[1] !== m1[1] || m0[2] !== m1[2] || m0[3] !== m1[3] || m0[4] !== m1[4] || m0[5] !== m1[5]; else if (!m0 && !m1) return false; return true; } var DRAW_TYPE_PATH = 1; var DRAW_TYPE_IMAGE = 2; var DRAW_TYPE_TEXT = 3; var DRAW_TYPE_INCREMENTAL = 4; function canPathBatch(style) { var hasFill = styleHasFill(style); var hasStroke = styleHasStroke(style); return !(style.lineDash || !(+hasFill ^ +hasStroke) || hasFill && typeof style.fill !== "string" || hasStroke && typeof style.stroke !== "string" || style.strokePercent < 1 || style.strokeOpacity < 1 || style.fillOpacity < 1); } function flushPathDrawn(ctx, scope) { if (scope.batchFill) { scope.batchFill = false; ctx.fill(); } if (scope.batchStroke) { scope.batchStroke = false; ctx.stroke(); } } function brushSingle(ctx, el) { var scope = { inHover: false, viewWidth: 0, viewHeight: 0, beforeBrushParam: {} }; brush$1(ctx, el, scope); brushLoopFinalize(ctx, scope); } function brush$1(ctx, el, scope) { var m = el.transform; if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) { el.__dirty &= -2; el.__isRendered = false; return; } var clipPaths = el.__clipPaths; var prevElClipPaths = scope.prevElClipPaths; var style = el.style; var forceSetTransform = false; var forceSetStyle = false; if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) { if (prevElClipPaths) { flushPathDrawn(ctx, scope); ctx.restore(); forceSetStyle = forceSetTransform = true; scope.prevElClipPaths = null; scope.allClipped = false; scope.prevEl = null; } if (clipPaths && clipPaths.length) { flushPathDrawn(ctx, scope); ctx.save(); updateClipStatus(clipPaths, ctx, scope); forceSetTransform = true; scope.prevElClipPaths = clipPaths; } } if (scope.allClipped) { el.__dirty &= -2; el.__isRendered = false; return; } el.beforeBrush && el.beforeBrush(scope.beforeBrushParam); el.innerBeforeBrush(); var prevEl = scope.prevEl; if (!prevEl) forceSetStyle = forceSetTransform = true; var canBatchPath = el instanceof Path && el.autoBatch && canPathBatch(style); if (forceSetTransform || isTransformChanged(m, prevEl.transform)) { flushPathDrawn(ctx, scope); setContextTransform(ctx, el); } else if (!canBatchPath) flushPathDrawn(ctx, scope); if (el instanceof Path) { if (scope.lastDrawType !== DRAW_TYPE_PATH) { forceSetStyle = true; scope.lastDrawType = DRAW_TYPE_PATH; } bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope); if (!canBatchPath || !scope.batchFill && !scope.batchStroke) ctx.beginPath(); brushPath(ctx, el, style, canBatchPath, scope); } else if (el instanceof TSpan) { if (scope.lastDrawType !== DRAW_TYPE_TEXT) { forceSetStyle = true; scope.lastDrawType = DRAW_TYPE_TEXT; } bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope); brushText(ctx, el, style); } else if (el instanceof ZRImage) { if (scope.lastDrawType !== DRAW_TYPE_IMAGE) { forceSetStyle = true; scope.lastDrawType = DRAW_TYPE_IMAGE; } bindImageStyle(ctx, el, prevEl, forceSetStyle, scope); brushImage(ctx, el, style); } else if (el.getTemporalDisplayables) { if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) { forceSetStyle = true; scope.lastDrawType = DRAW_TYPE_INCREMENTAL; } brushIncremental(ctx, el, scope); } el.innerAfterBrush(); if (el.afterBrush) { if (canBatchPath) flushPathDrawn(ctx, scope); el.afterBrush(); } scope.prevEl = el; el.__dirty = 0; el.__isRendered = true; } function brushLoopFinalize(ctx, scope) { flushPathDrawn(ctx, scope); if (scope.prevElClipPaths) ctx.restore(); } function brushIncremental(ctx, el, scope) { var displayables = el.getDisplayables(); var temporalDisplayables = el.getTemporalDisplayables(); ctx.save(); var innerScope = { prevElClipPaths: null, prevEl: null, allClipped: false, viewWidth: scope.viewWidth, viewHeight: scope.viewHeight, inHover: scope.inHover, beforeBrushParam: {} }; var i; var len; for (i = el.getCursor(), len = displayables.length; i < len; i++) { var displayable = displayables[i]; displayable.beforeBrush && displayable.beforeBrush(scope.beforeBrushParam); displayable.innerBeforeBrush(); brush$1(ctx, displayable, innerScope); displayable.innerAfterBrush(); displayable.afterBrush && displayable.afterBrush(); innerScope.prevEl = displayable; } brushLoopFinalize(ctx, innerScope); for (var i_1 = 0, len_1 = temporalDisplayables.length; i_1 < len_1; i_1++) { var displayable = temporalDisplayables[i_1]; displayable.beforeBrush && displayable.beforeBrush(scope.beforeBrushParam); displayable.innerBeforeBrush(); brush$1(ctx, displayable, innerScope); displayable.innerAfterBrush(); displayable.afterBrush && displayable.afterBrush(); innerScope.prevEl = displayable; } brushLoopFinalize(ctx, innerScope); el.clearTemporalDisplayables(); el.notClear = true; ctx.restore(); } //#endregion //#region node_modules/echarts/lib/util/decal.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var decalMap = new WeakMap(); var decalCache = new LRU(100); var decalKeys = [ "symbol", "symbolSize", "symbolKeepAspect", "color", "backgroundColor", "dashArrayX", "dashArrayY", "maxTileWidth", "maxTileHeight" ]; /** * Create or update pattern image from decal options * * @param {InnerDecalObject | 'none'} decalObject decal options, 'none' if no decal * @return {Pattern} pattern with generated image, null if no decal */ function createOrUpdatePatternFromDecal(decalObject, api) { if (decalObject === "none") return null; var dpr = api.getDevicePixelRatio(); var zr = api.getZr(); var isSVG = zr.painter.type === "svg"; if (decalObject.dirty) decalMap["delete"](decalObject); var oldPattern = decalMap.get(decalObject); if (oldPattern) return oldPattern; var decalOpt = defaults(decalObject, { symbol: "rect", symbolSize: 1, symbolKeepAspect: true, color: "rgba(0, 0, 0, 0.2)", backgroundColor: null, dashArrayX: 5, dashArrayY: 5, rotation: 0, maxTileWidth: 512, maxTileHeight: 512 }); if (decalOpt.backgroundColor === "none") decalOpt.backgroundColor = null; var pattern = { repeat: "repeat" }; setPatternnSource(pattern); pattern.rotation = decalOpt.rotation; pattern.scaleX = pattern.scaleY = isSVG ? 1 : 1 / dpr; decalMap.set(decalObject, pattern); decalObject.dirty = false; return pattern; function setPatternnSource(pattern) { var keys = [dpr]; var isValidKey = true; for (var i = 0; i < decalKeys.length; ++i) { var value = decalOpt[decalKeys[i]]; if (value != null && !isArray$1(value) && !isString(value) && !isNumber(value) && typeof value !== "boolean") { isValidKey = false; break; } keys.push(value); } var cacheKey; if (isValidKey) { cacheKey = keys.join(",") + (isSVG ? "-svg" : ""); var cache = decalCache.get(cacheKey); if (cache) isSVG ? pattern.svgElement = cache : pattern.image = cache; } var dashArrayX = normalizeDashArrayX(decalOpt.dashArrayX); var dashArrayY = normalizeDashArrayY(decalOpt.dashArrayY); var symbolArray = normalizeSymbolArray(decalOpt.symbol); var lineBlockLengthsX = getLineBlockLengthX(dashArrayX); var lineBlockLengthY = getLineBlockLengthY(dashArrayY); var canvas = !isSVG && platformApi.createCanvas(); var svgRoot = isSVG && { tag: "g", attrs: {}, key: "dcl", children: [] }; var pSize = getPatternSize(); var ctx; if (canvas) { canvas.width = pSize.width * dpr; canvas.height = pSize.height * dpr; ctx = canvas.getContext("2d"); } brushDecal(); if (isValidKey) decalCache.put(cacheKey, canvas || svgRoot); pattern.image = canvas; pattern.svgElement = svgRoot; pattern.svgWidth = pSize.width; pattern.svgHeight = pSize.height; /** * Get minimum length that can make a repeatable pattern. * * @return {Object} pattern width and height */ function getPatternSize() { /** * For example, if dash is [[3, 2], [2, 1]] for X, it looks like * |--- --- --- --- --- ... * |-- -- -- -- -- -- -- -- ... * |--- --- --- --- --- ... * |-- -- -- -- -- -- -- -- ... * So the minimum length of X is 15, * which is the least common multiple of `3 + 2` and `2 + 1` * |--- --- --- |--- --- ... * |-- -- -- -- -- |-- -- -- ... */ var width = 1; for (var i = 0, xlen = lineBlockLengthsX.length; i < xlen; ++i) width = getLeastCommonMultiple(width, lineBlockLengthsX[i]); var symbolRepeats = 1; for (var i = 0, xlen = symbolArray.length; i < xlen; ++i) symbolRepeats = getLeastCommonMultiple(symbolRepeats, symbolArray[i].length); width *= symbolRepeats; var height = lineBlockLengthY * lineBlockLengthsX.length * symbolArray.length; var warn = function(attrName) { console.warn("Calculated decal size is greater than " + attrName + " due to decal option settings so " + attrName + " is used for the decal size. Please consider changing the decal option to make a smaller decal or set " + attrName + " to be larger to avoid incontinuity."); }; if (width > decalOpt.maxTileWidth) warn("maxTileWidth"); if (height > decalOpt.maxTileHeight) warn("maxTileHeight"); return { width: Math.max(1, Math.min(width, decalOpt.maxTileWidth)), height: Math.max(1, Math.min(height, decalOpt.maxTileHeight)) }; } function brushDecal() { if (ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height); if (decalOpt.backgroundColor) { ctx.fillStyle = decalOpt.backgroundColor; ctx.fillRect(0, 0, canvas.width, canvas.height); } } var ySum = 0; for (var i = 0; i < dashArrayY.length; ++i) ySum += dashArrayY[i]; if (ySum <= 0) return; var y = -lineBlockLengthY; var yId = 0; var yIdTotal = 0; var xId0 = 0; while (y < pSize.height) { if (yId % 2 === 0) { var symbolYId = yIdTotal / 2 % symbolArray.length; var x = 0; var xId1 = 0; var xId1Total = 0; while (x < pSize.width * 2) { var xSum = 0; for (var i = 0; i < dashArrayX[xId0].length; ++i) xSum += dashArrayX[xId0][i]; if (xSum <= 0) break; if (xId1 % 2 === 0) { var size = (1 - decalOpt.symbolSize) * .5; var left = x + dashArrayX[xId0][xId1] * size; var top_1 = y + dashArrayY[yId] * size; var width = dashArrayX[xId0][xId1] * decalOpt.symbolSize; var height = dashArrayY[yId] * decalOpt.symbolSize; var symbolXId = xId1Total / 2 % symbolArray[symbolYId].length; brushSymbol(left, top_1, width, height, symbolArray[symbolYId][symbolXId]); } x += dashArrayX[xId0][xId1]; ++xId1Total; ++xId1; if (xId1 === dashArrayX[xId0].length) xId1 = 0; } ++xId0; if (xId0 === dashArrayX.length) xId0 = 0; } y += dashArrayY[yId]; ++yIdTotal; ++yId; if (yId === dashArrayY.length) yId = 0; } function brushSymbol(x, y, width, height, symbolType) { var scale = isSVG ? 1 : dpr; var symbol = createSymbol$1(symbolType, x * scale, y * scale, width * scale, height * scale, decalOpt.color, decalOpt.symbolKeepAspect); if (isSVG) { var symbolVNode = zr.painter.renderOneToVNode(symbol); if (symbolVNode) svgRoot.children.push(symbolVNode); } else brushSingle(ctx, symbol); } } } } /** * Convert symbol array into normalized array * * @param {string | (string | string[])[]} symbol symbol input * @return {string[][]} normolized symbol array */ function normalizeSymbolArray(symbol) { if (!symbol || symbol.length === 0) return [["rect"]]; if (isString(symbol)) return [[symbol]]; var isAllString = true; for (var i = 0; i < symbol.length; ++i) if (!isString(symbol[i])) { isAllString = false; break; } if (isAllString) return normalizeSymbolArray([symbol]); var result = []; for (var i = 0; i < symbol.length; ++i) if (isString(symbol[i])) result.push([symbol[i]]); else result.push(symbol[i]); return result; } /** * Convert dash input into dashArray * * @param {DecalDashArrayX} dash dash input * @return {number[][]} normolized dash array */ function normalizeDashArrayX(dash) { if (!dash || dash.length === 0) return [[0, 0]]; if (isNumber(dash)) { var dashValue = Math.ceil(dash); return [[dashValue, dashValue]]; } /** * [20, 5] should be normalized into [[20, 5]], * while [20, [5, 10]] should be normalized into [[20, 20], [5, 10]] */ var isAllNumber = true; for (var i = 0; i < dash.length; ++i) if (!isNumber(dash[i])) { isAllNumber = false; break; } if (isAllNumber) return normalizeDashArrayX([dash]); var result = []; for (var i = 0; i < dash.length; ++i) if (isNumber(dash[i])) { var dashValue = Math.ceil(dash[i]); result.push([dashValue, dashValue]); } else { var dashValue = map$1(dash[i], function(n) { return Math.ceil(n); }); if (dashValue.length % 2 === 1) result.push(dashValue.concat(dashValue)); else result.push(dashValue); } return result; } /** * Convert dash input into dashArray * * @param {DecalDashArrayY} dash dash input * @return {number[]} normolized dash array */ function normalizeDashArrayY(dash) { if (!dash || typeof dash === "object" && dash.length === 0) return [0, 0]; if (isNumber(dash)) { var dashValue_1 = Math.ceil(dash); return [dashValue_1, dashValue_1]; } var dashValue = map$1(dash, function(n) { return Math.ceil(n); }); return dash.length % 2 ? dashValue.concat(dashValue) : dashValue; } /** * Get block length of each line. A block is the length of dash line and space. * For example, a line with [4, 1] has a dash line of 4 and a space of 1 after * that, so the block length of this line is 5. * * @param {number[][]} dash dash array of X or Y * @return {number[]} block length of each line */ function getLineBlockLengthX(dash) { return map$1(dash, function(line) { return getLineBlockLengthY(line); }); } function getLineBlockLengthY(dash) { var blockLength = 0; for (var i = 0; i < dash.length; ++i) blockLength += dash[i]; if (dash.length % 2 === 1) return blockLength * 2; return blockLength; } //#endregion //#region node_modules/echarts/lib/visual/decal.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var decalVisualStageHandler = createSimpleOverallStageHandler2(decalVisual); function decalVisual(ecModel, api) { ecModel.eachRawSeries(function(seriesModel) { if (ecModel.isSeriesFiltered(seriesModel)) return; var data = seriesModel.getData(); if (data.hasItemVisual()) data.each(function(idx) { var decal = data.getItemVisual(idx, "decal"); if (decal) { var itemStyle = data.ensureUniqueItemVisual(idx, "style"); itemStyle.decal = createOrUpdatePatternFromDecal(decal, api); } }); var decal = data.getVisual("decal"); if (decal) { var style = data.getVisual("style"); style.decal = createOrUpdatePatternFromDecal(decal, api); } }); } //#endregion //#region node_modules/echarts/lib/core/echarts.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var version = "6.1.0"; var dependencies = { zrender: "6.1.0" }; var TEST_FRAME_REMAIN_TIME = 1; var PRIORITY_PROCESSOR_SERIES_FILTER = 800; var PRIORITY_PROCESSOR_DATASTACK = 900; var PRIORITY_PROCESSOR_AXIS_STATISTICS = 920; var PRIORITY_PROCESSOR_FILTER = 1e3; var PRIORITY_PROCESSOR_DEFAULT = 2e3; var PRIORITY_PROCESSOR_STATISTICS = 5e3; var PRIORITY_VISUAL_LAYOUT = 1e3; var PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100; var PRIORITY_VISUAL_GLOBAL = 2e3; var PRIORITY_VISUAL_CHART = 3e3; var PRIORITY_VISUAL_COMPONENT = 4e3; var PRIORITY_VISUAL_CHART_DATA_CUSTOM = 4500; var PRIORITY_VISUAL_POST_CHART_LAYOUT = 4600; var PRIORITY_VISUAL_BRUSH = 5e3; var PRIORITY_VISUAL_ARIA = 6e3; var PRIORITY_VISUAL_DECAL = 7e3; var PRIORITY = { PROCESSOR: { SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER, AXIS_STATISTICS: PRIORITY_PROCESSOR_AXIS_STATISTICS, FILTER: PRIORITY_PROCESSOR_FILTER, STATISTIC: PRIORITY_PROCESSOR_STATISTICS, STATISTICS: PRIORITY_PROCESSOR_STATISTICS }, VISUAL: { LAYOUT: PRIORITY_VISUAL_LAYOUT, PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT, GLOBAL: PRIORITY_VISUAL_GLOBAL, CHART: PRIORITY_VISUAL_CHART, POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT, COMPONENT: PRIORITY_VISUAL_COMPONENT, BRUSH: PRIORITY_VISUAL_BRUSH, CHART_ITEM: PRIORITY_VISUAL_CHART_DATA_CUSTOM, ARIA: PRIORITY_VISUAL_ARIA, DECAL: PRIORITY_VISUAL_DECAL } }; /** * @tutorial [EC_CYCLE] (ec updating/rendering cycles): * * - Common Rules: * - Nested entry is not allowed. If triggering a new run of EC_CYCLE during a * unfinished run, the new run will be delayed until the current run finishes * (if triggered by `dispatchAction`), or throw error (if triggered by other API calls). * - All user-visible ec events are triggered outside EC_CYCLE. * (i.e. be triggered after `this[IN_EC_CYCLE_KEY]` becoming `false`). * * - [EC_FULL_UPDATE_CYCLE]: * - It designates a run of a series of processing/updating/rendering. * - It is triggered by: * - `setOption` * - `dispatchAction` * (It is typically internally triggered by user inputs; but can also an explicit API call.) * - `resize` * - The next "animation frame" if in `lazyMode: true`. * - A run of EC_FULL_UPDATE_CYCLE comprises: * - EC_PREPARE (may be absent) * - EC_FULL_UPDATE: * - CoordinateSystem['create'] * - Data processing (may be absent) (see `registerProcessor`) * - CoordinateSystem['update'] (may be absent) * - Visual encoding (may be absent) (see `registerVisual`) * - Layout (may be absent) (see `registerLayout`) * - Rendering (`ComponentView` or `SeriesView`) * * - [EC_PARTIAL_UPDATE_CYCLE]s: * - They are shortcuts for performance. * - They are triggered by: * - `dispatchAction` * - These steps are typically omitted: * - No EC_PREPARE * - No CoordinateSystem['create'] and CoordinateSystem['update'] * - They require careful implementation, otherwise inconsistency may be introduced. * * - [EC_PROGRESSIVE_CYCLE]: * - It also carries out a series of processing/updating/rendering. * - It is performed in each subsequent "animation frame" until finished. * - It can be triggered by EC_FULL_UPDATE_CYCLE, EC_PARTIAL_UPDATE_CYCLE or EC_APPEND_DATA_CYCLE. * - A run of EC_PROGRESSIVE_CYCLE comprises: * - Data processing (may be absent) (see `registerProcessor`) * - Visual encoding (may be absent) (see `registerVisual`) * - Layout (may be absent) (see `registerLayout`) * - Rendering (`ComponentView` or `SeriesView`) * - PENDING: currently all data processing tasks (via `registerProcessor`) run in "block" mode. * (see `performDataProcessorTasks`). * * - [EC_APPEND_DATA_CYCLE]: * - See `appendData`. It is only supported for some special cases. * * - [SERIES_SPECIFIC_CYCLE]s: * - Series may have specific update/render cycles. For example, graph force layout performs * layout and rendering in each "animation frame". * * - Model updating: * - Model can only be modified at the beginning of ec cycles, including only: * - EC_PREPARE (see method `prepare()`) in `setOption` call. * - EC action handlers in `dispatchAction` call. * - `appendData` (a special case, where only data can be modified). * * - The lifetime of CoordinateSystem/Axis/Scale instances: * - They are only re-created per run of EC_FULL_UPDATE_CYCLE. * * - Global caches: see `cycleCache.ts` */ var IN_EC_CYCLE_KEY = "__flagInMainProcess"; var EC_UPDATE_CYCLE_VERSION_KEY = "__mainProcessVersion"; var PENDING_UPDATE = "__pendingUpdate"; var STATUS_NEEDS_UPDATE_KEY = "__needsUpdateStatus"; var ACTION_REG = /^[a-zA-Z0-9_]+$/; var CONNECT_STATUS_KEY = "__connectUpdateStatus"; var CONNECT_STATUS_PENDING = 0; var CONNECT_STATUS_UPDATING = 1; var CONNECT_STATUS_UPDATED = 2; function createRegisterEventWithLowercaseECharts(method) { return function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) args[_i] = arguments[_i]; if (this.isDisposed()) { disposedWarning(this.id); return; } return toLowercaseNameAndCallEventful(this, method, args); }; } function createRegisterEventWithLowercaseMessageCenter(method) { return function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) args[_i] = arguments[_i]; return toLowercaseNameAndCallEventful(this, method, args); }; } function toLowercaseNameAndCallEventful(host, method, args) { args[0] = args[0] && args[0].toLowerCase(); return Eventful.prototype[method].apply(host, args); } var MessageCenter = function(_super) { __extends(MessageCenter, _super); function MessageCenter() { return _super !== null && _super.apply(this, arguments) || this; } return MessageCenter; }(Eventful); var messageCenterProto = MessageCenter.prototype; messageCenterProto.on = createRegisterEventWithLowercaseMessageCenter("on"); messageCenterProto.off = createRegisterEventWithLowercaseMessageCenter("off"); var prepare; var prepareView; var updateDirectly; var updateMethods; var doConvertPixel; var updateStreamModes; var doDispatchAction; var flushPendingActions; var triggerUpdatedEvent; var bindRenderedEvent; var bindMouseEvent; var render; var renderComponents; var renderSeries; var createExtensionAPI; var enableConnect; var markStatusToUpdate; var applyChangedStates; var updateECUpdateCycleVersion; var ECharts = function(_super) { __extends(ECharts, _super); function ECharts(dom, theme, opts) { var _this = _super.call(this, new ECEventProcessor()) || this; _this._chartsViews = []; _this._chartsMap = {}; _this._componentsViews = []; _this._componentsMap = {}; _this._pendingActions = []; opts = opts || {}; _this.__v_skip = true; _this._dom = dom; var defaultRenderer = "canvas"; var defaultCoarsePointer = "auto"; var defaultUseDirtyRect = false; _this[EC_UPDATE_CYCLE_VERSION_KEY] = 1; var root = env.hasGlobalWindow ? window : global; if (root) { defaultRenderer = retrieve2(root.__ECHARTS__DEFAULT__RENDERER__, defaultRenderer); defaultCoarsePointer = retrieve2(root.__ECHARTS__DEFAULT__COARSE_POINTER, defaultCoarsePointer); defaultUseDirtyRect = retrieve2(root.__ECHARTS__DEFAULT__USE_DIRTY_RECT__, defaultUseDirtyRect); } if (opts.ssr) registerSSRDataGetter(function(el) { var ecData = getECData(el); var dataIndex = ecData.dataIndex; if (dataIndex == null) return; var hashMap = createHashMap(); hashMap.set("series_index", ecData.seriesIndex); hashMap.set("data_index", dataIndex); ecData.ssrType && hashMap.set("ssr_type", ecData.ssrType); return hashMap; }); var zr = _this._zr = init$2(dom, { renderer: opts.renderer || defaultRenderer, devicePixelRatio: opts.devicePixelRatio, width: opts.width, height: opts.height, ssr: opts.ssr, useDirtyRect: retrieve2(opts.useDirtyRect, defaultUseDirtyRect), useCoarsePointer: retrieve2(opts.useCoarsePointer, defaultCoarsePointer), pointerSize: opts.pointerSize }); _this._ssr = opts.ssr; _this._throttledZrFlush = throttle(bind$1(zr.flush, zr), 17); _this._updateTheme(theme); _this._locale = createLocaleObject(opts.locale || SYSTEM_LANG); _this._coordSysMgr = new CoordinateSystemManager(); var api = _this._api = createExtensionAPI(_this); function prioritySortFunc(a, b) { return a.__prio - b.__prio; } sort$2(visualFuncs, prioritySortFunc); sort$2(dataProcessorFuncs, prioritySortFunc); _this._scheduler = new Scheduler(_this, api, dataProcessorFuncs, visualFuncs); _this._messageCenter = new MessageCenter(); _this._initEvents(); _this.resize = bind$1(_this.resize, _this); zr.animation.on("frame", _this._onframe, _this); bindRenderedEvent(zr, _this); bindMouseEvent(zr, _this); setAsPrimitive(_this); return _this; } ECharts.prototype._onframe = function() { if (this._disposed) return; var scheduler = this._scheduler; var ecModel = this._model; var api = this._api; applyChangedStates(this); if (this[PENDING_UPDATE]) { var silent = this[PENDING_UPDATE].silent; this[IN_EC_CYCLE_KEY] = true; updateECUpdateCycleVersion(this); try { prepare(this); updateMethods.update.call(this, null, this[PENDING_UPDATE].updateParams); } catch (e) { this[IN_EC_CYCLE_KEY] = false; this[PENDING_UPDATE] = null; throw e; } this._zr.flush(); this[IN_EC_CYCLE_KEY] = false; this[PENDING_UPDATE] = null; flushPendingActions.call(this, silent); triggerUpdatedEvent.call(this, silent); } else if (scheduler.unfinished) { var remainTime = TEST_FRAME_REMAIN_TIME; do { scheduler.unfinished = false; var startTime = platformApi.getTime(); scheduler.performSeriesTasks(ecModel); scheduler.performDataProcessorTasks(ecModel); updateStreamModes(this, ecModel); scheduler.performVisualTasks(ecModel); renderSeries(this, this._model, api, "remain", {}); remainTime -= platformApi.getTime() - startTime; } while (remainTime > 0 && scheduler.unfinished); if (!scheduler.unfinished) this._zr.flush(); } }; ECharts.prototype.getDom = function() { return this._dom; }; ECharts.prototype.getId = function() { return this.id; }; ECharts.prototype.getZr = function() { return this._zr; }; ECharts.prototype.isSSR = function() { return this._ssr; }; ECharts.prototype.setOption = function(option, notMerge, lazyUpdate) { if (this[IN_EC_CYCLE_KEY]) { error("`setOption` should not be called during main process."); return; } if (this._disposed) { disposedWarning(this.id); return; } var silent; var replaceMerge; var transitionOpt; if (isObject$3(notMerge)) { lazyUpdate = notMerge.lazyUpdate; silent = notMerge.silent; replaceMerge = notMerge.replaceMerge; transitionOpt = notMerge.transition; notMerge = notMerge.notMerge; } this[IN_EC_CYCLE_KEY] = true; updateECUpdateCycleVersion(this); if (!this._model || notMerge) { var optionManager = new OptionManager(this._api); var theme = this._theme; var ecModel = this._model = new GlobalModel(); ecModel.scheduler = this._scheduler; ecModel.ssr = this._ssr; ecModel.init(null, null, null, theme, this._locale, optionManager); } this._model.setOption(option, { replaceMerge }, optionPreprocessorFuncs); var updateParams = { seriesTransition: transitionOpt, optionChanged: true }; if (lazyUpdate) { this[PENDING_UPDATE] = { silent, updateParams }; this[IN_EC_CYCLE_KEY] = false; this.getZr().wakeUp(); } else { try { prepare(this); updateMethods.update.call(this, null, updateParams); } catch (e) { this[PENDING_UPDATE] = null; this[IN_EC_CYCLE_KEY] = false; throw e; } if (!this._ssr) this._zr.flush(); this[PENDING_UPDATE] = null; this[IN_EC_CYCLE_KEY] = false; flushPendingActions.call(this, silent); triggerUpdatedEvent.call(this, silent); } }; /** * Update theme with name or theme option and repaint the chart. * @param theme Theme name or theme option. * @param opts Optional settings */ ECharts.prototype.setTheme = function(theme, opts) { if (this[IN_EC_CYCLE_KEY]) { error("`setTheme` should not be called during main process."); return; } if (this._disposed) { disposedWarning(this.id); return; } var ecModel = this._model; if (!ecModel) return; var silent = opts && opts.silent; var updateParams = null; if (this[PENDING_UPDATE]) { if (silent == null) silent = this[PENDING_UPDATE].silent; updateParams = this[PENDING_UPDATE].updateParams; this[PENDING_UPDATE] = null; } this[IN_EC_CYCLE_KEY] = true; updateECUpdateCycleVersion(this); try { this._updateTheme(theme); ecModel.setTheme(this._theme); prepare(this); updateMethods.update.call(this, { type: "setTheme" }, updateParams); } catch (e) { this[IN_EC_CYCLE_KEY] = false; throw e; } this[IN_EC_CYCLE_KEY] = false; flushPendingActions.call(this, silent); triggerUpdatedEvent.call(this, silent); }; ECharts.prototype._updateTheme = function(theme) { if (isString(theme)) theme = themeStorage[theme]; if (theme) { theme = clone$4(theme); theme && globalBackwardCompat(theme, true); this._theme = theme; } }; ECharts.prototype.getModel = function() { return this._model; }; ECharts.prototype.getOption = function() { return this._model && this._model.getOption(); }; ECharts.prototype.getWidth = function() { return this._zr.getWidth(); }; ECharts.prototype.getHeight = function() { return this._zr.getHeight(); }; ECharts.prototype.getDevicePixelRatio = function() { return this._zr.painter.dpr || env.hasGlobalWindow && window.devicePixelRatio || 1; }; /** * Get canvas which has all thing rendered * @deprecated Use renderToCanvas instead. */ ECharts.prototype.getRenderedCanvas = function(opts) { deprecateReplaceLog("getRenderedCanvas", "renderToCanvas"); return this.renderToCanvas(opts); }; ECharts.prototype.renderToCanvas = function(opts) { opts = opts || {}; var painter = this._zr.painter; if (painter.type !== "canvas") throw new Error("renderToCanvas can only be used in the canvas renderer."); return painter.getRenderedCanvas({ backgroundColor: opts.backgroundColor || this._model.get("backgroundColor"), pixelRatio: opts.pixelRatio || this.getDevicePixelRatio() }); }; ECharts.prototype.renderToSVGString = function(opts) { opts = opts || {}; var painter = this._zr.painter; if (painter.type !== "svg") throw new Error("renderToSVGString can only be used in the svg renderer."); return painter.renderToString({ useViewBox: opts.useViewBox }); }; /** * Get svg data url */ ECharts.prototype.getSvgDataURL = function() { var zr = this._zr; each$12(zr.storage.getDisplayList(), function(el) { el.stopAnimation(null, true); }); return zr.painter.toDataURL(); }; ECharts.prototype.getDataURL = function(opts) { if (this._disposed) { disposedWarning(this.id); return; } opts = opts || {}; var excludeComponents = opts.excludeComponents; var ecModel = this._model; var excludesComponentViews = []; var self = this; each$12(excludeComponents, function(componentType) { ecModel.eachComponent({ mainType: componentType }, function(component) { var view = self._componentsMap[component.__viewId]; if (!view.group.ignore) { excludesComponentViews.push(view); view.group.ignore = true; } }); }); var url = this._zr.painter.getType() === "svg" ? this.getSvgDataURL() : this.renderToCanvas(opts).toDataURL("image/" + (opts && opts.type || "png")); each$12(excludesComponentViews, function(view) { view.group.ignore = false; }); return url; }; ECharts.prototype.getConnectedDataURL = function(opts) { if (this._disposed) { disposedWarning(this.id); return; } var isSvg = opts.type === "svg"; var groupId = this.group; var mathMin = Math.min; var mathMax = Math.max; var MAX_NUMBER = Infinity; if (connectedGroups[groupId]) { var left_1 = MAX_NUMBER; var top_1 = MAX_NUMBER; var right_1 = -MAX_NUMBER; var bottom_1 = -MAX_NUMBER; var canvasList_1 = []; var dpr_1 = opts && opts.pixelRatio || this.getDevicePixelRatio(); each$12(instances, function(chart, id) { if (chart.group === groupId) { var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.renderToCanvas(clone$4(opts)); var boundingRect = chart.getDom().getBoundingClientRect(); left_1 = mathMin(boundingRect.left, left_1); top_1 = mathMin(boundingRect.top, top_1); right_1 = mathMax(boundingRect.right, right_1); bottom_1 = mathMax(boundingRect.bottom, bottom_1); canvasList_1.push({ dom: canvas, left: boundingRect.left, top: boundingRect.top }); } }); left_1 *= dpr_1; top_1 *= dpr_1; right_1 *= dpr_1; bottom_1 *= dpr_1; var width = right_1 - left_1; var height = bottom_1 - top_1; var targetCanvas = platformApi.createCanvas(); var zr_1 = init$2(targetCanvas, { renderer: isSvg ? "svg" : "canvas" }); zr_1.resize({ width, height }); if (isSvg) { var content_1 = ""; each$12(canvasList_1, function(item) { var x = item.left - left_1; var y = item.top - top_1; content_1 += "" + item.dom + ""; }); zr_1.painter.getSvgRoot().innerHTML = content_1; if (opts.connectedBackgroundColor) zr_1.painter.setBackgroundColor(opts.connectedBackgroundColor); zr_1.refreshImmediately(); return zr_1.painter.toDataURL(); } else { if (opts.connectedBackgroundColor) zr_1.add(new Rect$2({ shape: { x: 0, y: 0, width, height }, style: { fill: opts.connectedBackgroundColor } })); each$12(canvasList_1, function(item) { var img = new ZRImage({ style: { x: item.left * dpr_1 - left_1, y: item.top * dpr_1 - top_1, image: item.dom } }); zr_1.add(img); }); zr_1.refreshImmediately(); return targetCanvas.toDataURL("image/" + (opts && opts.type || "png")); } } else return this.getDataURL(opts); }; ECharts.prototype.convertToPixel = function(finder, value, opt) { return doConvertPixel(this, "convertToPixel", finder, value, opt); }; /** * Convert from logical coordinate system to pixel coordinate system. * See CoordinateSystem#convertToPixel. * * @see CoordinateSystem['dataToLayout'] for parameters and return. * @see CoordinateSystemDataCoord */ ECharts.prototype.convertToLayout = function(finder, value, opt) { return doConvertPixel(this, "convertToLayout", finder, value, opt); }; ECharts.prototype.convertFromPixel = function(finder, value, opt) { return doConvertPixel(this, "convertFromPixel", finder, value, opt); }; /** * Is the specified coordinate systems or components contain the given pixel point. * @param {Array|number} value * @return {boolean} result */ ECharts.prototype.containPixel = function(finder, value) { if (this._disposed) { disposedWarning(this.id); return; } var ecModel = this._model; var result; each$12(parseFinder$1(ecModel, finder), function(models, key) { key.indexOf("Models") >= 0 && each$12(models, function(model) { var coordSys = model.coordinateSystem; if (coordSys && coordSys.containPoint) result = result || !!coordSys.containPoint(value); else if (key === "seriesModels") { var view = this._chartsMap[model.__viewId]; if (view && view.containPoint) result = result || view.containPoint(value, model); else warn(key + ": " + (view ? "The found component do not support containPoint." : "No view mapping to the found component.")); } else warn(key + ": containPoint is not supported"); }, this); }, this); return !!result; }; /** * Get visual from series or data. * @param finder * If string, e.g., 'series', means {seriesIndex: 0}. * If Object, could contain some of these properties below: * { * seriesIndex / seriesId / seriesName, * dataIndex / dataIndexInside * } * If dataIndex is not specified, series visual will be fetched, * but not data item visual. * If all of seriesIndex, seriesId, seriesName are not specified, * visual will be fetched from first series. * @param visualType 'color', 'symbol', 'symbolSize' */ ECharts.prototype.getVisual = function(finder, visualType) { var ecModel = this._model; var parsedFinder = parseFinder$1(ecModel, finder, { defaultMainType: "series" }); var seriesModel = parsedFinder.seriesModel; if (!seriesModel) warn("There is no specified series model"); var data = seriesModel.getData(); var dataIndexInside = parsedFinder.hasOwnProperty("dataIndexInside") ? parsedFinder.dataIndexInside : parsedFinder.hasOwnProperty("dataIndex") ? data.indexOfRawIndex(parsedFinder.dataIndex) : null; return dataIndexInside != null ? getItemVisualFromData(data, dataIndexInside, visualType) : getVisualFromData(data, visualType); }; /** * Get view of corresponding component model */ ECharts.prototype.getViewOfComponentModel = function(componentModel) { return this._componentsMap[componentModel.__viewId]; }; /** * Get view of corresponding series model */ ECharts.prototype.getViewOfSeriesModel = function(seriesModel) { return this._chartsMap[seriesModel.__viewId]; }; ECharts.prototype._initEvents = function() { var _this = this; each$12(MOUSE_EVENT_NAMES, function(eveName) { var handler = function(e) { var ecModel = _this.getModel(); var el = e.target; var params; var isGlobalOut = eveName === "globalout"; if (isGlobalOut) params = {}; else el && findEventDispatcher(el, function(parent) { var ecData = getECData(parent); if (ecData && ecData.dataIndex != null) { var dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex); params = dataModel && dataModel.getDataParams(ecData.dataIndex, ecData.dataType, el) || {}; return true; } else if (ecData.eventData) { params = extend({}, ecData.eventData); return true; } }, true); if (params) { var componentType = params.componentType; var componentIndex = params.componentIndex; if (componentType === "markLine" || componentType === "markPoint" || componentType === "markArea") { componentType = "series"; componentIndex = params.seriesIndex; } var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex); var view = model && _this[model.mainType === "series" ? "_chartsMap" : "_componentsMap"][model.__viewId]; if (!isGlobalOut && !(model && view)) warn("model or view can not be found by params"); params.event = e; params.type = eveName; _this._$eventProcessor.eventInfo = { targetEl: el, packedEvent: params, model, view }; _this.trigger(eveName, params); } }; handler.zrEventfulCallAtLast = true; _this._zr.on(eveName, handler, _this); }); var messageCenter = this._messageCenter; each$12(publicEventTypeMap, function(_, eventType) { messageCenter.on(eventType, function(event) { _this.trigger(eventType, event); }); }); handleLegacySelectEvents(messageCenter, this, this._api); }; ECharts.prototype.isDisposed = function() { return this._disposed; }; ECharts.prototype.clear = function() { if (this._disposed) { disposedWarning(this.id); return; } this.setOption({ series: [] }, true); }; ECharts.prototype.dispose = function() { if (this._disposed) { disposedWarning(this.id); return; } this._disposed = true; if (this.getDom()) setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, ""); var chart = this; var api = chart._api; var ecModel = chart._model; each$12(chart._componentsViews, function(component) { component.dispose(ecModel, api); }); each$12(chart._chartsViews, function(chart) { chart.dispose(ecModel, api); }); chart._zr.dispose(); chart._dom = chart._model = chart._chartsMap = chart._componentsMap = chart._chartsViews = chart._componentsViews = chart._scheduler = chart._api = chart._zr = chart._throttledZrFlush = chart._theme = chart._coordSysMgr = chart._messageCenter = null; delete instances[chart.id]; }; /** * Resize the chart */ ECharts.prototype.resize = function(opts) { if (this[IN_EC_CYCLE_KEY]) { error("`resize` should not be called during main process."); return; } if (this._disposed) { disposedWarning(this.id); return; } this._zr.resize(opts); var ecModel = this._model; this._loadingFX && this._loadingFX.resize(); if (!ecModel) return; var needPrepare = ecModel.resetOption("media"); var silent = opts && opts.silent; if (this[PENDING_UPDATE]) { if (silent == null) silent = this[PENDING_UPDATE].silent; needPrepare = true; this[PENDING_UPDATE] = null; } this[IN_EC_CYCLE_KEY] = true; updateECUpdateCycleVersion(this); try { needPrepare && prepare(this); updateMethods.update.call(this, { type: "resize", animation: extend({ duration: 0 }, opts && opts.animation) }); } catch (e) { this[IN_EC_CYCLE_KEY] = false; throw e; } this[IN_EC_CYCLE_KEY] = false; flushPendingActions.call(this, silent); triggerUpdatedEvent.call(this, silent); }; ECharts.prototype.showLoading = function(name, cfg) { if (this._disposed) { disposedWarning(this.id); return; } if (isObject$3(name)) { cfg = name; name = ""; } name = name || "default"; this.hideLoading(); if (!loadingEffects[name]) { warn("Loading effects " + name + " not exists."); return; } var el = loadingEffects[name](this._api, cfg); var zr = this._zr; this._loadingFX = el; zr.add(el); }; /** * Hide loading effect */ ECharts.prototype.hideLoading = function() { if (this._disposed) { disposedWarning(this.id); return; } this._loadingFX && this._zr.remove(this._loadingFX); this._loadingFX = null; }; ECharts.prototype.makeActionFromEvent = function(eventObj) { var payload = extend({}, eventObj); payload.type = connectionEventRevertMap[eventObj.type]; return payload; }; /** * @param opt If pass boolean, means opt.silent * @param opt.silent Default `false`. Whether trigger events. * @param opt.flush Default `undefined`. * true: Flush immediately, and then pixel in canvas can be fetched * immediately. Caution: it might affect performance. * false: Not flush. * undefined: Auto decide whether perform flush. */ ECharts.prototype.dispatchAction = function(payload, opt) { if (this._disposed) { disposedWarning(this.id); return; } if (!isObject$3(opt)) opt = { silent: !!opt }; if (!actions[payload.type]) return; if (!this._model) return; if (this[IN_EC_CYCLE_KEY]) { this._pendingActions.push(payload); return; } var silent = opt.silent; doDispatchAction.call(this, payload, silent); var flush = opt.flush; if (flush) this._zr.flush(); else if (flush !== false && env.browser.weChat) this._throttledZrFlush(); flushPendingActions.call(this, silent); triggerUpdatedEvent.call(this, silent); }; ECharts.prototype.updateLabelLayout = function() { lifecycle.trigger("series:layoutlabels", this._model, this._api, { updatedSeries: [] }); }; ECharts.prototype.appendData = function(params) { if (this._disposed) { disposedWarning(this.id); return; } var seriesIndex = params.seriesIndex; var seriesModel = this.getModel().getSeriesByIndex(seriesIndex); assert(params.data && seriesModel); seriesModel.appendData(params); this._scheduler.unfinished = true; this.getZr().wakeUp(); }; ECharts.internalField = function() { prepare = function(ecIns) { resetCachePerECPrepare(ecIns._model); var scheduler = ecIns._scheduler; scheduler.restorePipelines(ecIns._zr, ecIns._model); scheduler.prepareStageTasks(); prepareView(ecIns, true); prepareView(ecIns, false); scheduler.plan(); }; /** * Prepare view instances of charts and components */ prepareView = function(ecIns, isComponent) { var ecModel = ecIns._model; var scheduler = ecIns._scheduler; var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews; var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap; var zr = ecIns._zr; var api = ecIns._api; for (var i = 0; i < viewList.length; i++) viewList[i].__alive = false; isComponent ? ecModel.eachComponent(function(componentType, model) { componentType !== "series" && doPrepare(model); }) : ecModel.eachSeries(doPrepare); function doPrepare(model) { var requireNewView = model.__requireNewView; model.__requireNewView = false; var viewId = "_ec_" + model.id + "_" + model.type; var view = !requireNewView && viewMap[viewId]; if (!view) { var classType = parseClassType(model.type); var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : ChartView.getClass(classType.sub); assert(Clazz, classType.sub + " does not exist."); view = new Clazz(); view.init(ecModel, api); viewMap[viewId] = view; viewList.push(view); zr.add(view.group); } model.__viewId = view.__id = viewId; view.__alive = true; view.__model = model; view.group.__ecComponentInfo = { mainType: model.mainType, index: model.componentIndex }; !isComponent && scheduler.prepareView(view, model, ecModel, api); } for (var i = 0; i < viewList.length;) { var view = viewList[i]; if (!view.__alive) { !isComponent && view.renderTask.dispose(); zr.remove(view.group); view.dispose(ecModel, api); viewList.splice(i, 1); if (viewMap[view.__id] === view) delete viewMap[view.__id]; view.__id = view.group.__ecComponentInfo = null; } else i++; } }; updateDirectly = function(ecIns, method, payload, mainType, subType) { var ecModel = ecIns._model; ecModel.setUpdatePayload(payload); if (!mainType) { each$12([].concat(ecIns._componentsViews).concat(ecIns._chartsViews), callView); return; } var condition = makeQueryConditionKindA(payload, mainType, subType); var excludeSeriesId = payload.excludeSeriesId; var excludeSeriesIdMap; if (excludeSeriesId != null) { excludeSeriesIdMap = createHashMap(); each$12(normalizeToArray(excludeSeriesId), function(id) { var modelId = convertOptionIdName(id, null); if (modelId != null) excludeSeriesIdMap.set(modelId, true); }); } ecModel && ecModel.eachComponent(condition, function(model) { if (excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null) return; if (isHighDownPayload(payload)) { if (model instanceof SeriesModel) { if (payload.type === "highlight" && !payload.notBlur && !model.get(["emphasis", "disabled"])) blurSeriesFromHighlightPayload(model, payload, ecIns._api); } else { var _a = findComponentHighDownDispatchers(model.mainType, model.componentIndex, payload.name, ecIns._api), focusSelf = _a.focusSelf, dispatchers = _a.dispatchers; if (payload.type === "highlight" && focusSelf && !payload.notBlur) blurComponent(model.mainType, model.componentIndex, ecIns._api); if (dispatchers) each$12(dispatchers, function(dispatcher) { payload.type === "highlight" ? enterEmphasis(dispatcher) : leaveEmphasis(dispatcher); }); } } else if (isSelectChangePayload(payload)) { if (model instanceof SeriesModel) { toggleSelectionFromPayload(model, payload, ecIns._api); updateSeriesElementSelection(model); markStatusToUpdate(ecIns); } } }, ecIns); ecModel && ecModel.eachComponent(condition, function(model) { if (excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null) return; callView(ecIns[mainType === "series" ? "_chartsMap" : "_componentsMap"][model.__viewId]); }, ecIns); function callView(view) { view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload); } }; updateMethods = { prepareAndUpdate: function(payload) { prepare(this); updateMethods.update.call(this, payload, payload && { optionChanged: payload.newOption != null }); }, update: function(payload, updateParams) { var ecModel = this._model; var api = this._api; var zr = this._zr; var coordSysMgr = this._coordSysMgr; var scheduler = this._scheduler; if (!ecModel) return; resetCachePerECFullUpdate(ecModel); ecModel.setUpdatePayload(payload); scheduler.restoreData(ecModel, payload); scheduler.performSeriesTasks(ecModel); coordSysMgr.create(ecModel, api); lifecycle.trigger("coordsys:aftercreate", ecModel, api); scheduler.performDataProcessorTasks(ecModel, payload); updateStreamModes(this, ecModel); coordSysMgr.update(ecModel, api); clearColorPalette(ecModel); scheduler.performVisualTasks(ecModel, payload); var backgroundColor = ecModel.get("backgroundColor") || "transparent"; zr.setBackgroundColor(backgroundColor); var darkMode = ecModel.get("darkMode"); if (darkMode != null && darkMode !== "auto") zr.setDarkMode(darkMode); render(this, ecModel, api, payload, updateParams); lifecycle.trigger("afterupdate", ecModel, api); }, /** * PENDING: See INCONSISTENCY_OF_BRUSH_SELECTED_EVENT_IN_UPDATE_TRANSFORM */ updateTransform: function(payload) { var ecIns = this; var ecModel = ecIns._model; var api = ecIns._api; if (!ecModel) return; ecModel.setUpdatePayload(payload); var componentDirtyList = []; ecModel.eachComponent(function(mainType, componentModel) { if (mainType === "series") return; var componentView = ecIns.getViewOfComponentModel(componentModel); if (componentView && componentView.__alive) { if (componentView.updateTransform) { var result = componentView.updateTransform(componentModel, ecModel, api, payload); result && result.update && componentDirtyList.push(componentView); } else componentDirtyList.push(componentView); } }); var seriesDirtyMap = createHashMap(); ecModel.eachSeries(function(seriesModel) { var chartView = ecIns._chartsMap[seriesModel.__viewId]; var pipelineContext = seriesModel.pipelineContext; if (chartView.updateTransform && !pipelineContext.progressiveRender) { var result = chartView.updateTransform(seriesModel, ecModel, api, payload); result && result.update && seriesDirtyMap.set(seriesModel.uid, 1); } else seriesDirtyMap.set(seriesModel.uid, 1); }); ecIns._scheduler.performVisualTasks(ecModel, payload, { setDirty: true, dirtyMap: seriesDirtyMap }); renderSeries(ecIns, ecModel, api, payload, {}, seriesDirtyMap); lifecycle.trigger("afterupdate", ecModel, api); }, updateView: function(payload) { var ecModel = this._model; if (!ecModel) return; ecModel.setUpdatePayload(payload); ChartView.markUpdateMethod(payload, "updateView"); clearColorPalette(ecModel); this._scheduler.performVisualTasks(ecModel, payload, { setDirty: true }); render(this, ecModel, this._api, payload, {}); lifecycle.trigger("afterupdate", ecModel, this._api); }, updateVisual: function(payload) { var _this = this; var ecModel = this._model; if (!ecModel) return; ecModel.setUpdatePayload(payload); ecModel.eachSeries(function(seriesModel) { seriesModel.getData().clearAllVisual(); }); ChartView.markUpdateMethod(payload, "updateVisual"); clearColorPalette(ecModel); this._scheduler.performVisualTasks(ecModel, payload, { visualType: "visual", setDirty: true }); ecModel.eachComponent(function(componentType, componentModel) { if (componentType !== "series") { var componentView = _this.getViewOfComponentModel(componentModel); componentView && componentView.__alive && componentView.updateVisual(componentModel, ecModel, _this._api, payload); } }); ecModel.eachSeries(function(seriesModel) { _this._chartsMap[seriesModel.__viewId].updateVisual(seriesModel, ecModel, _this._api, payload); }); lifecycle.trigger("afterupdate", ecModel, this._api); }, /** * @deprecated */ updateLayout: function(payload) { updateMethods.update.call(this, payload); } }; function doConvertPixelImpl(ecIns, methodName, finder, value, opt) { if (ecIns._disposed) { disposedWarning(ecIns.id); return; } var ecModel = ecIns._model; var coordSysList = ecIns._coordSysMgr.getCoordinateSystems(); var result; var parsedFinder = parseFinder$1(ecModel, finder); for (var i = 0; i < coordSysList.length; i++) { var coordSys = coordSysList[i]; if (coordSys[methodName] && (result = coordSys[methodName](ecModel, parsedFinder, value, opt)) != null) return result; } warn("No coordinate system that supports " + methodName + " found by the given finder."); } doConvertPixel = doConvertPixelImpl; updateStreamModes = function(ecIns, ecModel) { var chartsMap = ecIns._chartsMap; var scheduler = ecIns._scheduler; ecModel.eachSeries(function(seriesModel) { scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]); }); }; doDispatchAction = function(payload, silent) { var _this = this; var ecModel = this.getModel(); var payloadType = payload.type; var escapeConnect = payload.escapeConnect; var actionInfo = actions[payloadType]; var cptTypeTmp = (actionInfo.update || "update").split(":"); var updateMethod = cptTypeTmp.pop(); var cptType = cptTypeTmp[0] != null && parseClassType(cptTypeTmp[0]); this[IN_EC_CYCLE_KEY] = true; updateECUpdateCycleVersion(this); var payloads = [payload]; var batched = false; if (payload.batch) { batched = true; payloads = map$1(payload.batch, function(item) { item = defaults(extend({}, item), payload); item.batch = null; return item; }); } var eventObjBatch = []; var eventObj; var actionResultBatch = []; var nonRefinedEventType = actionInfo.nonRefinedEventType; var isSelectChange = isSelectChangePayload(payload); var isHighDown = isHighDownPayload(payload); if (isHighDown) allLeaveBlur(this._api); each$12(payloads, function(batchItem) { var actionResult = actionInfo.action(batchItem, ecModel, _this._api); if (actionInfo.refineEvent) actionResultBatch.push(actionResult); else eventObj = actionResult; eventObj = eventObj || extend({}, batchItem); eventObj.type = nonRefinedEventType; eventObjBatch.push(eventObj); if (isHighDown) { var _a = preParseFinder(payload), queryOptionMap = _a.queryOptionMap; var componentMainType = _a.mainTypeSpecified ? queryOptionMap.keys()[0] : "series"; updateDirectly(_this, updateMethod, batchItem, componentMainType); markStatusToUpdate(_this); } else if (isSelectChange) { updateDirectly(_this, updateMethod, batchItem, "series"); markStatusToUpdate(_this); } else if (cptType) updateDirectly(_this, updateMethod, batchItem, cptType.main, cptType.sub); }); if (updateMethod !== "none" && !isHighDown && !isSelectChange && !cptType) try { if (this[PENDING_UPDATE]) { prepare(this); updateMethods.update.call(this, payload); this[PENDING_UPDATE] = null; } else updateMethods[updateMethod].call(this, payload); } catch (e) { this[IN_EC_CYCLE_KEY] = false; throw e; } if (batched) eventObj = { type: nonRefinedEventType, escapeConnect, batch: eventObjBatch }; else eventObj = eventObjBatch[0]; this[IN_EC_CYCLE_KEY] = false; if (!silent) { var refinedEvent = void 0; if (actionInfo.refineEvent) { var eventContent = actionInfo.refineEvent(actionResultBatch, payload, ecModel, this._api).eventContent; assert(isObject$3(eventContent)); refinedEvent = defaults({ type: actionInfo.refinedEventType }, eventContent); refinedEvent.fromAction = payload.type; refinedEvent.fromActionPayload = payload; refinedEvent.escapeConnect = true; } var messageCenter = this._messageCenter; messageCenter.trigger(eventObj.type, eventObj); if (refinedEvent) messageCenter.trigger(refinedEvent.type, refinedEvent); } }; flushPendingActions = function(silent) { var pendingActions = this._pendingActions; while (pendingActions.length) { var payload = pendingActions.shift(); doDispatchAction.call(this, payload, silent); } }; triggerUpdatedEvent = function(silent) { !silent && this.trigger("updated"); }; /** * Event `rendered` is triggered when zr * rendered. It is useful for realtime * snapshot (reflect animation). * * Event `finished` is triggered when: * (1) zrender rendering finished. * (2) initial animation finished. * (3) progressive rendering finished. * (4) no pending action. * (5) no delayed setOption needs to be processed. */ bindRenderedEvent = function(zr, ecIns) { zr.on("rendered", function(params) { ecIns.trigger("rendered", params); if (zr.animation.isFinished() && !ecIns[PENDING_UPDATE] && !ecIns._scheduler.unfinished && !ecIns._pendingActions.length) ecIns.trigger("finished"); else zr.refresh(); }); }; bindMouseEvent = function(zr, ecIns) { zr.on("mouseover", function(e) { var el = e.target; var dispatcher = findEventDispatcher(el, isHighDownDispatcher); if (dispatcher) { handleGlobalMouseOverForHighDown(dispatcher, e, ecIns._api); markStatusToUpdate(ecIns); } }).on("mouseout", function(e) { var el = e.target; var dispatcher = findEventDispatcher(el, isHighDownDispatcher); if (dispatcher) { handleGlobalMouseOutForHighDown(dispatcher, e, ecIns._api); markStatusToUpdate(ecIns); } }).on("click", function(e) { var el = e.target; var dispatcher = findEventDispatcher(el, function(target) { return getECData(target).dataIndex != null; }, true); if (dispatcher) { var actionType = dispatcher.selected ? "unselect" : "select"; var ecData = getECData(dispatcher); ecIns._api.dispatchAction({ type: actionType, dataType: ecData.dataType, dataIndexInside: ecData.dataIndex, seriesIndex: ecData.seriesIndex, isFromClick: true }); } }); }; function clearColorPalette(ecModel) { ecModel.clearColorPalette(); ecModel.eachSeries(function(seriesModel) { seriesModel.clearColorPalette(); }); } function allocateZlevels(ecModel) { var componentZLevels = []; var seriesZLevels = []; var hasSeparateZLevel = false; ecModel.eachComponent(function(componentType, componentModel) { var zlevel = componentModel.get("zlevel") || 0; var z = componentModel.get("z") || 0; var zlevelKey = componentModel.getZLevelKey(); hasSeparateZLevel = hasSeparateZLevel || !!zlevelKey; (componentType === "series" ? seriesZLevels : componentZLevels).push({ zlevel, z, idx: componentModel.componentIndex, type: componentType, key: zlevelKey }); }); if (hasSeparateZLevel) { var zLevels = componentZLevels.concat(seriesZLevels); var lastSeriesZLevel_1; var lastSeriesKey_1; sort$2(zLevels, function(a, b) { if (a.zlevel === b.zlevel) return a.z - b.z; return a.zlevel - b.zlevel; }); each$12(zLevels, function(item) { var componentModel = ecModel.getComponent(item.type, item.idx); var zlevel = item.zlevel; var key = item.key; if (lastSeriesZLevel_1 != null) zlevel = Math.max(lastSeriesZLevel_1, zlevel); if (key) { if (zlevel === lastSeriesZLevel_1 && key !== lastSeriesKey_1) zlevel++; lastSeriesKey_1 = key; } else if (lastSeriesKey_1) { if (zlevel === lastSeriesZLevel_1) zlevel++; lastSeriesKey_1 = ""; } lastSeriesZLevel_1 = zlevel; componentModel.setZLevel(zlevel); }); } } render = function(ecIns, ecModel, api, payload, updateParams) { allocateZlevels(ecModel); renderComponents(ecIns, ecModel, api, payload, updateParams); each$12(ecIns._chartsViews, function(chart) { chart.__alive = false; }); renderSeries(ecIns, ecModel, api, payload, updateParams); each$12(ecIns._chartsViews, function(chart) { if (!chart.__alive) chart.remove(ecModel, api); }); }; renderComponents = function(ecIns, ecModel, api, payload, updateParams, dirtyList) { each$12(dirtyList || ecIns._componentsViews, function(componentView) { var componentModel = componentView.__model; clearStates(componentModel, componentView); componentView.render(componentModel, ecModel, api, payload); updateZ(componentModel, componentView); updateStates(componentModel, componentView); }); }; /** * Render each chart and component */ renderSeries = function(ecIns, ecModel, api, payload, updateParams, dirtyMap) { var scheduler = ecIns._scheduler; updateParams = extend(updateParams || {}, { updatedSeries: ecModel.getSeries() }); lifecycle.trigger("series:beforeupdate", ecModel, api, updateParams); var unfinished = false; ecModel.eachSeries(function(seriesModel) { var chartView = ecIns._chartsMap[seriesModel.__viewId]; chartView.__alive = true; var renderTask = chartView.renderTask; scheduler.updatePayload(renderTask, payload); clearStates(seriesModel, chartView); if (dirtyMap && dirtyMap.get(seriesModel.uid)) renderTask.dirty(); if (renderTask.perform(scheduler.getPerformArgs(renderTask))) unfinished = true; chartView.group.silent = !!seriesModel.get("silent"); updateBlend(seriesModel, chartView); updateSeriesElementSelection(seriesModel); }); scheduler.unfinished = unfinished || scheduler.unfinished; lifecycle.trigger("series:layoutlabels", ecModel, api, updateParams); lifecycle.trigger("series:transition", ecModel, api, updateParams); ecModel.eachSeries(function(seriesModel) { var chartView = ecIns._chartsMap[seriesModel.__viewId]; updateZ(seriesModel, chartView); updateStates(seriesModel, chartView); }); updateHoverLayerStatus(ecIns, ecModel); lifecycle.trigger("series:afterupdate", ecModel, api, updateParams); }; markStatusToUpdate = function(ecIns) { ecIns[STATUS_NEEDS_UPDATE_KEY] = true; ecIns.getZr().wakeUp(); }; updateECUpdateCycleVersion = function(ecIns) { ecIns[EC_UPDATE_CYCLE_VERSION_KEY] = (ecIns[EC_UPDATE_CYCLE_VERSION_KEY] + 1) % 1e6; }; applyChangedStates = function(ecIns) { if (!ecIns[STATUS_NEEDS_UPDATE_KEY]) return; ecIns.getZr().storage.traverse(function(el) { if (isElementRemoved(el)) return; applyElementStates(el); }); ecIns[STATUS_NEEDS_UPDATE_KEY] = false; }; function applyElementStates(el) { var newStates = []; var oldStates = el.currentStates; for (var i = 0; i < oldStates.length; i++) { var stateName = oldStates[i]; if (!(stateName === "emphasis" || stateName === "blur" || stateName === "select")) newStates.push(stateName); } if (el.selected && el.states.select) newStates.push("select"); if (el.hoverState === 2 && el.states.emphasis) newStates.push("emphasis"); else if (el.hoverState === 1 && el.states.blur) newStates.push("blur"); el.useStates(newStates); } function updateHoverLayerStatus(ecIns, ecModel) { var zr = ecIns._zr; if (zr.painter.type !== "canvas") return; var storage = zr.storage; var elCount = 0; storage.traverse(function(el) { if (!el.isGroup) elCount++; }); var shouldUseHoverLayer = elCount > retrieve2(ecModel.get("hoverLayerThreshold"), globalDefault_default.hoverLayerThreshold) && !env.node && !env.worker; if (ecIns._usingTHL || shouldUseHoverLayer) { ecModel.eachSeries(function(seriesModel) { if (seriesModel.preventUsingHoverLayer) return; var chartView = ecIns._chartsMap[seriesModel.__viewId]; if (chartView.__alive) chartView.eachRendered(function(el) { var emphasis = el.states.emphasis; if (emphasis && emphasis.hoverLayer !== 2) emphasis.hoverLayer = shouldUseHoverLayer ? 1 : 0; }); }); ecIns._usingTHL = shouldUseHoverLayer; } } /** * Update chart and blend. */ function updateBlend(seriesModel, chartView) { var blendMode = seriesModel.get("blendMode") || null; chartView.eachRendered(function(el) { if (!el.isGroup) el.style.blend = blendMode; }); } function updateZ(model, view) { if (model.preventAutoZ) return; var zInfo = retrieveZInfo(model); view.eachRendered(function(el) { traverseUpdateZ(el, zInfo.z, zInfo.zlevel); return true; }); } function clearStates(model, view) { view.eachRendered(function(el) { if (isElementRemoved(el)) return; var textContent = el.getTextContent(); var textGuide = el.getTextGuideLine(); if (el.stateTransition) el.stateTransition = null; if (textContent && textContent.stateTransition) textContent.stateTransition = null; if (textGuide && textGuide.stateTransition) textGuide.stateTransition = null; if (el.hasState()) { el.prevStates = el.currentStates; el.clearStates(); } else if (el.prevStates) el.prevStates = null; }); } function updateStates(model, view) { var stateAnimationModel = model.getModel("stateAnimation"); var enableAnimation = model.isAnimationEnabled(); var duration = stateAnimationModel.get("duration"); var stateTransition = duration > 0 ? { duration, delay: stateAnimationModel.get("delay"), easing: stateAnimationModel.get("easing") } : null; view.eachRendered(function(el) { if (el.states && el.states.emphasis) { if (isElementRemoved(el)) return; if (el instanceof Path) savePathStates(el); if (el.__dirty) { var prevStates = el.prevStates; if (prevStates) el.useStates(prevStates); } if (enableAnimation) { el.stateTransition = stateTransition; var textContent = el.getTextContent(); var textGuide = el.getTextGuideLine(); if (textContent) textContent.stateTransition = stateTransition; if (textGuide) textGuide.stateTransition = stateTransition; } if (el.__dirty) applyElementStates(el); } }); } createExtensionAPI = function(ecIns) { return new (function(_super) { __extends(class_1, _super); function class_1() { return _super !== null && _super.apply(this, arguments) || this; } class_1.prototype.getCoordinateSystems = function() { return ecIns._coordSysMgr.getCoordinateSystems(); }; class_1.prototype.getComponentByElement = function(el) { while (el) { var modelInfo = el.__ecComponentInfo; if (modelInfo != null) return ecIns._model.getComponent(modelInfo.mainType, modelInfo.index); el = el.parent; } }; class_1.prototype.enterEmphasis = function(el, highlightDigit) { enterEmphasis(el, highlightDigit); markStatusToUpdate(ecIns); }; class_1.prototype.leaveEmphasis = function(el, highlightDigit) { leaveEmphasis(el, highlightDigit); markStatusToUpdate(ecIns); }; class_1.prototype.enterBlur = function(el) { enterBlur(el); markStatusToUpdate(ecIns); }; class_1.prototype.leaveBlur = function(el) { leaveBlur(el); markStatusToUpdate(ecIns); }; class_1.prototype.enterSelect = function(el) { enterSelect(el); markStatusToUpdate(ecIns); }; class_1.prototype.leaveSelect = function(el) { leaveSelect(el); markStatusToUpdate(ecIns); }; class_1.prototype.getModel = function() { return ecIns.getModel(); }; class_1.prototype.getViewOfComponentModel = function(componentModel) { return ecIns.getViewOfComponentModel(componentModel); }; class_1.prototype.getViewOfSeriesModel = function(seriesModel) { return ecIns.getViewOfSeriesModel(seriesModel); }; class_1.prototype.getECUpdateCycleVersion = function() { return ecIns[EC_UPDATE_CYCLE_VERSION_KEY]; }; class_1.prototype.usingTHL = function() { return ecIns._usingTHL; }; return class_1; }(ExtensionAPI))(ecIns); }; enableConnect = function(chart) { function updateConnectedChartsStatus(charts, status) { for (var i = 0; i < charts.length; i++) { var otherChart = charts[i]; otherChart[CONNECT_STATUS_KEY] = status; } } each$12(connectionEventRevertMap, function(_, eventType) { chart._messageCenter.on(eventType, function(event) { if (connectedGroups[chart.group] && chart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_PENDING) { if (event && event.escapeConnect) return; var action_1 = chart.makeActionFromEvent(event); var otherCharts_1 = []; each$12(instances, function(otherChart) { if (otherChart !== chart && otherChart.group === chart.group) otherCharts_1.push(otherChart); }); updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_PENDING); each$12(otherCharts_1, function(otherChart) { if (otherChart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_UPDATING) otherChart.dispatchAction(action_1); }); updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_UPDATED); } }); }); }; }(); return ECharts; }(Eventful); var echartsProto = ECharts.prototype; echartsProto.on = createRegisterEventWithLowercaseECharts("on"); echartsProto.off = createRegisterEventWithLowercaseECharts("off"); /** * @deprecated */ echartsProto.one = function(eventName, cb, ctx) { var self = this; deprecateLog("ECharts#one is deprecated."); function wrapped() { var args2 = []; for (var _i = 0; _i < arguments.length; _i++) args2[_i] = arguments[_i]; cb && cb.apply && cb.apply(this, args2); self.off(eventName, wrapped); } this.on.call(this, eventName, wrapped, ctx); }; var MOUSE_EVENT_NAMES = [ "click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu" ]; function disposedWarning(id) { warn("Instance " + id + " has been disposed"); } var actions = {}; /** * Map event type to action type for reproducing action from event for `connect`. */ var connectionEventRevertMap = {}; /** * To remove duplication. */ var publicEventTypeMap = {}; var dataProcessorFuncs = []; var optionPreprocessorFuncs = []; var visualFuncs = []; var themeStorage = {}; var loadingEffects = {}; var instances = {}; var connectedGroups = {}; var idBase = +/* @__PURE__ */ new Date() - 0; var groupIdBase = +/* @__PURE__ */ new Date() - 0; var DOM_ATTRIBUTE_KEY = "_echarts_instance_"; /** * @param opts.devicePixelRatio Use window.devicePixelRatio by default * @param opts.renderer Can choose 'canvas' or 'svg' to render the chart. * @param opts.width Use clientWidth of the input `dom` by default. * Can be 'auto' (the same as null/undefined) * @param opts.height Use clientHeight of the input `dom` by default. * Can be 'auto' (the same as null/undefined) * @param opts.locale Specify the locale. * @param opts.useDirtyRect Enable dirty rectangle rendering or not. */ function init(dom, theme, opts) { var isClient = !(opts && opts.ssr); if (isClient) { if (!dom) throw new Error("Initialize failed: invalid dom."); var existInstance = getInstanceByDom(dom); if (existInstance) { warn("There is a chart instance already initialized on the dom."); return existInstance; } if (isDom(dom) && dom.nodeName.toUpperCase() !== "CANVAS" && (!dom.clientWidth && (!opts || opts.width == null) || !dom.clientHeight && (!opts || opts.height == null))) warn("Can't get DOM width or height. Please check dom.clientWidth and dom.clientHeight. They should not be 0.For example, you may need to call this in the callback of window.onload."); } var chart = new ECharts(dom, theme, opts); chart.id = "ec_" + idBase++; instances[chart.id] = chart; isClient && setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id); enableConnect(chart); lifecycle.trigger("afterinit", chart); return chart; } /** * @usage * (A) * ```js * let chart1 = echarts.init(dom1); * let chart2 = echarts.init(dom2); * chart1.group = 'xxx'; * chart2.group = 'xxx'; * echarts.connect('xxx'); * ``` * (B) * ```js * let chart1 = echarts.init(dom1); * let chart2 = echarts.init(dom2); * echarts.connect('xxx', [chart1, chart2]); * ``` */ function connect(groupId) { if (isArray$1(groupId)) { var charts = groupId; groupId = null; each$12(charts, function(chart) { if (chart.group != null) groupId = chart.group; }); groupId = groupId || "g_" + groupIdBase++; each$12(charts, function(chart) { chart.group = groupId; }); } connectedGroups[groupId] = true; return groupId; } function disconnect(groupId) { connectedGroups[groupId] = false; } /** * Alias and backward compatibility * @deprecated */ var disConnect = disconnect; /** * Dispose a chart instance */ function dispose(chart) { if (isString(chart)) chart = instances[chart]; else if (!(chart instanceof ECharts)) chart = getInstanceByDom(chart); if (chart instanceof ECharts && !chart.isDisposed()) chart.dispose(); } function getInstanceByDom(dom) { return instances[getAttribute(dom, DOM_ATTRIBUTE_KEY)]; } function getInstanceById(key) { return instances[key]; } /** * Register theme */ function registerTheme(name, theme) { themeStorage[name] = theme; } /** * Register option preprocessor */ function registerPreprocessor(preprocessorFunc) { if (indexOf(optionPreprocessorFuncs, preprocessorFunc) < 0) optionPreprocessorFuncs.push(preprocessorFunc); } /** * NOTICE: Alway run in block way (no progessive is allowed). */ function registerProcessor(priority, processor) { normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_DEFAULT); } /** * Register postIniter * @param {Function} postInitFunc */ function registerPostInit(postInitFunc) { registerUpdateLifecycle("afterinit", postInitFunc); } /** * Register postUpdater * @param {Function} postUpdateFunc */ function registerPostUpdate(postUpdateFunc) { registerUpdateLifecycle("afterupdate", postUpdateFunc); } function registerUpdateLifecycle(name, cb) { lifecycle.on(name, cb); } function registerAction(arg0, arg1, action) { var actionType; var publicEventType; var refineEvent; var update; var publishNonRefinedEvent; if (isFunction(arg1)) { action = arg1; arg1 = ""; } if (isObject$3(arg0)) { actionType = arg0.type; publicEventType = arg0.event; update = arg0.update; publishNonRefinedEvent = arg0.publishNonRefinedEvent; if (!action) action = arg0.action; refineEvent = arg0.refineEvent; } else { actionType = arg0; publicEventType = arg1; } function createEventType(actionOrEventType) { return actionOrEventType.toLowerCase(); } publicEventType = createEventType(publicEventType || actionType); var nonRefinedEventType = refineEvent ? createEventType(actionType) : publicEventType; if (actions[actionType]) return; assert(ACTION_REG.test(actionType) && ACTION_REG.test(publicEventType)); if (refineEvent) assert(publicEventType !== actionType); actions[actionType] = { actionType, refinedEventType: publicEventType, nonRefinedEventType, update, action, refineEvent }; publicEventTypeMap[publicEventType] = 1; if (refineEvent && publishNonRefinedEvent) publicEventTypeMap[nonRefinedEventType] = 1; if (connectionEventRevertMap[nonRefinedEventType]) error(nonRefinedEventType + " must not be shared; use \"refineEvent\" if you intend to share an event name."); connectionEventRevertMap[nonRefinedEventType] = actionType; } function registerCoordinateSystem(type, coordSysCreator) { CoordinateSystemManager.register(type, coordSysCreator); } /** * Get dimensions of specified coordinate system. * @param {string} type * @return {Array.} */ function getCoordinateSystemDimensions(type) { var coordSysCreator = CoordinateSystemManager.get(type); if (coordSysCreator) return coordSysCreator.getDimensionsInfo ? coordSysCreator.getDimensionsInfo() : coordSysCreator.dimensions.slice(); } function registerCustomSeries(seriesType, renderItem) { registerCustomSeries$1(seriesType, renderItem); } function registerLayout(priority, layoutTask) { normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, "layout", true); } function registerVisual(priority, visualTask) { normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, "visual", true); } var registeredTasks = []; function normalizeRegister(targetList, priority, fn, defaultPriority, visualType, checkBlock) { if (isFunction(priority) || isObject$3(priority)) { fn = priority; priority = defaultPriority; } if (isNaN(priority) || priority == null) throw new Error("Illegal priority"); each$12(targetList, function(wrap) { assert(wrap.__raw !== fn); }); if (indexOf(registeredTasks, fn) >= 0) return; registeredTasks.push(fn); var stageHandler = Scheduler.wrapStageHandler(fn, visualType); stageHandler.__prio = priority; stageHandler.__raw = fn; targetList.push(stageHandler); if (checkBlock) assert(!stageHandler.dirtyOnOverallProgress, "dirtyOnOverallProgress is not allowed in " + visualType + " stage; otherwise progressive rendering is disabled on all series."); } function registerLoading(name, loadingFx) { loadingEffects[name] = loadingFx; } /** * ZRender need a canvas context to do measureText. * But in node environment canvas may be created by node-canvas. * So we need to specify how to create a canvas instead of using document.createElement('canvas') * * * @deprecated use setPlatformAPI({ createCanvas }) instead. * * @example * let Canvas = require('canvas'); * let echarts = require('echarts'); * echarts.setCanvasCreator(function () { * // Small size is enough. * return new Canvas(32, 32); * }); */ function setCanvasCreator(creator) { deprecateLog("setCanvasCreator is deprecated. Use setPlatformAPI({ createCanvas }) instead."); setPlatformAPI({ createCanvas: creator }); } /** * The parameters and usage: see `geoSourceManager.registerMap`. * Compatible with previous `echarts.registerMap`. */ function registerMap(mapName, geoJson, specialAreas) { var registerMap = getImpl("registerMap"); registerMap && registerMap(mapName, geoJson, specialAreas); } function getMap(mapName) { var getMap = getImpl("getMap"); return getMap && getMap(mapName); } var registerTransform = registerExternalTransform; /** * Global dispatchAction to a specified chart instance. */ registerVisual(PRIORITY_VISUAL_GLOBAL, seriesStyleTask); registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataStyleTask); registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataColorPaletteTask); registerVisual(PRIORITY_VISUAL_GLOBAL, seriesSymbolTask); registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataSymbolTask); registerVisual(PRIORITY_VISUAL_DECAL, decalVisualStageHandler); registerPreprocessor(globalBackwardCompat); registerProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStackStageHandler); registerLoading("default", defaultLoading); registerAction({ type: HIGHLIGHT_ACTION_TYPE, event: HIGHLIGHT_ACTION_TYPE, update: HIGHLIGHT_ACTION_TYPE }, noop); registerAction({ type: DOWNPLAY_ACTION_TYPE, event: DOWNPLAY_ACTION_TYPE, update: DOWNPLAY_ACTION_TYPE }, noop); registerAction({ type: SELECT_ACTION_TYPE, event: SELECT_CHANGED_EVENT_TYPE, update: SELECT_ACTION_TYPE, action: noop, refineEvent: makeSelectChangedEvent, publishNonRefinedEvent: true }); registerAction({ type: UNSELECT_ACTION_TYPE, event: SELECT_CHANGED_EVENT_TYPE, update: UNSELECT_ACTION_TYPE, action: noop, refineEvent: makeSelectChangedEvent, publishNonRefinedEvent: true }); registerAction({ type: TOGGLE_SELECT_ACTION_TYPE, event: SELECT_CHANGED_EVENT_TYPE, update: TOGGLE_SELECT_ACTION_TYPE, action: noop, refineEvent: makeSelectChangedEvent, publishNonRefinedEvent: true }); function makeSelectChangedEvent(actionResultBatch, payload, ecModel, api) { return { eventContent: { selected: getAllSelectedIndices(ecModel), isFromClick: payload.isFromClick || false } }; } registerTheme("default", {}); registerTheme("dark", theme); var dataTool = {}; //#endregion //#region node_modules/echarts/lib/extension.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var extensions = []; var extensionRegisters = { registerPreprocessor, registerProcessor, registerPostInit, registerPostUpdate, registerUpdateLifecycle, registerAction, registerCoordinateSystem, registerLayout, registerVisual, registerTransform, registerLoading, registerMap, registerImpl, PRIORITY, ComponentModel, ComponentView, SeriesModel, ChartView, registerComponentModel: function(ComponentModelClass) { ComponentModel.registerClass(ComponentModelClass); }, registerComponentView: function(ComponentViewClass) { ComponentView.registerClass(ComponentViewClass); }, registerSeriesModel: function(SeriesModelClass) { SeriesModel.registerClass(SeriesModelClass); }, registerChartView: function(ChartViewClass) { ChartView.registerClass(ChartViewClass); }, registerCustomSeries: function(seriesType, renderItem) { registerCustomSeries$1(seriesType, renderItem); }, registerSubTypeDefaulter: function(componentType, defaulter) { ComponentModel.registerSubTypeDefaulter(componentType, defaulter); }, registerPainter: function(painterType, PainterCtor) { registerPainter(painterType, PainterCtor); } }; function use(ext) { if (isArray$1(ext)) { each$12(ext, function(singleExt) { use(singleExt); }); return; } if (indexOf(extensions, ext) >= 0) return; extensions.push(ext); if (isFunction(ext)) ext = { install: ext }; ext.install(extensionRegisters); } //#endregion //#region node_modules/echarts/lib/data/DataDiffer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataIndexMapValueLength(valNumOrArrLengthMoreThan2) { return valNumOrArrLengthMoreThan2 == null ? 0 : valNumOrArrLengthMoreThan2.length || 1; } function defaultKeyGetter(item) { return item; } var DataDiffer = function() { /** * @param context Can be visited by this.context in callback. */ function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context, diffMode) { this._old = oldArr; this._new = newArr; this._oldKeyGetter = oldKeyGetter || defaultKeyGetter; this._newKeyGetter = newKeyGetter || defaultKeyGetter; this.context = context; this._diffModeMultiple = diffMode === "multiple"; } /** * Callback function when add a data */ DataDiffer.prototype.add = function(func) { this._add = func; return this; }; /** * Callback function when update a data */ DataDiffer.prototype.update = function(func) { this._update = func; return this; }; /** * Callback function when update a data and only work in `cbMode: 'byKey'`. */ DataDiffer.prototype.updateManyToOne = function(func) { this._updateManyToOne = func; return this; }; /** * Callback function when update a data and only work in `cbMode: 'byKey'`. */ DataDiffer.prototype.updateOneToMany = function(func) { this._updateOneToMany = func; return this; }; /** * Callback function when update a data and only work in `cbMode: 'byKey'`. */ DataDiffer.prototype.updateManyToMany = function(func) { this._updateManyToMany = func; return this; }; /** * Callback function when remove a data */ DataDiffer.prototype.remove = function(func) { this._remove = func; return this; }; DataDiffer.prototype.execute = function() { this[this._diffModeMultiple ? "_executeMultiple" : "_executeOneToOne"](); }; DataDiffer.prototype._executeOneToOne = function() { var oldArr = this._old; var newArr = this._new; var newDataIndexMap = {}; var oldDataKeyArr = new Array(oldArr.length); var newDataKeyArr = new Array(newArr.length); this._initIndexMap(oldArr, null, oldDataKeyArr, "_oldKeyGetter"); this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, "_newKeyGetter"); for (var i = 0; i < oldArr.length; i++) { var oldKey = oldDataKeyArr[i]; var newIdxMapVal = newDataIndexMap[oldKey]; var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal); if (newIdxMapValLen > 1) { var newIdx = newIdxMapVal.shift(); if (newIdxMapVal.length === 1) newDataIndexMap[oldKey] = newIdxMapVal[0]; this._update && this._update(newIdx, i); } else if (newIdxMapValLen === 1) { newDataIndexMap[oldKey] = null; this._update && this._update(newIdxMapVal, i); } else this._remove && this._remove(i); } this._performRestAdd(newDataKeyArr, newDataIndexMap); }; /** * For example, consider the case: * oldData: [o0, o1, o2, o3, o4, o5, o6, o7], * newData: [n0, n1, n2, n3, n4, n5, n6, n7, n8], * Where: * o0, o1, n0 has key 'a' (many to one) * o5, n4, n5, n6 has key 'b' (one to many) * o2, n1 has key 'c' (one to one) * n2, n3 has key 'd' (add) * o3, o4 has key 'e' (remove) * o6, o7, n7, n8 has key 'f' (many to many, treated as add and remove) * Then: * (The order of the following directives are not ensured.) * this._updateManyToOne(n0, [o0, o1]); * this._updateOneToMany([n4, n5, n6], o5); * this._update(n1, o2); * this._remove(o3); * this._remove(o4); * this._remove(o6); * this._remove(o7); * this._add(n2); * this._add(n3); * this._add(n7); * this._add(n8); */ DataDiffer.prototype._executeMultiple = function() { var oldArr = this._old; var newArr = this._new; var oldDataIndexMap = {}; var newDataIndexMap = {}; var oldDataKeyArr = []; var newDataKeyArr = []; this._initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, "_oldKeyGetter"); this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, "_newKeyGetter"); for (var i = 0; i < oldDataKeyArr.length; i++) { var oldKey = oldDataKeyArr[i]; var oldIdxMapVal = oldDataIndexMap[oldKey]; var newIdxMapVal = newDataIndexMap[oldKey]; var oldIdxMapValLen = dataIndexMapValueLength(oldIdxMapVal); var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal); if (oldIdxMapValLen > 1 && newIdxMapValLen === 1) { this._updateManyToOne && this._updateManyToOne(newIdxMapVal, oldIdxMapVal); newDataIndexMap[oldKey] = null; } else if (oldIdxMapValLen === 1 && newIdxMapValLen > 1) { this._updateOneToMany && this._updateOneToMany(newIdxMapVal, oldIdxMapVal); newDataIndexMap[oldKey] = null; } else if (oldIdxMapValLen === 1 && newIdxMapValLen === 1) { this._update && this._update(newIdxMapVal, oldIdxMapVal); newDataIndexMap[oldKey] = null; } else if (oldIdxMapValLen > 1 && newIdxMapValLen > 1) { this._updateManyToMany && this._updateManyToMany(newIdxMapVal, oldIdxMapVal); newDataIndexMap[oldKey] = null; } else if (oldIdxMapValLen > 1) for (var i_1 = 0; i_1 < oldIdxMapValLen; i_1++) this._remove && this._remove(oldIdxMapVal[i_1]); else this._remove && this._remove(oldIdxMapVal); } this._performRestAdd(newDataKeyArr, newDataIndexMap); }; DataDiffer.prototype._performRestAdd = function(newDataKeyArr, newDataIndexMap) { for (var i = 0; i < newDataKeyArr.length; i++) { var newKey = newDataKeyArr[i]; var newIdxMapVal = newDataIndexMap[newKey]; var idxMapValLen = dataIndexMapValueLength(newIdxMapVal); if (idxMapValLen > 1) for (var j = 0; j < idxMapValLen; j++) this._add && this._add(newIdxMapVal[j]); else if (idxMapValLen === 1) this._add && this._add(newIdxMapVal); newDataIndexMap[newKey] = null; } }; DataDiffer.prototype._initIndexMap = function(arr, map, keyArr, keyGetterName) { var cbModeMultiple = this._diffModeMultiple; for (var i = 0; i < arr.length; i++) { var key = "_ec_" + this[keyGetterName](arr[i], i); if (!cbModeMultiple) keyArr[i] = key; if (!map) continue; var idxMapVal = map[key]; var idxMapValLen = dataIndexMapValueLength(idxMapVal); if (idxMapValLen === 0) { map[key] = i; if (cbModeMultiple) keyArr.push(key); } else if (idxMapValLen === 1) map[key] = [idxMapVal, i]; else idxMapVal.push(i); } }; return DataDiffer; }(); //#endregion //#region node_modules/echarts/lib/data/helper/dimensionHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DimensionUserOuput = function() { function DimensionUserOuput(encode, dimRequest) { this._encode = encode; this._schema = dimRequest; } DimensionUserOuput.prototype.get = function() { return { fullDimensions: this._getFullDimensionNames(), encode: this._encode }; }; /** * Get all data store dimension names. * Theoretically a series data store is defined both by series and used dataset (if any). * If some dimensions are omitted for performance reason in `this.dimensions`, * the dimension name may not be auto-generated if user does not specify a dimension name. * In this case, the dimension name is `null`/`undefined`. */ DimensionUserOuput.prototype._getFullDimensionNames = function() { if (!this._cachedDimNames) this._cachedDimNames = this._schema ? this._schema.makeOutputDimensionNames() : []; return this._cachedDimNames; }; return DimensionUserOuput; }(); function summarizeDimensions(data, schema) { var summary = {}; var encode = summary.encode = {}; var notExtraCoordDimMap = createHashMap(); var defaultedLabel = []; var defaultedTooltip = []; var userOutputEncode = {}; each$12(data.dimensions, function(dimName) { var dimItem = data.getDimensionInfo(dimName); var coordDim = dimItem.coordDim; if (coordDim) { assert(VISUAL_DIMENSIONS.get(coordDim) == null); var coordDimIndex = dimItem.coordDimIndex; getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName; if (!dimItem.isExtraCoord) { notExtraCoordDimMap.set(coordDim, 1); if (mayLabelDimType(dimItem.type)) defaultedLabel[0] = dimName; getOrCreateEncodeArr(userOutputEncode, coordDim)[coordDimIndex] = data.getDimensionIndex(dimItem.name); } if (dimItem.defaultTooltip) defaultedTooltip.push(dimName); } VISUAL_DIMENSIONS.each(function(v, otherDim) { var encodeArr = getOrCreateEncodeArr(encode, otherDim); var dimIndex = dimItem.otherDims[otherDim]; if (dimIndex != null && dimIndex !== false) encodeArr[dimIndex] = dimItem.name; }); }); var dataDimsOnCoord = []; var encodeFirstDimNotExtra = {}; notExtraCoordDimMap.each(function(v, coordDim) { var dimArr = encode[coordDim]; encodeFirstDimNotExtra[coordDim] = dimArr[0]; dataDimsOnCoord = dataDimsOnCoord.concat(dimArr); }); summary.dataDimsOnCoord = dataDimsOnCoord; summary.dataDimIndicesOnCoord = map$1(dataDimsOnCoord, function(dimName) { return data.getDimensionInfo(dimName).storeDimIndex; }); summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra; var encodeLabel = encode.label; if (encodeLabel && encodeLabel.length) defaultedLabel = encodeLabel.slice(); var encodeTooltip = encode.tooltip; if (encodeTooltip && encodeTooltip.length) defaultedTooltip = encodeTooltip.slice(); else if (!defaultedTooltip.length) defaultedTooltip = defaultedLabel.slice(); encode.defaultedLabel = defaultedLabel; encode.defaultedTooltip = defaultedTooltip; summary.userOutput = new DimensionUserOuput(userOutputEncode, schema); return summary; } function getOrCreateEncodeArr(encode, dim) { if (!encode.hasOwnProperty(dim)) encode[dim] = []; return encode[dim]; } function getDimensionTypeByAxis(axisType) { return axisType === "category" ? "ordinal" : axisType === "time" ? "time" : "float"; } function mayLabelDimType(dimType) { return !(dimType === "ordinal" || dimType === "time"); } //#endregion //#region node_modules/echarts/lib/data/SeriesDimensionDefine.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SeriesDimensionDefine = function() { /** * @param opt All of the fields will be shallow copied. */ function SeriesDimensionDefine(opt) { /** * The term "other" means "other than coord". * The format of `otherDims` is: * ```js * { * tooltip?: number * label?: number * itemName?: number * seriesName?: number * } * ``` * * A `series.encode` can specified these fields: * ```js * encode: { * // "3, 1, 5" is the index of data dimension. * tooltip: [3, 1, 5], * label: [0, 3], * ... * } * ``` * `otherDims` is the parse result of the `series.encode` above, like: * ```js * // Suppose the index of this data dimension is `3`. * this.otherDims = { * // `3` is at the index `0` of the `encode.tooltip` * tooltip: 0, * // `3` is at the index `1` of the `encode.label` * label: 1 * }; * ``` * * This prop should never be `null`/`undefined` after initialized. */ this.otherDims = {}; if (opt != null) extend(this, opt); } return SeriesDimensionDefine; }(); //#endregion //#region node_modules/echarts/lib/data/helper/SeriesDataSchema.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$19 = makeInner(); var dimTypeShort = { float: "f", int: "i", ordinal: "o", number: "n", time: "t" }; /** * Represents the dimension requirement of a series. * * NOTICE: * When there are too many dimensions in dataset and many series, only the used dimensions * (i.e., used by coord sys and declared in `series.encode`) are add to `dimensionDefineList`. * But users may query data by other unused dimension names. * In this case, users can only query data if and only if they have defined dimension names * via ec option, so we provide `getDimensionIndexFromSource`, which only query them from * `source` dimensions. */ var SeriesDataSchema = function() { function SeriesDataSchema(opt) { this.dimensions = opt.dimensions; this._dimOmitted = opt.dimensionOmitted; this.source = opt.source; this._fullDimCount = opt.fullDimensionCount; this._updateDimOmitted(opt.dimensionOmitted); } SeriesDataSchema.prototype.isDimensionOmitted = function() { return this._dimOmitted; }; SeriesDataSchema.prototype._updateDimOmitted = function(dimensionOmitted) { this._dimOmitted = dimensionOmitted; if (!dimensionOmitted) return; if (!this._dimNameMap) this._dimNameMap = ensureSourceDimNameMap(this.source); }; /** * @caution Can only be used when `dimensionOmitted: true`. * * Get index by user defined dimension name (i.e., not internal generate name). * That is, get index from `dimensionsDefine`. * If no `dimensionsDefine`, or no name get, return -1. */ SeriesDataSchema.prototype.getSourceDimensionIndex = function(dimName) { return retrieve2(this._dimNameMap.get(dimName), -1); }; /** * @caution Can only be used when `dimensionOmitted: true`. * * Notice: may return `null`/`undefined` if user not specify dimension names. */ SeriesDataSchema.prototype.getSourceDimension = function(dimIndex) { var dimensionsDefine = this.source.dimensionsDefine; if (dimensionsDefine) return dimensionsDefine[dimIndex]; }; SeriesDataSchema.prototype.makeStoreSchema = function() { var dimCount = this._fullDimCount; var willRetrieveDataByName = shouldRetrieveDataByName(this.source); var makeHashStrict = !shouldOmitUnusedDimensions(dimCount); var dimHash = ""; var dims = []; for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < dimCount; fullDimIdx++) { var property = void 0; var type = void 0; var ordinalMeta = void 0; var seriesDimDef = this.dimensions[seriesDimIdx]; if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) { property = willRetrieveDataByName ? seriesDimDef.name : null; type = seriesDimDef.type; ordinalMeta = seriesDimDef.ordinalMeta; seriesDimIdx++; } else { var sourceDimDef = this.getSourceDimension(fullDimIdx); if (sourceDimDef) { property = willRetrieveDataByName ? sourceDimDef.name : null; type = sourceDimDef.type; } } dims.push({ property, type, ordinalMeta }); if (willRetrieveDataByName && property != null && (!seriesDimDef || !seriesDimDef.isCalculationCoord)) dimHash += makeHashStrict ? property.replace(/\`/g, "`1").replace(/\$/g, "`2") : property; dimHash += "$"; dimHash += dimTypeShort[type] || "f"; if (ordinalMeta) dimHash += ordinalMeta.uid; dimHash += "$"; } var source = this.source; return { dimensions: dims, hash: [ source.seriesLayoutBy, source.startIndex, dimHash ].join("$$") }; }; SeriesDataSchema.prototype.makeOutputDimensionNames = function() { var result = []; for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < this._fullDimCount; fullDimIdx++) { var name_1 = void 0; var seriesDimDef = this.dimensions[seriesDimIdx]; if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) { if (!seriesDimDef.isCalculationCoord) name_1 = seriesDimDef.name; seriesDimIdx++; } else { var sourceDimDef = this.getSourceDimension(fullDimIdx); if (sourceDimDef) name_1 = sourceDimDef.name; } result.push(name_1); } return result; }; SeriesDataSchema.prototype.appendCalculationDimension = function(dimDef) { this.dimensions.push(dimDef); dimDef.isCalculationCoord = true; this._fullDimCount++; this._updateDimOmitted(true); }; return SeriesDataSchema; }(); function isSeriesDataSchema(schema) { return schema instanceof SeriesDataSchema; } function createDimNameMap(dimsDef) { var dataDimNameMap = createHashMap(); for (var i = 0; i < (dimsDef || []).length; i++) { var dimDefItemRaw = dimsDef[i]; var userDimName = isObject$3(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw; if (userDimName != null && dataDimNameMap.get(userDimName) == null) dataDimNameMap.set(userDimName, i); } return dataDimNameMap; } function ensureSourceDimNameMap(source) { var innerSource = inner$19(source); return innerSource.dimNameMap || (innerSource.dimNameMap = createDimNameMap(source.dimensionsDefine)); } function shouldOmitUnusedDimensions(dimCount) { return dimCount > 30; } //#endregion //#region node_modules/echarts/lib/data/SeriesData.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var isObject$1 = isObject$3; var map = map$1; var CtorInt32Array = typeof Int32Array === "undefined" ? Array : Int32Array; var ID_PREFIX = "e\0\0"; var INDEX_NOT_FOUND = -1; var TRANSFERABLE_PROPERTIES = [ "hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_dimSummary", "userOutput", "_rawData", "_dimValueGetter", "_nameDimIdx", "_idDimIdx", "_nameRepeatCount" ]; var CLONE_PROPERTIES = ["_approximateExtent"]; var prepareInvertedIndex; var getId; var getIdNameFromStore; var normalizeDimensions; var transferProperties; var cloneListForMapAndSample; var makeIdFromName; var SeriesData = function() { /** * @param dimensionsInput.dimensions * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...]. * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius */ function SeriesData(dimensionsInput, hostModel) { this.type = "list"; this._dimOmitted = false; this._nameList = []; this._idList = []; this._visual = {}; this._layout = {}; this._itemVisuals = []; this._itemLayouts = []; this._graphicEls = []; this._approximateExtent = {}; this._calculationInfo = {}; this.hasItemOption = false; this.TRANSFERABLE_METHODS = [ "cloneShallow", "downSample", "minmaxDownSample", "lttbDownSample", "map" ]; this.CHANGABLE_METHODS = ["filterSelf", "selectRange"]; this.DOWNSAMPLE_METHODS = [ "downSample", "minmaxDownSample", "lttbDownSample" ]; var dimensions; var assignStoreDimIdx = false; if (isSeriesDataSchema(dimensionsInput)) { dimensions = dimensionsInput.dimensions; this._dimOmitted = dimensionsInput.isDimensionOmitted(); this._schema = dimensionsInput; } else { assignStoreDimIdx = true; dimensions = dimensionsInput; } dimensions = dimensions || ["x", "y"]; var dimensionInfos = {}; var dimensionNames = []; var invertedIndicesMap = {}; var needsHasOwn = false; var emptyObj = {}; for (var i = 0; i < dimensions.length; i++) { var dimInfoInput = dimensions[i]; var dimensionInfo = isString(dimInfoInput) ? new SeriesDimensionDefine({ name: dimInfoInput }) : !(dimInfoInput instanceof SeriesDimensionDefine) ? new SeriesDimensionDefine(dimInfoInput) : dimInfoInput; var dimensionName = dimensionInfo.name; dimensionInfo.type = dimensionInfo.type || "float"; if (!dimensionInfo.coordDim) { dimensionInfo.coordDim = dimensionName; dimensionInfo.coordDimIndex = 0; } var otherDims = dimensionInfo.otherDims = dimensionInfo.otherDims || {}; dimensionNames.push(dimensionName); dimensionInfos[dimensionName] = dimensionInfo; if (emptyObj[dimensionName] != null) needsHasOwn = true; if (dimensionInfo.createInvertedIndices) invertedIndicesMap[dimensionName] = []; assert(assignStoreDimIdx || dimensionInfo.storeDimIndex >= 0); if (assignStoreDimIdx) dimensionInfo.storeDimIndex = i; if (otherDims.itemName === 0) this._nameDimIdx = dimensionInfo.storeDimIndex; if (otherDims.itemId === 0) this._idDimIdx = dimensionInfo.storeDimIndex; } this.dimensions = dimensionNames; this._dimInfos = dimensionInfos; this._initGetDimensionInfo(needsHasOwn); this.hostModel = hostModel; this._invertedIndicesMap = invertedIndicesMap; if (this._dimOmitted) { var dimIdxToName_1 = this._dimIdxToName = createHashMap(); each$12(dimensionNames, function(dimName) { dimIdxToName_1.set(dimensionInfos[dimName].storeDimIndex, dimName); }); } } /** * * Get concrete dimension name by dimension name or dimension index. * If input a dimension name, do not validate whether the dimension name exits. * * @caution * @param dim Must make sure the dimension is `SeriesDimensionLoose`. * Because only those dimensions will have auto-generated dimension names if not * have a user-specified name, and other dimensions will get a return of null/undefined. * * @notice Because of this reason, should better use `getDimensionIndex` instead, for examples: * ```js * const val = data.getStore().get(data.getDimensionIndex(dim), dataIdx); * ``` * * @return Concrete dim name. */ SeriesData.prototype.getDimension = function(dim) { var dimIdx = this._recognizeDimIndex(dim); if (dimIdx == null) return dim; dimIdx = dim; if (!this._dimOmitted) return this.dimensions[dimIdx]; var dimName = this._dimIdxToName.get(dimIdx); if (dimName != null) return dimName; var sourceDimDef = this._schema.getSourceDimension(dimIdx); if (sourceDimDef) return sourceDimDef.name; }; /** * Get dimension index in data store. Return -1 if not found. * Can be used to index value from getRawValue. */ SeriesData.prototype.getDimensionIndex = function(dim) { var dimIdx = this._recognizeDimIndex(dim); if (dimIdx != null) return dimIdx; if (dim == null) return -1; var dimInfo = this._getDimInfo(dim); return dimInfo ? dimInfo.storeDimIndex : this._dimOmitted ? this._schema.getSourceDimensionIndex(dim) : -1; }; /** * The meanings of the input parameter `dim`: * * + If dim is a number (e.g., `1`), it means the index of the dimension. * For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'. * + If dim is a number-like string (e.g., `"1"`): * + If there is the same concrete dim name defined in `series.dimensions` or `dataset.dimensions`, * it means that concrete name. * + If not, it will be converted to a number, which means the index of the dimension. * (why? because of the backward compatibility. We have been tolerating number-like string in * dimension setting, although now it seems that it is not a good idea.) * For example, `visualMap[i].dimension: "1"` is the same meaning as `visualMap[i].dimension: 1`, * if no dimension name is defined as `"1"`. * + If dim is a not-number-like string, it means the concrete dim name. * For example, it can be be default name `"x"`, `"y"`, `"z"`, `"lng"`, `"lat"`, `"angle"`, `"radius"`, * or customized in `dimensions` property of option like `"age"`. * * @return recognized `DimensionIndex`. Otherwise return null/undefined (means that dim is `DimensionName`). */ SeriesData.prototype._recognizeDimIndex = function(dim) { if (isNumber(dim) || dim != null && !isNaN(dim) && !this._getDimInfo(dim) && (!this._dimOmitted || this._schema.getSourceDimensionIndex(dim) < 0)) return +dim; }; SeriesData.prototype._getStoreDimIndex = function(dim) { var dimIdx = this.getDimensionIndex(dim); if (dimIdx == null) throw new Error("Unknown dimension " + dim); return dimIdx; }; /** * Get type and calculation info of particular dimension * @param dim * Dimension can be concrete names like x, y, z, lng, lat, angle, radius * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' */ SeriesData.prototype.getDimensionInfo = function(dim) { return this._getDimInfo(this.getDimension(dim)); }; SeriesData.prototype._initGetDimensionInfo = function(needsHasOwn) { var dimensionInfos = this._dimInfos; this._getDimInfo = needsHasOwn ? function(dimName) { return dimensionInfos.hasOwnProperty(dimName) ? dimensionInfos[dimName] : void 0; } : function(dimName) { return dimensionInfos[dimName]; }; }; /** * concrete dimension name list on coord. */ SeriesData.prototype.getDimensionsOnCoord = function() { return this._dimSummary.dataDimsOnCoord.slice(); }; SeriesData.prototype.mapDimension = function(coordDim, idx) { var dimensionsSummary = this._dimSummary; if (idx == null) return dimensionsSummary.encodeFirstDimNotExtra[coordDim]; var dims = dimensionsSummary.encode[coordDim]; return dims ? dims[idx] : null; }; SeriesData.prototype.mapDimensionsAll = function(coordDim) { return (this._dimSummary.encode[coordDim] || []).slice(); }; SeriesData.prototype.getStore = function() { return this._store; }; /** * Initialize from data * @param data source or data or data store. * @param nameList The name of a datum is used on data diff and * default label/tooltip. * A name can be specified in encode.itemName, * or dataItem.name (only for series option data), * or provided in nameList from outside. */ SeriesData.prototype.initData = function(data, nameList, dimValueGetter) { var _this = this; var store; if (data instanceof DataStore) store = data; if (!store) { var dimensions = this.dimensions; var provider = isSourceInstance(data) || isArrayLike(data) ? new DefaultDataProvider(data, dimensions.length) : data; store = new DataStore(); var dimensionInfos = map(dimensions, function(dimName) { return { type: _this._dimInfos[dimName].type, property: dimName }; }); store.initData(provider, dimensionInfos, dimValueGetter); } this._store = store; this._nameList = (nameList || []).slice(); this._idList = []; this._nameRepeatCount = {}; this._doInit(0, store.count()); this._dimSummary = summarizeDimensions(this, this._schema); this.userOutput = this._dimSummary.userOutput; }; /** * Caution: Can be only called on raw data (before `this._indices` created). */ SeriesData.prototype.appendData = function(data) { var range = this._store.appendData(data); this._doInit(range[0], range[1]); }; /** * Caution: Can be only called on raw data (before `this._indices` created). * This method does not modify `rawData` (`dataProvider`), but only * add values to store. * * The final count will be increased by `Math.max(values.length, names.length)`. * * @param values That is the SourceType: 'arrayRows', like * [ * [12, 33, 44], * [NaN, 43, 1], * ['-', 'asdf', 0] * ] * Each item is exactly corresponding to a dimension. */ SeriesData.prototype.appendValues = function(values, names) { var _a = this._store.appendValues(values, names && names.length), start = _a.start, end = _a.end; var shouldMakeIdFromName = this._shouldMakeIdFromName(); this._updateOrdinalMeta(); if (names) for (var idx = start; idx < end; idx++) { var sourceIdx = idx - start; this._nameList[idx] = names[sourceIdx]; if (shouldMakeIdFromName) makeIdFromName(this, idx); } }; SeriesData.prototype._updateOrdinalMeta = function() { var store = this._store; var dimensions = this.dimensions; for (var i = 0; i < dimensions.length; i++) { var dimInfo = this._dimInfos[dimensions[i]]; if (dimInfo.ordinalMeta) store.collectOrdinalMeta(dimInfo.storeDimIndex, dimInfo.ordinalMeta); } }; SeriesData.prototype._shouldMakeIdFromName = function() { var provider = this._store.getProvider(); return this._idDimIdx == null && provider.getSource().sourceFormat !== "typedArray" && !provider.fillStorage; }; SeriesData.prototype._doInit = function(start, end) { if (start >= end) return; var provider = this._store.getProvider(); this._updateOrdinalMeta(); var nameList = this._nameList; var idList = this._idList; if (provider.getSource().sourceFormat === "original" && !provider.pure) { var sharedDataItem = []; for (var idx = start; idx < end; idx++) { var dataItem = provider.getItem(idx, sharedDataItem); if (!this.hasItemOption && isDataItemOption(dataItem)) this.hasItemOption = true; if (dataItem) { var itemName = dataItem.name; if (nameList[idx] == null && itemName != null) nameList[idx] = convertOptionIdName(itemName, null); var itemId = dataItem.id; if (idList[idx] == null && itemId != null) idList[idx] = convertOptionIdName(itemId, null); } } } if (this._shouldMakeIdFromName()) for (var idx = start; idx < end; idx++) makeIdFromName(this, idx); prepareInvertedIndex(this); }; /** * Optimize for the scenario that data is filtered by a given extent. * Consider that if data amount is more than hundreds of thousand, * extent calculation will cost more than 10ms and the cache will * be erased because of the filtering. */ SeriesData.prototype.getApproximateExtent = function(dim, filter) { return this._approximateExtent[dim] || this._store.getDataExtent(this._getStoreDimIndex(dim), filter); }; /** * NOTICE: `_approximateExtent` does not support filter. Callers must ensure the input extent * to be handled by `scale.sanitizeExtent`. * * Calculate extent on a filtered data might be time consuming. * Approximate extent is only used for: calculate extent of filtered data outside. */ SeriesData.prototype.setApproximateExtent = function(extent, dim) { dim = this.getDimension(dim); this._approximateExtent[dim] = extent.slice(); }; SeriesData.prototype.getCalculationInfo = function(key) { return this._calculationInfo[key]; }; SeriesData.prototype.setCalculationInfo = function(key, value) { isObject$1(key) ? extend(this._calculationInfo, key) : this._calculationInfo[key] = value; }; /** * @return Never be null/undefined. `number` will be converted to string. Because: * In most cases, name is used in display, where returning a string is more convenient. * In other cases, name is used in query (see `indexOfName`), where we can keep the * rule that name `2` equals to name `'2'`. */ SeriesData.prototype.getName = function(idx) { var rawIndex = this.getRawIndex(idx); var name = this._nameList[rawIndex]; if (name == null && this._nameDimIdx != null) name = getIdNameFromStore(this, this._nameDimIdx, rawIndex); if (name == null) name = ""; return name; }; SeriesData.prototype._getCategory = function(dimIdx, idx) { var ordinal = this._store.get(dimIdx, idx); var ordinalMeta = this._store.getOrdinalMeta(dimIdx); if (ordinalMeta) return ordinalMeta.categories[ordinal]; return ordinal; }; /** * @return Never null/undefined. `number` will be converted to string. Because: * In all cases having encountered at present, id is used in making diff comparison, which * are usually based on hash map. We can keep the rule that the internal id are always string * (treat `2` is the same as `'2'`) to make the related logic simple. */ SeriesData.prototype.getId = function(idx) { return getId(this, this.getRawIndex(idx)); }; SeriesData.prototype.count = function() { return this._store.count(); }; /** * Get value. Return NaN if idx is out of range. * * @notice Should better to use `data.getStore().get(dimIndex, dataIdx)` instead. */ SeriesData.prototype.get = function(dim, idx) { var store = this._store; var dimInfo = this._dimInfos[dim]; if (dimInfo) return store.get(dimInfo.storeDimIndex, idx); }; /** * @notice Should better to use `data.getStore().getByRawIndex(dimIndex, dataIdx)` instead. */ SeriesData.prototype.getByRawIndex = function(dim, rawIdx) { var store = this._store; var dimInfo = this._dimInfos[dim]; if (dimInfo) return store.getByRawIndex(dimInfo.storeDimIndex, rawIdx); }; SeriesData.prototype.getIndices = function() { return this._store.getIndices(); }; SeriesData.prototype.getDataExtent = function(dim) { return this._store.getDataExtent(this._getStoreDimIndex(dim), null); }; SeriesData.prototype.getSum = function(dim) { return this._store.getSum(this._getStoreDimIndex(dim)); }; SeriesData.prototype.getMedian = function(dim) { return this._store.getMedian(this._getStoreDimIndex(dim)); }; SeriesData.prototype.getValues = function(dimensions, idx) { var _this = this; var store = this._store; return isArray$1(dimensions) ? store.getValues(map(dimensions, function(dim) { return _this._getStoreDimIndex(dim); }), idx) : store.getValues(dimensions); }; /** * If value is NaN. Including '-' * Only check the coord dimensions. */ SeriesData.prototype.hasValue = function(idx) { var dataDimIndicesOnCoord = this._dimSummary.dataDimIndicesOnCoord; for (var i = 0, len = dataDimIndicesOnCoord.length; i < len; i++) if (isNaN(this._store.get(dataDimIndicesOnCoord[i], idx))) return false; return true; }; /** * Retrieve the index with given name */ SeriesData.prototype.indexOfName = function(name) { for (var i = 0, len = this._store.count(); i < len; i++) if (this.getName(i) === name) return i; return -1; }; SeriesData.prototype.getRawIndex = function(idx) { return this._store.getRawIndex(idx); }; SeriesData.prototype.indexOfRawIndex = function(rawIndex) { return this._store.indexOfRawIndex(rawIndex); }; /** * Only support the dimension which inverted index created. * Do not support other cases until required. * @param dim concrete dim * @param value ordinal index * @return rawIndex */ SeriesData.prototype.rawIndexOf = function(dim, value) { var invertedIndices = dim && this._invertedIndicesMap[dim]; if (!invertedIndices) throw new Error("Do not supported yet"); var rawIndex = invertedIndices && invertedIndices[value]; if (rawIndex == null || isNaN(rawIndex)) return INDEX_NOT_FOUND; return rawIndex; }; SeriesData.prototype.each = function(dims, cb, ctx) { "use strict"; if (isFunction(dims)) { ctx = cb; cb = dims; dims = []; } var fCtx = ctx || this; var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this); this._store.each(dimIndices, fCtx ? bind$1(cb, fCtx) : cb); }; SeriesData.prototype.filterSelf = function(dims, cb, ctx) { "use strict"; if (isFunction(dims)) { ctx = cb; cb = dims; dims = []; } var fCtx = ctx || this; var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this); this._store = this._store.filter(dimIndices, fCtx ? bind$1(cb, fCtx) : cb); return this; }; /** * Select data in range. (For optimization of filter) * (Manually inline code, support 5 million data filtering in data zoom.) */ SeriesData.prototype.selectRange = function(range) { "use strict"; var _this = this; var innerRange = {}; var dims = keys(range); var dimIndices = []; each$12(dims, function(dim) { var dimIdx = _this._getStoreDimIndex(dim); innerRange[dimIdx] = range[dim]; dimIndices.push(dimIdx); }); this._store = this._store.selectRange(innerRange); return this; }; SeriesData.prototype.mapArray = function(dims, cb, ctx) { "use strict"; if (isFunction(dims)) { ctx = cb; cb = dims; dims = []; } ctx = ctx || this; var result = []; this.each(dims, function() { result.push(cb && cb.apply(this, arguments)); }, ctx); return result; }; SeriesData.prototype.map = function(dims, cb, ctx, ctxCompat) { "use strict"; var fCtx = ctx || ctxCompat || this; var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this); var list = cloneListForMapAndSample(this); list._store = this._store.map(dimIndices, fCtx ? bind$1(cb, fCtx) : cb); return list; }; SeriesData.prototype.modify = function(dims, cb, ctx, ctxCompat) { var _this = this; var fCtx = ctx || ctxCompat || this; each$12(normalizeDimensions(dims), function(dim) { if (!_this.getDimensionInfo(dim).isCalculationCoord) console.error("Danger: only stack dimension can be modified"); }); var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this); this._store.modify(dimIndices, fCtx ? bind$1(cb, fCtx) : cb); }; /** * Large data down sampling on given dimension * @param sampleIndex Sample index for name and id */ SeriesData.prototype.downSample = function(dimension, rate, sampleValue, sampleIndex) { var list = cloneListForMapAndSample(this); list._store = this._store.downSample(this._getStoreDimIndex(dimension), rate, sampleValue, sampleIndex); return list; }; /** * Large data down sampling using min-max * @param {string} valueDimension * @param {number} rate */ SeriesData.prototype.minmaxDownSample = function(valueDimension, rate) { var list = cloneListForMapAndSample(this); list._store = this._store.minmaxDownSample(this._getStoreDimIndex(valueDimension), rate); return list; }; /** * Large data down sampling using largest-triangle-three-buckets * @param {string} valueDimension * @param {number} targetCount */ SeriesData.prototype.lttbDownSample = function(valueDimension, rate) { var list = cloneListForMapAndSample(this); list._store = this._store.lttbDownSample(this._getStoreDimIndex(valueDimension), rate); return list; }; SeriesData.prototype.getRawDataItem = function(idx) { return this._store.getRawDataItem(idx); }; /** * Get model of one data item. */ SeriesData.prototype.getItemModel = function(idx) { var hostModel = this.hostModel; return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel); }; /** * Create a data differ */ SeriesData.prototype.diff = function(otherList) { var thisList = this; return new DataDiffer(otherList ? otherList.getStore().getIndices() : [], this.getStore().getIndices(), function(idx) { return getId(otherList, idx); }, function(idx) { return getId(thisList, idx); }); }; /** * Get visual property. */ SeriesData.prototype.getVisual = function(key) { var visual = this._visual; return visual && visual[key]; }; SeriesData.prototype.setVisual = function(kvObj, val) { this._visual = this._visual || {}; if (isObject$1(kvObj)) extend(this._visual, kvObj); else this._visual[kvObj] = val; }; /** * Get visual property of single data item */ SeriesData.prototype.getItemVisual = function(idx, key) { var itemVisual = this._itemVisuals[idx]; var val = itemVisual && itemVisual[key]; if (val == null) return this.getVisual(key); return val; }; /** * If exists visual property of single data item */ SeriesData.prototype.hasItemVisual = function() { return this._itemVisuals.length > 0; }; /** * Make sure itemVisual property is unique */ SeriesData.prototype.ensureUniqueItemVisual = function(idx, key) { var itemVisuals = this._itemVisuals; var itemVisual = itemVisuals[idx]; if (!itemVisual) itemVisual = itemVisuals[idx] = {}; var val = itemVisual[key]; if (val == null) { val = this.getVisual(key); if (isArray$1(val)) val = val.slice(); else if (isObject$1(val)) val = extend({}, val); itemVisual[key] = val; } return val; }; SeriesData.prototype.setItemVisual = function(idx, key, value) { var itemVisual = this._itemVisuals[idx] || {}; this._itemVisuals[idx] = itemVisual; if (isObject$1(key)) extend(itemVisual, key); else itemVisual[key] = value; }; /** * Clear itemVisuals and list visual. */ SeriesData.prototype.clearAllVisual = function() { this._visual = {}; this._itemVisuals = []; }; SeriesData.prototype.setLayout = function(key, val) { isObject$1(key) ? extend(this._layout, key) : this._layout[key] = val; }; /** * Get layout property. */ SeriesData.prototype.getLayout = function(key) { return this._layout[key]; }; /** * Get layout of single data item */ SeriesData.prototype.getItemLayout = function(idx) { return this._itemLayouts[idx]; }; /** * Set layout of single data item */ SeriesData.prototype.setItemLayout = function(idx, layout, merge) { this._itemLayouts[idx] = merge ? extend(this._itemLayouts[idx] || {}, layout) : layout; }; /** * Clear all layout of single data item */ SeriesData.prototype.clearItemLayouts = function() { this._itemLayouts.length = 0; }; /** * Set graphic element relative to data. It can be set as null */ SeriesData.prototype.setItemGraphicEl = function(idx, el) { setCommonECData(this.hostModel && this.hostModel.seriesIndex, this.dataType, idx, el); this._graphicEls[idx] = el; }; SeriesData.prototype.getItemGraphicEl = function(idx) { return this._graphicEls[idx]; }; SeriesData.prototype.eachItemGraphicEl = function(cb, context) { each$12(this._graphicEls, function(el, idx) { if (el) cb && cb.call(context, el, idx); }); }; /** * Shallow clone a new list except visual and layout properties, and graph elements. * New list only change the indices. */ SeriesData.prototype.cloneShallow = function(list) { if (!list) list = new SeriesData(this._schema ? this._schema : map(this.dimensions, this._getDimInfo, this), this.hostModel); transferProperties(list, this); list._store = this._store; return list; }; /** * Wrap some method to add more feature */ SeriesData.prototype.wrapMethod = function(methodName, injectFunction) { var originalMethod = this[methodName]; if (!isFunction(originalMethod)) return; this.__wrappedMethods = this.__wrappedMethods || []; this.__wrappedMethods.push(methodName); this[methodName] = function() { var res = originalMethod.apply(this, arguments); return injectFunction.apply(this, [res].concat(slice(arguments))); }; }; SeriesData.internalField = function() { prepareInvertedIndex = function(data) { var invertedIndicesMap = data._invertedIndicesMap; each$12(invertedIndicesMap, function(invertedIndices, dim) { var dimInfo = data._dimInfos[dim]; var ordinalMeta = dimInfo.ordinalMeta; var store = data._store; if (ordinalMeta) { invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(ordinalMeta.categories.length); for (var i = 0; i < invertedIndices.length; i++) invertedIndices[i] = INDEX_NOT_FOUND; for (var i = 0; i < store.count(); i++) invertedIndices[store.get(dimInfo.storeDimIndex, i)] = i; } }); }; getIdNameFromStore = function(data, dimIdx, idx) { return convertOptionIdName(data._getCategory(dimIdx, idx), null); }; /** * @see the comment of `List['getId']`. */ getId = function(data, rawIndex) { var id = data._idList[rawIndex]; if (id == null && data._idDimIdx != null) id = getIdNameFromStore(data, data._idDimIdx, rawIndex); if (id == null) id = ID_PREFIX + rawIndex; return id; }; normalizeDimensions = function(dimensions) { if (!isArray$1(dimensions)) dimensions = dimensions != null ? [dimensions] : []; return dimensions; }; /** * Data in excludeDimensions is copied, otherwise transferred. */ cloneListForMapAndSample = function(original) { var list = new SeriesData(original._schema ? original._schema : map(original.dimensions, original._getDimInfo, original), original.hostModel); transferProperties(list, original); return list; }; transferProperties = function(target, source) { each$12(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function(propName) { if (source.hasOwnProperty(propName)) target[propName] = source[propName]; }); target.__wrappedMethods = source.__wrappedMethods; each$12(CLONE_PROPERTIES, function(propName) { target[propName] = clone$4(source[propName]); }); target._calculationInfo = extend({}, source._calculationInfo); }; makeIdFromName = function(data, idx) { var nameList = data._nameList; var idList = data._idList; var nameDimIdx = data._nameDimIdx; var idDimIdx = data._idDimIdx; var name = nameList[idx]; var id = idList[idx]; if (name == null && nameDimIdx != null) nameList[idx] = name = getIdNameFromStore(data, nameDimIdx, idx); if (id == null && idDimIdx != null) idList[idx] = id = getIdNameFromStore(data, idDimIdx, idx); if (id == null && name != null) { var nameRepeatCount = data._nameRepeatCount; var nmCnt = nameRepeatCount[name] = (nameRepeatCount[name] || 0) + 1; id = name; if (nmCnt > 1) id += "__ec__" + nmCnt; idList[idx] = id; } }; }(); return SeriesData; }(); //#endregion //#region node_modules/echarts/lib/data/helper/createDimensions.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * For outside usage compat (like echarts-gl are using it). */ function createDimensions(source, opt) { return prepareSeriesDataSchema(source, opt).dimensions; } /** * This method builds the relationship between: * + "what the coord sys or series requires (see `coordDimensions`)", * + "what the user defines (in `encode` and `dimensions`, see `opt.dimensionsDefine` and `opt.encodeDefine`)" * + "what the data source provids (see `source`)". * * Some guess strategy will be adapted if user does not define something. * If no 'value' dimension specified, the first no-named dimension will be * named as 'value'. * * @return The results are always sorted by `storeDimIndex` asc. */ function prepareSeriesDataSchema(source, opt) { if (!isSourceInstance(source)) source = createSourceFromSeriesDataOption(source); opt = opt || {}; var sysDims = opt.coordDimensions || []; var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || []; var coordDimNameMap = createHashMap(); var resultList = []; var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount); var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount); var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine; var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef); var encodeDef = opt.encodeDefine; if (!encodeDef && opt.encodeDefaulter) encodeDef = opt.encodeDefaulter(source, dimCount); var encodeDefMap = createHashMap(encodeDef); var indicesMap = new CtorInt32Array$1(dimCount); for (var i = 0; i < indicesMap.length; i++) indicesMap[i] = -1; function getResultItem(dimIdx) { var idx = indicesMap[dimIdx]; if (idx < 0) { var dimDefItemRaw = dimsDef[dimIdx]; var dimDefItem = isObject$3(dimDefItemRaw) ? dimDefItemRaw : { name: dimDefItemRaw }; var resultItem = new SeriesDimensionDefine(); var userDimName = dimDefItem.name; if (userDimName != null && dataDimNameMap.get(userDimName) != null) resultItem.name = resultItem.displayName = userDimName; dimDefItem.type != null && (resultItem.type = dimDefItem.type); dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName); indicesMap[dimIdx] = resultList.length; resultItem.storeDimIndex = dimIdx; resultList.push(resultItem); return resultItem; } return resultList[idx]; } if (!omitUnusedDimensions) for (var i = 0; i < dimCount; i++) getResultItem(i); encodeDefMap.each(function(dataDimsRaw, coordDim) { var dataDims = normalizeToArray(dataDimsRaw).slice(); if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) { encodeDefMap.set(coordDim, false); return; } var validDataDims = encodeDefMap.set(coordDim, []); each$12(dataDims, function(resultDimIdxOrName, idx) { var resultDimIdx = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName; if (resultDimIdx != null && resultDimIdx < dimCount) { validDataDims[idx] = resultDimIdx; applyDim(getResultItem(resultDimIdx), coordDim, idx); } }); }); var availDimIdx = 0; each$12(sysDims, function(sysDimItemRaw) { var coordDim; var sysDimItemDimsDef; var sysDimItemOtherDims; var sysDimItem; if (isString(sysDimItemRaw)) { coordDim = sysDimItemRaw; sysDimItem = {}; } else { sysDimItem = sysDimItemRaw; coordDim = sysDimItem.name; var ordinalMeta = sysDimItem.ordinalMeta; sysDimItem.ordinalMeta = null; sysDimItem = extend({}, sysDimItem); sysDimItem.ordinalMeta = ordinalMeta; sysDimItemDimsDef = sysDimItem.dimsDef; sysDimItemOtherDims = sysDimItem.otherDims; sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null; } var dataDims = encodeDefMap.get(coordDim); if (dataDims === false) return; dataDims = normalizeToArray(dataDims); if (!dataDims.length) for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) { while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) availDimIdx++; availDimIdx < dimCount && dataDims.push(availDimIdx++); } each$12(dataDims, function(resultDimIdx, coordDimIndex) { var resultItem = getResultItem(resultDimIdx); if (isUsingSourceDimensionsDef && sysDimItem.type != null) resultItem.type = sysDimItem.type; applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex); if (resultItem.name == null && sysDimItemDimsDef) { var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex]; !isObject$3(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = { name: sysDimItemDimsDefItem }); resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name; resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip; } sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims); }); }); function applyDim(resultItem, coordDim, coordDimIndex) { if (VISUAL_DIMENSIONS.get(coordDim) != null) resultItem.otherDims[coordDim] = coordDimIndex; else { resultItem.coordDim = coordDim; resultItem.coordDimIndex = coordDimIndex; coordDimNameMap.set(coordDim, true); } } var generateCoord = opt.generateCoord; var generateCoordCount = opt.generateCoordCount; var fromZero = generateCoordCount != null; generateCoordCount = generateCoord ? generateCoordCount || 1 : 0; var extra = generateCoord || "value"; function ifNoNameFillWithCoordName(resultItem) { if (resultItem.name == null) resultItem.name = resultItem.coordDim; } if (!omitUnusedDimensions) for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) { var resultItem = getResultItem(resultDimIdx); if (resultItem.coordDim == null) { resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero); resultItem.coordDimIndex = 0; if (!generateCoord || generateCoordCount <= 0) resultItem.isExtraCoord = true; generateCoordCount--; } ifNoNameFillWithCoordName(resultItem); if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) resultItem.type = "ordinal"; } else { each$12(resultList, function(resultItem) { ifNoNameFillWithCoordName(resultItem); }); resultList.sort(function(item0, item1) { return item0.storeDimIndex - item1.storeDimIndex; }); } removeDuplicates(resultList, function(item) { return item.name; }, function(item, existingCount) { if (existingCount > 0) item.name = item.name + (existingCount - 1); }); return new SeriesDataSchema({ source, dimensions: resultList, fullDimensionCount: dimCount, dimensionOmitted: omitUnusedDimensions }); } function getDimCount(source, sysDims, dimsDef, optDimCount) { var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0); each$12(sysDims, function(sysDimItem) { var sysDimItemDimsDef; if (isObject$3(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) dimCount = Math.max(dimCount, sysDimItemDimsDef.length); }); return dimCount; } function genCoordDimName(name, map, fromZero) { if (fromZero || map.hasKey(name)) { var i = 0; while (map.hasKey(name + i)) i++; name += i; } map.set(name, true); return name; } //#endregion //#region node_modules/echarts/lib/model/referHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Helper for model references. * There are many manners to refer axis/coordSys. */ /** * @class * For example: * { * coordSysName: 'cartesian2d', * coordSysDims: ['x', 'y', ...], * axisMap: HashMap({ * x: xAxisModel, * y: yAxisModel * }), * categoryAxisMap: HashMap({ * x: xAxisModel, * y: undefined * }), * // The index of the first category axis in `coordSysDims`. * // `null/undefined` means no category axis exists. * firstCategoryDimIndex: 1, * // To replace user specified encode. * } */ var SeriesModelCoordSysInfo = function() { function SeriesModelCoordSysInfo(coordSysName) { this.coordSysDims = []; this.axisMap = createHashMap(); this.categoryAxisMap = createHashMap(); this.coordSysName = coordSysName; } return SeriesModelCoordSysInfo; }(); function getCoordSysInfoBySeries(seriesModel) { var coordSysName = seriesModel.get("coordinateSystem"); var result = new SeriesModelCoordSysInfo(coordSysName); var fetch = fetchers[coordSysName]; if (fetch) { fetch(seriesModel, result, result.axisMap, result.categoryAxisMap); return result; } } var fetchers = { cartesian2d: function(seriesModel, result, axisMap, categoryAxisMap) { var xAxisModel = seriesModel.getReferringComponents("xAxis", SINGLE_REFERRING).models[0]; var yAxisModel = seriesModel.getReferringComponents("yAxis", SINGLE_REFERRING).models[0]; if (!xAxisModel) throw new Error("xAxis \"" + retrieve(seriesModel.get("xAxisIndex"), seriesModel.get("xAxisId"), 0) + "\" not found"); if (!yAxisModel) throw new Error("yAxis \"" + retrieve(seriesModel.get("xAxisIndex"), seriesModel.get("yAxisId"), 0) + "\" not found"); result.coordSysDims = ["x", "y"]; axisMap.set("x", xAxisModel); axisMap.set("y", yAxisModel); if (isCategory(xAxisModel)) { categoryAxisMap.set("x", xAxisModel); result.firstCategoryDimIndex = 0; } if (isCategory(yAxisModel)) { categoryAxisMap.set("y", yAxisModel); result.firstCategoryDimIndex ??= 1; } }, singleAxis: function(seriesModel, result, axisMap, categoryAxisMap) { var singleAxisModel = seriesModel.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0]; if (!singleAxisModel) throw new Error("singleAxis should be specified."); result.coordSysDims = ["single"]; axisMap.set("single", singleAxisModel); if (isCategory(singleAxisModel)) { categoryAxisMap.set("single", singleAxisModel); result.firstCategoryDimIndex = 0; } }, polar: function(seriesModel, result, axisMap, categoryAxisMap) { var polarModel = seriesModel.getReferringComponents("polar", SINGLE_REFERRING).models[0]; var radiusAxisModel = polarModel.findAxisModel("radiusAxis"); var angleAxisModel = polarModel.findAxisModel("angleAxis"); if (!angleAxisModel) throw new Error("angleAxis option not found"); if (!radiusAxisModel) throw new Error("radiusAxis option not found"); result.coordSysDims = ["radius", "angle"]; axisMap.set("radius", radiusAxisModel); axisMap.set("angle", angleAxisModel); if (isCategory(radiusAxisModel)) { categoryAxisMap.set("radius", radiusAxisModel); result.firstCategoryDimIndex = 0; } if (isCategory(angleAxisModel)) { categoryAxisMap.set("angle", angleAxisModel); result.firstCategoryDimIndex ??= 1; } }, geo: function(seriesModel, result, axisMap, categoryAxisMap) { result.coordSysDims = ["lng", "lat"]; }, parallel: function(seriesModel, result, axisMap, categoryAxisMap) { var ecModel = seriesModel.ecModel; var parallelModel = ecModel.getComponent("parallel", seriesModel.get("parallelIndex")); var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice(); each$12(parallelModel.parallelAxisIndex, function(axisIndex, index) { var axisModel = ecModel.getComponent("parallelAxis", axisIndex); var axisDim = coordSysDims[index]; axisMap.set(axisDim, axisModel); if (isCategory(axisModel)) { categoryAxisMap.set(axisDim, axisModel); if (result.firstCategoryDimIndex == null) result.firstCategoryDimIndex = index; } }); }, matrix: function(seriesModel, result, axisMap, categoryAxisMap) { var matrixModel = seriesModel.getReferringComponents("matrix", SINGLE_REFERRING).models[0]; if (!matrixModel) throw new Error("matrix coordinate system should be specified."); result.coordSysDims = ["x", "y"]; var xModel = matrixModel.getDimensionModel("x"); var yModel = matrixModel.getDimensionModel("y"); axisMap.set("x", xModel); axisMap.set("y", yModel); categoryAxisMap.set("x", xModel); categoryAxisMap.set("y", yModel); } }; function isCategory(axisModel) { return axisModel.get("type") === "category"; } //#endregion //#region node_modules/echarts/lib/data/helper/dataStackHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Note that it is too complicated to support 3d stack by value * (have to create two-dimension inverted index), so in 3d case * we just support that stacked by index. * * Stack is calculated in `src/processor/dataStack.ts`. * * @param seriesModel * @param dimensionsInput The same as the input of . * The input will be modified. * @param opt * @param opt.stackedCoordDimension Specify a coord dimension if needed. * @param opt.byIndex=false * @return calculationInfo * { * stackedDimension: string * stackedByDimension: string * isStackedByIndex: boolean * stackedOverDimension: string * stackResultDimension: string * } */ function enableDataStack(seriesModel, dimensionsInput, opt) { opt = opt || {}; var byIndex = opt.byIndex; var stackedCoordDimension = opt.stackedCoordDimension; var dimensionDefineList; var schema; var store; if (isLegacyDimensionsInput(dimensionsInput)) dimensionDefineList = dimensionsInput; else { schema = dimensionsInput.schema; dimensionDefineList = schema.dimensions; store = dimensionsInput.store; } var mayStack = !!(seriesModel && seriesModel.get("stack")); var stackedByDimInfo; var stackedDimInfo; var stackResultDimension; var stackedOverDimension; var allDimTypesAreNotOrdinalAndTime = true; function dimTypeIsNotOrdinalAndTime(dimensionInfo) { return dimensionInfo.type !== "ordinal" && dimensionInfo.type !== "time"; } each$12(dimensionDefineList, function(dimensionInfo, index) { if (isString(dimensionInfo)) dimensionDefineList[index] = dimensionInfo = { name: dimensionInfo }; if (!dimTypeIsNotOrdinalAndTime(dimensionInfo)) allDimTypesAreNotOrdinalAndTime = false; }); each$12(dimensionDefineList, function(dimensionInfo, index) { if (mayStack && !dimensionInfo.isExtraCoord) { if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) stackedByDimInfo = dimensionInfo; if (!stackedDimInfo && dimTypeIsNotOrdinalAndTime(dimensionInfo) && (!allDimTypesAreNotOrdinalAndTime || dimensionInfo.coordDim !== "x" && dimensionInfo.coordDim !== "angle") && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) stackedDimInfo = dimensionInfo; } }); if (stackedDimInfo && !byIndex && !stackedByDimInfo) byIndex = true; if (stackedDimInfo) { stackResultDimension = "__\0ecstackresult_" + seriesModel.id; stackedOverDimension = "__\0ecstackedover_" + seriesModel.id; if (stackedByDimInfo) stackedByDimInfo.createInvertedIndices = true; var stackedDimCoordDim_1 = stackedDimInfo.coordDim; var stackedDimType = stackedDimInfo.type; var stackedDimCoordIndex_1 = 0; each$12(dimensionDefineList, function(dimensionInfo) { if (dimensionInfo.coordDim === stackedDimCoordDim_1) stackedDimCoordIndex_1++; }); var stackedOverDimensionDefine = { name: stackResultDimension, coordDim: stackedDimCoordDim_1, coordDimIndex: stackedDimCoordIndex_1, type: stackedDimType, isExtraCoord: true, isCalculationCoord: true, storeDimIndex: dimensionDefineList.length }; var stackResultDimensionDefine = { name: stackedOverDimension, coordDim: stackedOverDimension, coordDimIndex: stackedDimCoordIndex_1 + 1, type: stackedDimType, isExtraCoord: true, isCalculationCoord: true, storeDimIndex: dimensionDefineList.length + 1 }; if (schema) { if (store) { stackedOverDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackedOverDimension, stackedDimType); stackResultDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackResultDimension, stackedDimType); } schema.appendCalculationDimension(stackedOverDimensionDefine); schema.appendCalculationDimension(stackResultDimensionDefine); } else { dimensionDefineList.push(stackedOverDimensionDefine); dimensionDefineList.push(stackResultDimensionDefine); } } return { stackedDimension: stackedDimInfo && stackedDimInfo.name, stackedByDimension: stackedByDimInfo && stackedByDimInfo.name, isStackedByIndex: byIndex, stackedOverDimension, stackResultDimension }; } function isLegacyDimensionsInput(dimensionsInput) { return !isSeriesDataSchema(dimensionsInput.schema); } function isDimensionStacked(data, stackedDim) { return !!stackedDim && stackedDim === data.getCalculationInfo("stackedDimension"); } function getStackedDimension(data, targetDim) { return isDimensionStacked(data, targetDim) ? data.getCalculationInfo("stackResultDimension") : targetDim; } //#endregion //#region node_modules/echarts/lib/chart/helper/createSeriesData.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getCoordSysDimDefs(seriesModel, coordSysInfo) { var coordSysName = seriesModel.get("coordinateSystem"); var registeredCoordSys = CoordinateSystemManager.get(coordSysName); var coordSysDimDefs; if (coordSysInfo && coordSysInfo.coordSysDims) coordSysDimDefs = map$1(coordSysInfo.coordSysDims, function(dim) { var dimInfo = { name: dim }; var axisModel = coordSysInfo.axisMap.get(dim); if (axisModel) dimInfo.type = getDimensionTypeByAxis(axisModel.get("type")); return dimInfo; }); if (!coordSysDimDefs) coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ["x", "y"]; return coordSysDimDefs; } function injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) { var firstCategoryDimIndex; var hasNameEncode; coordSysInfo && each$12(dimInfoList, function(dimInfo, dimIndex) { var coordDim = dimInfo.coordDim; var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim); if (categoryAxisModel) { if (firstCategoryDimIndex == null) firstCategoryDimIndex = dimIndex; dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta(); if (createInvertedIndices) dimInfo.createInvertedIndices = true; } if (dimInfo.otherDims.itemName != null) hasNameEncode = true; }); if (!hasNameEncode && firstCategoryDimIndex != null) dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0; return firstCategoryDimIndex; } /** * Caution: there are side effects to `sourceManager` in this method. * Should better only be called in `Series['getInitialData']`. */ function createSeriesData(sourceRaw, seriesModel, opt) { opt = opt || {}; var sourceManager = seriesModel.getSourceManager(); var source; var isOriginalSource = false; if (sourceRaw) { isOriginalSource = true; source = createSourceFromSeriesDataOption(sourceRaw); } else { source = sourceManager.getSource(); isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL; } var coordSysInfo = getCoordSysInfoBySeries(seriesModel); var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo); var useEncodeDefaulter = opt.useEncodeDefaulter; var encodeDefaulter = isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? curry$1(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null; var createDimensionOptions = { coordDimensions: coordSysDimDefs, generateCoord: opt.generateCoord, encodeDefine: seriesModel.getEncode(), encodeDefaulter, canOmitUnusedDimensions: !isOriginalSource }; var schema = prepareSeriesDataSchema(source, createDimensionOptions); var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo); var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null; var stackCalculationInfo = enableDataStack(seriesModel, { schema, store }); var data = new SeriesData(schema, seriesModel); data.setCalculationInfo(stackCalculationInfo); var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function(itemOpt, dimName, dataIndex, dimIndex) { return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex); } : null; data.hasItemOption = false; data.initData(isOriginalSource ? source : store, null, dimValueGetter); return data; } function isNeedCompleteOrdinalData(source) { if (source.sourceFormat === "original") return !isArray$1(getDataItemValue(firstDataNotNull(source.data || []))); } function firstDataNotNull(arr) { var i = 0; while (i < arr.length && arr[i] == null) i++; return arr[i]; } //#endregion //#region node_modules/echarts/lib/scale/Scale.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Scale = function() { function Scale() {} /** * When axis extent depends on data and no data exists, * axis ticks should not be drawn, which is named 'blank'. * * @final NEVER override! */ Scale.prototype.isBlank = function() { return this._isBlank; }; /** * When axis extent depends on data and no data exists, * axis ticks should not be drawn, which is named 'blank'. * * @final NEVER override! */ Scale.prototype.setBlank = function(isBlank) { this._isBlank = isBlank; }; return Scale; }(); enableClassManagement(Scale); //#endregion //#region node_modules/echarts/lib/data/OrdinalMeta.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var uidBase = 0; var OrdinalMeta = function() { /** * PENDING - Regarding forcibly converting to string: * In the early days, the underlying hash map impl used JS plain object and converted the key to * string; later in https://github.com/ecomfe/zrender/pull/966 it was changed to a JS Map (in supported * platforms), which does not require string keys. But consider any input that `scale/Ordinal['parse']` * is involved, a number input represents an `OrdinalNumber` (i.e., an index), and affect the query * behavior: * - If forcbily converting to string: * pros: users can use numeric string (such as, '123') to query the raw data (123), tho it's probably * still confusing. * cons: NaN/null/undefined in data will be equals to 'NaN'/'null'/'undefined', if simply using * `val + ''` to convert them, like currently `getName` does. * - Otherwise: * pros: see NaN/null/undefined case above. * cons: users cannot query the raw data (123) any more. * There are two inconsistent behaviors in the current impl: * - Force conversion is applied on the case `xAxis{data: ['aaa', 'bbb', ...]}`, * but no conversion applied to the case `xAxis{data: [{value: 'aaa'}, ...]}` and * the case `dataset: {source: [['aaa', 123], ['bbb', 234], ...]}`. * - behaves differently according to whether JS Map is supported (the polyfill is simply using JS * plain object) (tho it seems rare platform that do not support it). * Since there's no sufficient good solution to offset cost of the breaking change, we preserve the * current behavior, until real issues is reported. */ function OrdinalMeta(opt) { this.categories = opt.categories || []; this._needCollect = opt.needCollect; this._deduplication = opt.deduplication; this.uid = ++uidBase; this._onCollect = opt.onCollect; } OrdinalMeta.createByAxisModel = function(axisModel) { var option = axisModel.option; var data = option.data; var categories = data && map$1(data, getName); return new OrdinalMeta({ categories, needCollect: !categories, deduplication: option.dedplication !== false }); }; OrdinalMeta.prototype.getOrdinal = function(category) { return this._getOrCreateMap().get(category); }; /** * @return The ordinal. If not found, return NaN. */ OrdinalMeta.prototype.parseAndCollect = function(category) { var index; var needCollect = this._needCollect; if (!isString(category) && !needCollect) return category; if (needCollect && !this._deduplication) { index = this.categories.length; this.categories[index] = category; this._onCollect && this._onCollect(category, index); return index; } var map = this._getOrCreateMap(); index = map.get(category); if (index == null) { if (needCollect) { index = this.categories.length; this.categories[index] = category; map.set(category, index); this._onCollect && this._onCollect(category, index); } else index = NaN; } return index; }; OrdinalMeta.prototype._getOrCreateMap = function() { return this._map || (this._map = createHashMap(this.categories)); }; return OrdinalMeta; }(); function getName(obj) { if (isObject$3(obj) && obj.value != null) return obj.value; else return obj + ""; } var SCALE_MAPPER_METHOD_NAMES = keys({ needTransform: 1, normalize: 1, scale: 1, transformIn: 1, transformOut: 1, contain: 1, getExtent: 1, getExtentUnsafe: 1, setExtent: 1, setExtent2: 1, getFilter: 1, sanitize: 1, getDefaultStartValue: 1, freeze: 1 }); function initBreakOrLinearMapper(mapper, breakParsed, initialExtent) { var brk; mapper = mapper || {}; var scaleBreakHelper = getScaleBreakHelper(); if (scaleBreakHelper) { var brkMapper_1 = scaleBreakHelper.createBreakScaleMapper(breakParsed, initialExtent); if (brkMapper_1.hasBreaks()) { each$12(SCALE_MAPPER_METHOD_NAMES, function(methodName) { if (brkMapper_1[methodName]) mapper[methodName] = bind$1(brkMapper_1[methodName], brkMapper_1); }); brk = brkMapper_1; } } if (brk == null) initLinearScaleMapper(mapper, initialExtent); return { brk, mapper }; } function decorateScaleMapper(host, decoratedMapperMethods) { each$12(SCALE_MAPPER_METHOD_NAMES, function(methodName) { host[methodName] = decoratedMapperMethods[methodName]; }); } function enableScaleMapperFreeze(host, subMapper) { host.freeze = noop; host.freeze = function() { subMapper.freeze(); }; } function getScaleExtentForTickUnsafe(mapper) { return mapper.getExtentUnsafe(0, 2); } function getScaleExtentForMappingUnsafe(mapper, depth) { return mapper.getExtentUnsafe(1, depth) || mapper.getExtentUnsafe(0, depth); } function getScaleLinearSpanForMapping(mapper) { var extent = getScaleExtentForMappingUnsafe(mapper, 3); return extent[1] - extent[0]; } function getScaleLinearSpanEffective(mapper) { var extent = mapper.getExtentUnsafe(0, 3); return extent[1] - extent[0]; } function initLinearScaleMapper(mapper, initialExtent) { var linearMapper = mapper || {}; var extendList = []; linearMapper._extents = extendList; extendList[0] = initialExtent ? initialExtent.slice() : initExtentForUnion(); extend(linearMapper, linearScaleMapperMethods); return linearMapper; } var linearScaleMapperMethods = { needTransform: function() { return false; }, normalize: function(val) { var extent = this._extents[1] || this._extents[0]; if (extent[1] === extent[0]) return .5; return (val - extent[0]) / (extent[1] - extent[0]); }, scale: function(val) { var extent = this._extents[1] || this._extents[0]; return val * (extent[1] - extent[0]) + extent[0]; }, transformIn: function(val) { return val; }, transformOut: function(val) { return val; }, contain: function(val) { var extent = getScaleExtentForMappingUnsafe(this, null); return val >= extent[0] && val <= extent[1]; }, getExtent: function() { return this._extents[0].slice(); }, getExtentUnsafe: function(kind) { return this._extents[kind]; }, setExtent: function(start, end) { assert(!this._frozen); writeExtent(this._extents, 0, start, end); }, setExtent2: function(kind, start, end) { assert(!this._frozen); var extentList = this._extents; if (!extentList[kind]) extentList[kind] = extentList[0].slice(); writeExtent(extentList, kind, start, end); }, freeze: function() { this._frozen = true; } }; function writeExtent(extentList, kind, start, end) { if (isValidBoundsForExtent(start, end)) { extentList[kind][0] = start; extentList[kind][1] = end; } else if (start != null && end != null && start <= end) error("Invalid setExtent call - start: " + start + ", end: " + end); } //#endregion //#region node_modules/echarts/lib/scale/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * See also method `nice` in `src/util/number.ts`. */ function isIntervalOrLogScale(scale) { return isIntervalScale(scale) || isLogScale(scale); } function isIntervalScale(scale) { return scale.type === "interval"; } function isTimeScale(scale) { return scale.type === "time"; } function isLogScale(scale) { return scale.type === "log"; } function isOrdinalScale(scale) { return scale.type === "ordinal"; } /** * The input `niceInterval` should be generated * from `nice` method in `src/util/number.ts`, or * from `increaseInterval` itself. */ function increaseInterval(niceInterval) { var exponent = quantityExponent(niceInterval); var exp10 = mathPow$1(10, exponent); var f = mathRound$1(niceInterval / exp10); if (!f) f = 1; else if (f === 2) f = 3; else if (f === 3) f = 5; else f *= 2; return round$3(f * exp10, -exponent); } function getIntervalPrecision(niceInterval) { return getPrecision(niceInterval) + 2; } /** * NOTE: * - If `val` is `NaN`, return `NaN`. * - If `val` is `0`, return `-Infinity`. * - If `val` is negative, return `NaN`. * * @see {DataStore#getDataExtent} It handles non-positive values for logarithm scale. */ function logScaleLogTick(val, base) { return mathLog(val) / mathLog(base); } /** * Cumulative rounding errors cause the logarithm operation to become non-invertible by simply exponentiation. * - `Math.pow(10, integer)` itself has no rounding error. But, * - If `linearTickVal` is generated internally by `calcNiceTicks`, it may be still "not nice" (not an integer) * when it is `extent[i]`. * - If `linearTickVal` is generated outside (e.g., by `scaleCalcAlign`) and set by `setExtent`, * `logScaleLogTick` may already have introduced rounding errors even for "nice" values. * But invertible is required when the original `extent[i]` need to be respected, or "nice" ticks need to be * displayed instead of something like `5.999999999999999`, which is addressed in this function. * See also `#4158`. * * [CAUTION]: * Monotonicity may be broken on extent ends - callers must make sure it does not matter. */ function logScalePowTick(linearTickVal, base, opt) { var lookup = opt && opt.lookup; if (lookup) { for (var i = 0; i < lookup.from.length; i++) if (linearTickVal === lookup.from[i]) return lookup.to[i]; } return mathPow$1(base, linearTickVal); } /** * For `IntervalScale`, convert `rawExtent` to: * - Be no non-finite number. * - Be `extent[0] < extent[1]`- no equal; otherwise, additional handling is required * in "nice" and "align" ticks. */ function intervalScaleEnsureValidExtent(rawExtent, fixMinMax, rawExtentResult) { var extent = rawExtent.slice(); if (extent[0] === extent[1]) { var containShapeRequired = rawExtentResult && rawExtentResult.ctnShp; if (extent[0] !== 0) { var expandSize = mathAbs$4(extent[0]); if (!fixMinMax[1]) { extent[1] += expandSize / 2; extent[0] -= expandSize / 2; } else extent[0] -= expandSize / 2; } else if (containShapeRequired) { extent[0] = -1; extent[1] = 1; } else extent[1] = 1; } if (!isValidNumberForExtent(extent[0]) || !isValidNumberForExtent(extent[1])) { extent[0] = 0; extent[1] = 1; } if (extent[1] < extent[0]) extent.reverse(); return extent; } function extentDiffers(extent1, extent2) { return [extent1[0] !== extent2[0], extent1[1] !== extent2[1]]; } function ensureValidSplitNumber(rawSplitNumber, defaultSplitNumber) { rawSplitNumber = rawSplitNumber || defaultSplitNumber; return mathRound$1(mathMax$9(rawSplitNumber, 1)); } /** * NOTE: The result can have only one item, e.g., when `extent[0] === extent[1]` * and `categoryInterval === 0`. */ function ordinalScaleCreateTicks(ordinalScale, categoryInterval, addItem) { var extent = getScaleExtentForTickUnsafe(ordinalScale); var startTick = extent[0]; var tickCount = ordinalScale.count(); var step = Math.max((categoryInterval || 0) + 1, 1); if (startTick !== 0 && step > 1 && tickCount / step > 2) startTick = Math.round(Math.ceil(startTick / step) * step); if (startTick !== extent[0]) addItemInternally(extent[0], true, true); var tickValue = startTick; for (; tickValue <= extent[1]; tickValue += step) addItemInternally(tickValue, false, tickValue === extent[0] || tickValue === extent[1]); if (tickValue - step !== extent[1]) addItemInternally(extent[1], true, true); function addItemInternally(tickValue, offInterval, isExtentBoundary) { addItem({ value: tickValue, offInterval }, isExtentBoundary); } } //#endregion //#region node_modules/echarts/lib/scale/Ordinal.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Linear continuous scale * http://en.wikipedia.org/wiki/Level_of_measurement */ var OrdinalScale = function(_super) { __extends(OrdinalScale, _super); function OrdinalScale(setting) { var _this = _super.call(this) || this; _this.type = "ordinal"; _this.parse = OrdinalScale.parse; decorateScaleMapper(_this, OrdinalScale.decoratedMethods); var ordinalMeta = setting.ordinalMeta; if (!ordinalMeta) ordinalMeta = new OrdinalMeta({}); if (isArray$1(ordinalMeta)) ordinalMeta = new OrdinalMeta({ categories: map$1(ordinalMeta, function(item) { return isObject$3(item) ? item.value : item; }) }); _this._ordinalMeta = ordinalMeta; var res = initBreakOrLinearMapper(null, null, setting.extent || [0, ordinalMeta.categories.length - 1]); _this._mapper = res.mapper; enableScaleMapperFreeze(_this, res.mapper); return _this; } OrdinalScale.parse = function(val) { if (val == null) val = NaN; else if (isString(val)) { val = this._ordinalMeta.getOrdinal(val); if (val == null) val = NaN; } else val = mathRound$1(val); return val; }; /** * PENDING: currently this method is not used. * `makeCategoryTicks` is effectively used. */ OrdinalScale.prototype.getTicks = function() { var ticks = []; ordinalScaleCreateTicks(this, 0, function(tick) { ticks.push(tick); }); return ticks; }; OrdinalScale.prototype.getMinorTicks = function(splitNumber) {}; /** * @see `Ordinal['_ordinalNumbersByTick']` */ OrdinalScale.prototype.setSortInfo = function(info) { if (info == null) { this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null; return; } var infoOrdinalNumbers = info.ordinalNumbers; var ordinalsByTick = this._ordinalNumbersByTick = []; var ticksByOrdinal = this._ticksByOrdinalNumber = []; var tickNum = 0; var allCategoryLen = this._ordinalMeta.categories.length; for (var len = mathMin$9(allCategoryLen, infoOrdinalNumbers.length); tickNum < len; ++tickNum) { var ordinalNumber = ordinalsByTick[tickNum] = infoOrdinalNumbers[tickNum]; ticksByOrdinal[ordinalNumber] = tickNum; } var unusedOrdinal = 0; for (; tickNum < allCategoryLen; ++tickNum) { while (ticksByOrdinal[unusedOrdinal] != null) unusedOrdinal++; ordinalsByTick[tickNum] = unusedOrdinal; ticksByOrdinal[unusedOrdinal] = tickNum; } }; OrdinalScale.prototype._getTickNumber = function(ordinal) { var ticksByOrdinalNumber = this._ticksByOrdinalNumber; return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal; }; /** * @usage * ```js * const ordinalNumber = ordinalScale.getRawOrdinalNumber(tick.value); * // case0 * const rawOrdinalValue = axisModel.getCategories()[ordinalNumber]; * // case1 * const rawOrdinalValue = this._ordinalMeta.categories[ordinalNumber]; * // case2 * const coord = axis.dataToCoord(ordinalNumber); * ``` * * value may be out of range, e.g., when axis max is larger than `ordinalMeta.categories.length`, * where ordinal numbers are used as tick value directly. */ OrdinalScale.prototype.getRawOrdinalNumber = function(tickValue) { var ordinalNumbersByTick = this._ordinalNumbersByTick; return ordinalNumbersByTick && tickValue >= 0 && tickValue < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickValue] : tickValue; }; /** * Get item on tick */ OrdinalScale.prototype.getLabel = function(tick) { if (!this.isBlank()) { var ordinalNumber = this.getRawOrdinalNumber(tick.value); var category = this._ordinalMeta.categories[ordinalNumber]; return category == null ? "" : category + ""; } }; /** * NOTICE: This is different from `.getOrdinalMeta().length` when extent * is specified by `xxxAxis.min/max` or by `dataZoom`. */ OrdinalScale.prototype.count = function() { var extent = getScaleExtentForTickUnsafe(this._mapper); return extent[1] - extent[0] + 1; }; OrdinalScale.prototype.getOrdinalMeta = function() { return this._ordinalMeta; }; OrdinalScale.type = "ordinal"; OrdinalScale.decoratedMethods = { needTransform: function() { return this._mapper.needTransform(); }, contain: function(val) { return this._mapper.contain(this._getTickNumber(val)) && val >= 0 && val < this._ordinalMeta.categories.length; }, normalize: function(val) { return this._mapper.normalize(this._getTickNumber(val)); }, scale: function(val) { return this.getRawOrdinalNumber(mathRound$1(this._mapper.scale(val))); }, transformIn: function(val, opt) { return this._mapper.transformIn(this._getTickNumber(val), opt); }, transformOut: function(val, opt) { return this.getRawOrdinalNumber(this._mapper.transformOut(val, opt)); }, getExtent: function() { return this._mapper.getExtent(); }, getExtentUnsafe: function(kind, depth) { return this._mapper.getExtentUnsafe(kind, depth); }, /** * NOTICE: OrdinalScale extent should always originates from * `[0, ordinalMeta.categories.length - 1]`, regardless of min/max of `series.data`. * But settings like `xxxAxis.min/max` can still modify the extent. * It is handled by constructor of `ScaleRawExtentInfo`. */ setExtent: function(start, end) { return this._mapper.setExtent(start, end); }, setExtent2: function(kind, start, end) { return this._mapper.setExtent2(kind, start, end); } }; return OrdinalScale; }(Scale); Scale.registerClass(OrdinalScale); //#endregion //#region node_modules/echarts/lib/scale/minorTicks.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getMinorTicks(scale, splitNumber, breaks, scaleInterval) { var ticks = scale.getTicks({ expandToNicedExtent: true }); var minorTicks = []; var extent = scale.getExtent(); for (var i = 1; i < ticks.length; i++) { var nextTick = ticks[i]; var prevTick = ticks[i - 1]; if (prevTick["break"] || nextTick["break"]) continue; var count = 0; var minorTicksGroup = []; var minorInterval = (nextTick.value - prevTick.value) / splitNumber; var minorIntervalPrecision = getIntervalPrecision(minorInterval); while (count < splitNumber - 1) { var minorTick = round$3(prevTick.value + (count + 1) * minorInterval, minorIntervalPrecision); if (minorTick > extent[0] && minorTick < extent[1]) minorTicksGroup.push(minorTick); count++; } var scaleBreakHelper = getScaleBreakHelper(); scaleBreakHelper && scaleBreakHelper.pruneTicksByBreak("auto", minorTicksGroup, breaks, function(value) { return value; }, scaleInterval, extent); minorTicks.push(minorTicksGroup); } return minorTicks; } //#endregion //#region node_modules/echarts/lib/scale/Interval.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var IntervalScale = function(_super) { __extends(IntervalScale, _super); function IntervalScale(setting) { var _this = _super.call(this) || this; _this.type = "interval"; _this.parse = IntervalScale.parse; setting = setting || {}; _this.brk = initBreakOrLinearMapper(_this, simplyParseBreakOption(_this, setting), null).brk; _this._cfg = { interval: 0, intervalPrecision: 2, intervalCount: void 0, niceExtent: void 0 }; return _this; } IntervalScale.parse = function(val) { return val == null || val === "" ? NaN : Number(val); }; IntervalScale.prototype.getConfig = function() { return clone$4(this._cfg); }; IntervalScale.prototype.setConfig = function(cfg) { var extent = getScaleExtentForTickUnsafe(this); assert(cfg.interval != null); if (cfg.intervalCount != null) assert(cfg.intervalCount >= -1 && cfg.intervalPrecision != null && !hasBreaks(this)); if (cfg.niceExtent != null) { assert(isFinite(cfg.niceExtent[0]) && isFinite(cfg.niceExtent[1])); assert(extent[0] <= cfg.niceExtent[0] && cfg.niceExtent[1] <= extent[1]); assert(round$3(cfg.niceExtent[0] - cfg.niceExtent[1], getPrecision(cfg.interval)) <= cfg.interval); } this._cfg = cfg = clone$4(cfg); if (cfg.niceExtent == null) cfg.niceExtent = extent.slice(); if (cfg.intervalPrecision == null) cfg.intervalPrecision = getIntervalPrecision(cfg.interval); }; /** * In ascending order. */ IntervalScale.prototype.getTicks = function(opt) { opt = opt || {}; var cfg = this._cfg; var interval = cfg.interval; var extent = getScaleExtentForTickUnsafe(this); var niceExtent = cfg.niceExtent; var intervalPrecision = cfg.intervalPrecision; var scaleBreakHelper = getScaleBreakHelper(); var brk = this.brk; var brkAvailable = scaleBreakHelper && brk; var ticks = []; if (!interval) return ticks; if (opt.breakTicks === "only_break" && brkAvailable) { scaleBreakHelper.addBreaksToTicks(ticks, brk.breaks, extent); return ticks; } assert(niceExtent != null); var safeLimit = 3e3; if (extent[0] < niceExtent[0]) ticks.push({ value: opt.expandToNicedExtent ? round$3(niceExtent[0] - interval, intervalPrecision) : extent[0] }); var estimateNiceMultiple = function(tickVal, targetTick) { return mathRound$1((targetTick - tickVal) / interval); }; var intervalCount = cfg.intervalCount; for (var tick = niceExtent[0], niceTickIdx = 0;; niceTickIdx++) { if (intervalCount == null) { if (tick > niceExtent[1] || !isFinite(tick) || !isFinite(niceExtent[1])) break; } else { if (niceTickIdx > intervalCount) break; tick = mathMin$9(tick, niceExtent[1]); if (niceTickIdx === intervalCount) tick = niceExtent[1]; } ticks.push({ value: tick }); tick = round$3(tick + interval, intervalPrecision); if (brk) { var moreMultiple = brk.calcNiceTickMultiple(tick, estimateNiceMultiple); if (moreMultiple >= 0) tick = round$3(tick + moreMultiple * interval, intervalPrecision); } if (ticks.length > 0 && tick === ticks[ticks.length - 1].value) break; if (ticks.length > safeLimit) { warn("Exceed safe limit in IntervalScale[\"getTicks\"]."); return []; } } var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceExtent[1]; if (extent[1] > lastNiceTick) ticks.push({ value: opt.expandToNicedExtent ? round$3(lastNiceTick + interval, intervalPrecision) : extent[1] }); if (brkAvailable) scaleBreakHelper.pruneTicksByBreak(opt.pruneByBreak, ticks, brk.breaks, function(item) { return item.value; }, cfg.interval, extent); if (brkAvailable && opt.breakTicks !== "none") scaleBreakHelper.addBreaksToTicks(ticks, brk.breaks, extent); return ticks; }; IntervalScale.prototype.getMinorTicks = function(splitNumber) { return getMinorTicks(this, splitNumber, getBreaksUnsafe(this), this._cfg.interval); }; IntervalScale.prototype.getLabel = function(tick, opt) { if (tick == null) return ""; var precision = opt && opt.precision; if (precision == null) precision = getPrecision(tick.value) || 0; else if (precision === "auto") precision = this._cfg.intervalPrecision; return addCommas(round$3(tick.value, precision, true)); }; IntervalScale.type = "interval"; return IntervalScale; }(Scale); Scale.registerClass(IntervalScale); //#endregion //#region node_modules/echarts/lib/scale/Time.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var bisect = function(a, x, lo, hi) { while (lo < hi) { var mid = lo + hi >>> 1; if (a[mid][1] < x) lo = mid + 1; else hi = mid; } return lo; }; var TimeScale = function(_super) { __extends(TimeScale, _super); function TimeScale(setting) { var _this = _super.call(this) || this; _this.type = "time"; _this.parse = TimeScale.parse; _this._locale = setting.locale; _this._useUTC = setting.useUTC; _this._interval = 0; _this.brk = initBreakOrLinearMapper(_this, simplyParseBreakOption(_this, setting), null).brk; return _this; } /** * Get label is mainly for other components like dataZoom, tooltip. */ TimeScale.prototype.getLabel = function(tick) { return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, this._useUTC, this._locale); }; TimeScale.prototype.getFormattedLabel = function(tick, idx, labelFormatter) { return leveledFormat(tick, idx, labelFormatter, this._locale, this._useUTC); }; TimeScale.prototype.getTicks = function(opt) { opt = opt || {}; var interval = this._interval; var extent = getScaleExtentForTickUnsafe(this); var scaleBreakHelper = getScaleBreakHelper(); var brk = this.brk; var brkAvailable = scaleBreakHelper && brk; var ticks = []; if (!interval) return ticks; var useUTC = this._useUTC; if (brkAvailable && opt.breakTicks === "only_break") { getScaleBreakHelper().addBreaksToTicks(ticks, brk.breaks, extent); return ticks; } ticks = createIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent, getScaleLinearSpanEffective(this), brk); var upperUnitIndex = primaryTimeUnits.length - 1; var maxLevel = 0; each$12(ticks, function(tick) { if (tick.time) { upperUnitIndex = Math.min(upperUnitIndex, indexOf(primaryTimeUnits, tick.time.upperTimeUnit)); maxLevel = Math.max(maxLevel, tick.time.level); } }); if (brkAvailable) getScaleBreakHelper().pruneTicksByBreak(opt.pruneByBreak, ticks, brk.breaks, function(item) { return item.value; }, this._approxInterval, extent); if (brkAvailable && opt.breakTicks !== "none") getScaleBreakHelper().addBreaksToTicks(ticks, brk.breaks, extent, function(trimmedBrk) { var lowerBrkUnitIndex = Math.max(indexOf(primaryTimeUnits, getUnitFromValue(trimmedBrk.vmin, useUTC)), indexOf(primaryTimeUnits, getUnitFromValue(trimmedBrk.vmax, useUTC))); var upperBrkUnitIndex = 0; for (var unitIdx = 0; unitIdx < primaryTimeUnits.length; unitIdx++) if (!isPrimaryUnitValueAndGreaterSame(primaryTimeUnits[unitIdx], trimmedBrk.vmin, trimmedBrk.vmax, useUTC)) { upperBrkUnitIndex = unitIdx; break; } var upperIdx = Math.min(upperBrkUnitIndex, upperUnitIndex); return { level: maxLevel, lowerTimeUnit: primaryTimeUnits[Math.max(upperIdx, lowerBrkUnitIndex)], upperTimeUnit: primaryTimeUnits[upperIdx] }; }); return ticks; }; TimeScale.prototype.getMinorTicks = function(splitNumber) { return getMinorTicks(this, splitNumber, getBreaksUnsafe(this), this._interval); }; TimeScale.prototype.setTimeInterval = function(opt) { this._interval = opt.interval; this._approxInterval = opt.approxInterval; this._minLevelUnit = opt.minLevelUnit; }; TimeScale.parse = function(val) { return isNumber(val) ? Math.round(val) : +parseDate(val); }; TimeScale.type = "time"; return TimeScale; }(Scale); /** * This implementation was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. */ var scaleIntervals = [ ["second", ONE_SECOND], ["minute", ONE_MINUTE], ["hour", ONE_HOUR], ["quarter-day", ONE_HOUR * 6], ["half-day", ONE_HOUR * 12], ["day", ONE_DAY * 1.2], ["half-week", ONE_DAY * 3.5], ["week", ONE_DAY * 7], ["month", ONE_DAY * 31], ["quarter", ONE_DAY * 95], ["half-year", ONE_YEAR / 2], ["year", ONE_YEAR] ]; function isPrimaryUnitValueAndGreaterSame(unit, valueA, valueB, isUTC) { return roundTime(new Date(valueA), unit, isUTC).getTime() === roundTime(new Date(valueB), unit, isUTC).getTime(); } function getDateInterval(approxInterval, daysInMonth) { approxInterval /= ONE_DAY; return approxInterval > 16 ? 16 : approxInterval > 7.5 ? 7 : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1; } function getMonthInterval(approxInterval) { var APPROX_ONE_MONTH = 30 * ONE_DAY; approxInterval /= APPROX_ONE_MONTH; return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1; } function getHourInterval(approxInterval) { approxInterval /= ONE_HOUR; return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1; } function getMinutesAndSecondsInterval(approxInterval, isMinutes) { approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND; return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1; } function getMillisecondsInterval(approxInterval) { return mathMax$9(nice(approxInterval, true), 1); } function getFirstTimestampOfUnit(timestamp, unitName, isUTC) { var upperUnitIdx = Math.max(0, indexOf(primaryTimeUnits, unitName) - 1); return roundTime(new Date(timestamp), primaryTimeUnits[upperUnitIdx], isUTC).getTime(); } function createEstimateNiceMultiple(setMethodName, dateMethodInterval) { var tmpDate = /* @__PURE__ */ new Date(0); tmpDate[setMethodName](1); var tmpTime = tmpDate.getTime(); tmpDate[setMethodName](1 + dateMethodInterval); var approxTimeInterval = tmpDate.getTime() - tmpTime; return function(tickVal, targetValue) { return Math.max(0, Math.round((targetValue - tickVal) / approxTimeInterval)); }; } function createIntervalTicks(bottomUnitName, approxInterval, isUTC, extent, innermostSpan, brk) { var safeLimit = 3e3; var unitNames = timeUnits; var iter = 0; function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) { var estimateNiceMultiple = createEstimateNiceMultiple(setMethodName, interval); var dateTime = minTimestamp; var date = new Date(dateTime); while (dateTime < maxTimestamp && dateTime <= extent[1]) { out.push({ value: dateTime }); if (iter++ > safeLimit) { warn("Exceed safe limit in TimeScale[\"getTicks\"]."); break; } date[setMethodName](date[getMethodName]() + interval); dateTime = date.getTime(); if (brk) { var moreMultiple = brk.calcNiceTickMultiple(dateTime, estimateNiceMultiple); if (moreMultiple > 0) { date[setMethodName](date[getMethodName]() + moreMultiple * interval); dateTime = date.getTime(); } } } out.push({ value: dateTime, notAdd: dateTime > extent[1] }); } function addLevelTicks(unitName, lastLevelTicks, levelTicks) { var newAddedTicks = []; var isFirstLevel = !lastLevelTicks.length; if (isPrimaryUnitValueAndGreaterSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) return; if (isFirstLevel) lastLevelTicks = [{ value: getFirstTimestampOfUnit(extent[0], unitName, isUTC) }, { value: extent[1] }]; for (var i = 0; i < lastLevelTicks.length - 1; i++) { var startTick = lastLevelTicks[i].value; var endTick = lastLevelTicks[i + 1].value; if (startTick === endTick) continue; var interval = void 0; var getterName = void 0; var setterName = void 0; var isDate = false; switch (unitName) { case "year": interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365)); getterName = fullYearGetterName(isUTC); setterName = fullYearSetterName(isUTC); break; case "half-year": case "quarter": case "month": interval = getMonthInterval(approxInterval); getterName = monthGetterName(isUTC); setterName = monthSetterName(isUTC); break; case "week": case "half-week": case "day": interval = getDateInterval(approxInterval, 31); getterName = dateGetterName(isUTC); setterName = dateSetterName(isUTC); isDate = true; break; case "half-day": case "quarter-day": case "hour": interval = getHourInterval(approxInterval); getterName = hoursGetterName(isUTC); setterName = hoursSetterName(isUTC); break; case "minute": interval = getMinutesAndSecondsInterval(approxInterval, true); getterName = minutesGetterName(isUTC); setterName = minutesSetterName(isUTC); break; case "second": interval = getMinutesAndSecondsInterval(approxInterval, false); getterName = secondsGetterName(isUTC); setterName = secondsSetterName(isUTC); break; case "millisecond": interval = getMillisecondsInterval(approxInterval); getterName = millisecondsGetterName(isUTC); setterName = millisecondsSetterName(isUTC); } if (endTick >= extent[0] && startTick <= extent[1]) addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks); if (unitName === "year" && levelTicks.length > 1 && i === 0) levelTicks.unshift({ value: levelTicks[0].value - interval }); } for (var i = 0; i < newAddedTicks.length; i++) levelTicks.push(newAddedTicks[i]); } var levelsTicks = []; var currentLevelTicks = []; var tickCount = 0; var lastLevelTickCount = 0; for (var i = 0; i < unitNames.length; ++i) { var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]); if (!isPrimaryTimeUnit(unitNames[i])) continue; addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks); if (primaryTimeUnit !== (unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null)) { if (currentLevelTicks.length) { lastLevelTickCount = tickCount; currentLevelTicks.sort(function(a, b) { return a.value - b.value; }); var levelTicksRemoveDuplicated = []; for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) { var tickValue = currentLevelTicks[i_1].value; if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) { levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]); if (tickValue >= extent[0] && tickValue <= extent[1]) tickCount++; } } var targetTickNum = innermostSpan / approxInterval; if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) break; levelsTicks.push(levelTicksRemoveDuplicated); if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) break; } currentLevelTicks = []; } } var levelsTicksInExtent = filter(map$1(levelsTicks, function(levelTicks) { return filter(levelTicks, function(tick) { return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd; }); }), function(levelTicks) { return levelTicks.length > 0; }); var maxLevel = levelsTicksInExtent.length - 1; var ticks = []; for (var i = 0; i < levelsTicksInExtent.length; ++i) { var levelTicks = levelsTicksInExtent[i]; for (var k = 0; k < levelTicks.length; ++k) { var unit = getUnitFromValue(levelTicks[k].value, isUTC); ticks.push({ value: levelTicks[k].value, time: { level: maxLevel - i, upperTimeUnit: unit, lowerTimeUnit: unit } }); } } removeDuplicates(ticks, removeDuplicatesGetKeyFromValueProp, null); ticks.sort(function(a, b) { return a.value - b.value; }); var currMinTick = ticks[0]; var currMaxTick = ticks[ticks.length - 1]; var extent0Unit = getUnitFromValue(extent[0], isUTC); var extent1Unit = getUnitFromValue(extent[1], isUTC); if (!currMinTick || currMinTick.value > extent[0]) ticks.unshift({ value: extent[0], time: { level: 0, upperTimeUnit: extent0Unit, lowerTimeUnit: extent0Unit }, notNice: true }); if (!currMaxTick || currMaxTick.value < extent[1]) ticks.push({ value: extent[1], time: { level: 0, upperTimeUnit: extent1Unit, lowerTimeUnit: extent1Unit }, notNice: true }); return ticks; } var calcNiceForTimeScale = function(scale, opt) { var extent = scale.getExtent(); if (extent[0] === extent[1]) { extent[0] -= ONE_DAY; extent[1] += ONE_DAY; } if (extent[1] === -Infinity && extent[0] === Infinity) { var d = /* @__PURE__ */ new Date(); extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate()); extent[0] = extent[1] - ONE_DAY; } scale.setExtent(extent[0], extent[1]); var splitNumber = ensureValidSplitNumber(opt.splitNumber, 10); var approxInterval = getScaleLinearSpanEffective(scale) / splitNumber; var minInterval = opt.minInterval; var maxInterval = opt.maxInterval; if (minInterval != null && approxInterval < minInterval) approxInterval = minInterval; if (maxInterval != null && approxInterval > maxInterval) approxInterval = maxInterval; var scaleIntervalsLen = scaleIntervals.length; var idx = Math.min(bisect(scaleIntervals, approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1); var interval = scaleIntervals[idx][1]; var minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0]; scale.setTimeInterval({ approxInterval, interval, minLevelUnit }); }; Scale.registerClass(TimeScale); //#endregion //#region node_modules/echarts/lib/scale/Log.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LOOKUP_IDX_EXTENT_START = 0; var LOOKUP_IDX_EXTENT_END = 1; var LOOKUP_IDX_BREAK_START = 2; /** * @final NEVER inherit me! */ var LogScale = function(_super) { __extends(LogScale, _super); function LogScale(setting) { var _this = _super.call(this) || this; _this.type = "log"; _this.parse = IntervalScale.parse; _this.base = setting.logBase || 10; var lookupFrom = []; var lookupTo = []; var lookup = _this._lookup = { from: lookupFrom, to: lookupTo }; lookupFrom[LOOKUP_IDX_EXTENT_START] = lookupFrom[LOOKUP_IDX_EXTENT_END] = lookupTo[LOOKUP_IDX_EXTENT_START] = lookupTo[LOOKUP_IDX_EXTENT_END] = NaN; decorateScaleMapper(_this, LogScale.mapperMethods); var scaleBreakHelper = getScaleBreakHelper(); var breakOption = setting.breakOption; var out = { lookup }; if (scaleBreakHelper) scaleBreakHelper.parseAxisBreakOptionInwardTransform(breakOption, _this, { noNegative: true }, LOOKUP_IDX_BREAK_START, out); _this.powStub = new IntervalScale({ breakParsed: out.original }); _this.intervalStub = new IntervalScale({ breakParsed: out.transformed }); enableScaleMapperFreeze(_this, _this.intervalStub); return _this; } LogScale.prototype.getTicks = function(opt) { var base = this.base; var powStub = this.powStub; var scaleBreakHelper = getScaleBreakHelper(); var intervalStub = this.intervalStub; var powOpt = { lookup: { from: intervalStub.getExtent(), to: powStub.getExtent() } }; return map$1(intervalStub.getTicks(opt || {}), function(tick) { var val = tick.value; var powVal = logScalePowTick(val, base, powOpt); var vBreak; if (scaleBreakHelper) { var brkPowResult = scaleBreakHelper.getTicksBreakOutwardTransform(this, tick, getBreaksUnsafe(powStub), this._lookup); if (brkPowResult) { vBreak = brkPowResult.vBreak; powVal = brkPowResult.tickVal; } } return { value: powVal, "break": vBreak }; }, this); }; LogScale.prototype.getMinorTicks = function(splitNumber) { return getMinorTicks(this, splitNumber, getBreaksUnsafe(this.powStub), this.intervalStub.getConfig().interval); }; LogScale.prototype.getLabel = function(data, opt) { return this.intervalStub.getLabel(data, opt); }; LogScale.type = "log"; LogScale.mapperMethods = { needTransform: function() { return true; }, normalize: function(val) { return this.intervalStub.normalize(logScaleLogTick(val, this.base)); }, scale: function(val) { return logScalePowTick(this.intervalStub.scale(val), this.base, null); }, transformIn: function(val, opt) { val = logScaleLogTick(val, this.base); return opt && opt.depth === 2 ? val : this.intervalStub.transformIn(val, opt); }, transformOut: function(val, opt) { var depth = opt ? opt.depth : null; tmpTransformOutOpt1.depth = depth; tmpTransformOutOpt2.lookup = this._lookup; return logScalePowTick(depth === 2 ? val : this.intervalStub.transformOut(val, tmpTransformOutOpt1), this.base, tmpTransformOutOpt2); }, contain: function(val) { return this.powStub.contain(val); }, /** * NOTICE: The caller should ensure `start` and `end` are both non-negative. */ setExtent: function(start, end) { this.setExtent2(0, start, end); }, setExtent2: function(kind, start, end) { if (!isValidBoundsForExtent(start, end) || start <= 0 || end <= 0) return; var lookupTo = tmpNotUsedArr; var lookupFrom = tmpNotUsedArr; if (kind === 0) { var lookup = this._lookup; lookupTo = lookup.to; lookupFrom = lookup.from; } this.powStub.setExtent2(kind, lookupTo[LOOKUP_IDX_EXTENT_START] = start, lookupTo[LOOKUP_IDX_EXTENT_END] = end); var base = this.base; this.intervalStub.setExtent2(kind, lookupFrom[LOOKUP_IDX_EXTENT_START] = logScaleLogTick(start, base), lookupFrom[LOOKUP_IDX_EXTENT_END] = logScaleLogTick(end, base)); }, getFilter: function() { return { g: 0 }; }, sanitize: function(value, dataExtent) { if (isValidBoundsForExtent(dataExtent[0], dataExtent[1]) && isNullableNumberFinite(value) && value <= 0) value = dataExtent[0]; return value; }, getDefaultStartValue: function() { return 1; }, getExtent: function() { return this.powStub.getExtent(); }, getExtentUnsafe: function(kind, depth) { return depth === null ? this.powStub.getExtentUnsafe(kind, null) : this.intervalStub.getExtentUnsafe(kind, depth); } }; return LogScale; }(Scale); Scale.registerClass(LogScale); var tmpTransformOutOpt1 = {}; var tmpTransformOutOpt2 = {}; var tmpNotUsedArr = []; //#endregion //#region node_modules/echarts/lib/coord/axisCommonTypes.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var AXIS_TYPES = { value: 1, category: 1, time: 1, log: 1 }; //#endregion //#region node_modules/echarts/lib/coord/axisHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var axisInner$1 = makeInner(); function determineAxisType(model) { var type = model.get("type"); if (type == null || !hasOwn(AXIS_TYPES, type) && !Scale.getClass(type)) type = "value"; return type; } function createScaleByModel(model, type, coordSysSupportAxisBreaks) { var breakHelper = getScaleBreakHelper(); var breakOption; if (breakHelper) breakOption = retrieveAxisBreaksOption(model, type, coordSysSupportAxisBreaks); switch (type) { case "category": return new OrdinalScale({ ordinalMeta: model.getOrdinalMeta ? model.getOrdinalMeta() : model.getCategories(), extent: initExtentForUnion() }); case "time": return new TimeScale({ locale: model.ecModel.getLocaleModel(), useUTC: model.ecModel.get("useUTC"), breakOption }); case "log": return new LogScale({ logBase: model.get("logBase"), breakOption }); case "value": return new IntervalScale({ breakOption }); default: return new ((Scale.getClass(type)) || IntervalScale)({}); } } /** * Check if the axis cross a specific value. */ function getScaleValuePositionKind(scale, value, considerMappingExtent) { var dataExtent = considerMappingExtent ? getScaleExtentForMappingUnsafe(scale, null) : scale.getExtentUnsafe(0, null); var min = dataExtent[0]; var max = dataExtent[1]; return !isValidBoundsForExtent(min, max) ? 3 : min === value || max === value ? 2 : min < value && max > value ? 1 : 3; } function discourageOnAxisZero(axis) { axisInner$1(axis).noOnMyZero = true; } /** * `true`: Prevent orthoganal axes from positioning at the zero point of this axis. */ function isOnAxisZeroDiscouraged(axis) { return axisInner$1(axis).noOnMyZero; } /** * @param axis * @return Label formatter function. * param: {number} tickValue, * param: {number} idx, the index in all ticks. * If category axis, this param is not required. * return: {string} label string. */ function makeLabelFormatter(axis) { var labelFormatter = axis.getLabelModel().get("formatter"); if (axis.type === "time") { var parsed_1 = parseTimeAxisLabelFormatter(labelFormatter); return function(tick, idx) { return axis.scale.getFormattedLabel(tick, idx, parsed_1); }; } else if (isString(labelFormatter)) return function(tick) { var label = axis.scale.getLabel(tick); return labelFormatter.replace("{value}", label != null ? label : ""); }; else if (isFunction(labelFormatter)) { if (axis.type === "category") return function(tick, idx) { return labelFormatter(getAxisRawValue(axis, tick), tick.value - axis.scale.getExtent()[0], null); }; var scaleBreakHelper_1 = getScaleBreakHelper(); return function(tick, idx) { var extra = null; if (scaleBreakHelper_1) extra = scaleBreakHelper_1.makeAxisLabelFormatterParamBreak(extra, tick["break"]); return labelFormatter(getAxisRawValue(axis, tick), idx, extra); }; } else return function(tick) { return axis.scale.getLabel(tick); }; } function getAxisRawValue(axis, tick) { var scale = axis.scale; return isOrdinalScale(scale) ? scale.getLabel(tick) : tick.value; } /** * @param model axisLabelModel or axisTickModel */ function getOptionCategoryInterval(model) { var interval = model.get("interval"); return interval == null ? "auto" : interval; } /** * Set `categoryInterval` as 0 implicitly indicates that * show all labels regardless of overlap. * @param {Object} axis axisModel.axis */ function shouldShowAllLabels(axis) { return axis.type === "category" && getOptionCategoryInterval(axis.getLabelModel()) === 0; } function getDataDimensionsOnAxis(data, axisDim) { var dataDimMap = {}; each$12(data.mapDimensionsAll(axisDim), function(dataDim) { dataDimMap[getStackedDimension(data, dataDim)] = true; }); return keys(dataDimMap); } function isNameLocationCenter(nameLocation) { return nameLocation === "middle" || nameLocation === "center"; } function shouldAxisShow(axisModel) { return axisModel.getShallow("show"); } function retrieveAxisBreaksOption(model, axisType, coordSysSupportAxisBreaks) { var option = model.get("breaks", true); if (option != null) { if (!getScaleBreakHelper()) { error("Must `import {AxisBreak} from \"echarts/features.js\"; use(AxisBreak);` first if using breaks option."); return; } if (!coordSysSupportAxisBreaks || !isAxisTypeSupportAxisBreak(axisType)) { error("Axis" + (model instanceof ComponentModel ? " " + model.type + "[" + model.componentIndex + "]" : "") + " does not support break."); return; } return option; } } function isAxisTypeSupportAxisBreak(axisType) { return axisType !== "category"; } function updateIntervalOrLogScaleForNiceOrAligned(scale, fixMinMax, oldIntervalExtent, newIntervalExtent, oldOutermostExtent, cfg) { var isTargetLogScale = isLogScale(scale); var intervalStub = isTargetLogScale ? scale.intervalStub : scale; intervalStub.setExtent(newIntervalExtent[0], newIntervalExtent[1]); if (isTargetLogScale) { var powStub = scale.powStub; var opt = { depth: 2 }; var minPow = scale.transformOut(newIntervalExtent[0], opt); var maxPow = scale.transformOut(newIntervalExtent[1], opt); var extentChanged = extentDiffers(oldIntervalExtent, newIntervalExtent); if (fixMinMax[0] && !extentChanged[0]) minPow = oldOutermostExtent[0]; if (fixMinMax[1] && !extentChanged[1]) maxPow = oldOutermostExtent[1]; powStub.setExtent(minPow, maxPow); } intervalStub.setConfig(cfg); } function getTickValueOutermost(scale, tick) { return isOrdinalScale(scale) ? scale.getRawOrdinalNumber(tick.value) : tick.value; } function isAxisOnBand(scale, axisModel) { return isOrdinalScale(scale) && !!axisModel.get("boundaryGap"); } //#endregion //#region node_modules/echarts/lib/coord/axisModelCommonMixin.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var AxisModelCommonMixin = function() { function AxisModelCommonMixin() {} AxisModelCommonMixin.prototype.needIncludeZero = function() { return !this.option.scale; }; /** * Should be implemented by each axis model if necessary. * @return coordinate system model */ AxisModelCommonMixin.prototype.getCoordSysModel = function() {}; return AxisModelCommonMixin; }(); //#endregion //#region node_modules/echarts/lib/coord/axisStatistics.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce$5 = makeCallOnlyOnce(); var ecModelCacheFullUpdateInner = makeInner(); var ecModelCachePrepareInner = makeInner(); var validateInputAxis = function(axis) { assert(axis && axis.model && axis.model.uid && axis.model.ecModel); }; function getAxisStatPerKeyPerAxis(axis, axisStatKey) { var axisModel = axis.model; var keyed = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(axisModel.ecModel)).keyed; var perKey = keyed && keyed.get(axisStatKey); return perKey && perKey.get(axisModel.uid); } function getAxisStat(axis, axisStatKey) { assert(axisStatKey != null); validateInputAxis(axis); return wrapStatResult(getAxisStatPerKeyPerAxis(axis, axisStatKey)); } function getAxisStatBySeries(axis, seriesList) { validateInputAxis(axis); var result = []; eachKeyEachAxis(axis.model.ecModel, function(perKeyPerAxis) { for (var idx = 0; idx < seriesList.length; idx++) if (seriesList[idx] && perKeyPerAxis.serByIdx[seriesList[idx].seriesIndex]) result.push(wrapStatResult(perKeyPerAxis)); }); return result; } function eachKeyEachAxis(ecModel, cb) { var keyed = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(ecModel)).keyed; keyed && keyed.each(function(perKey, axisStatKey) { perKey.each(function(perKeyPerAxis, axisModelUid) { cb(perKeyPerAxis, axisStatKey, axisModelUid); }); }); } function wrapStatResult(record) { return { liPosMinGap: record ? record.liPosMinGap : void 0 }; } function eachSeriesOnAxis(axis, cb) { validateInputAxis(axis); var ecModel = axis.model.ecModel; var seriesOnAxisMap = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(ecModel)).axSer; seriesOnAxisMap && eachSeriesDealForAxisStat(ecModel, seriesOnAxisMap.get(axis.model.uid), cb); } /** * NOTE: * - series declaration order is respected (some ec option precedence matters, e.g., bar series). * - series filtered out are excluded. */ function eachSeriesOnAxisOnKey(axis, axisStatKey, cb) { assert(axisStatKey != null); validateInputAxis(axis); var perKeyPerAxis = getAxisStatPerKeyPerAxis(axis, axisStatKey); perKeyPerAxis && eachSeriesDealForAxisStat(axis.model.ecModel, perKeyPerAxis.sers, cb); } function eachSeriesDealForAxisStat(ecModel, seriesList, cb) { if (!seriesList) return; for (var i = 0; i < seriesList.length; i++) { var seriesModel = seriesList[i]; if (!ecModel.isSeriesFiltered(seriesModel)) cb(seriesModel); } } /** * NOTE: * - series filtered out are excluded. */ function countSeriesOnAxisOnKey(axis, axisStatKey) { assert(axisStatKey != null); validateInputAxis(axis); var perKeyPerAxis = getAxisStatPerKeyPerAxis(axis, axisStatKey); if (!perKeyPerAxis || !perKeyPerAxis.sers.length) return 0; var count = 0; eachSeriesDealForAxisStat(axis.model.ecModel, perKeyPerAxis.sers, function() { count++; }); return count; } /** * NOTICE: Available after `CoordinateSystem['create']` (not included). * * Query all axes that have at least one associated series (via `associateSeriesWithAxis`) * by the given key. */ function eachAxisOnKey(ecModel, axisStatKey, cb) { assert(axisStatKey != null); var keyed = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(ecModel)).keyed; var perKey = keyed && keyed.get(axisStatKey); perKey && perKey.each(function(perKeyPerAxis) { assert(perKeyPerAxis.sers.length > 0); cb(perKeyPerAxis.axis); }); } /** * NOTICE: Available after `CoordinateSystem['create']` (not included). * * Query all `AxisStatKey`s that have at least one associated series (via `associateSeriesWithAxis`) * by the given axis. */ function eachKeyOnAxis(axis, cb) { validateInputAxis(axis); var model = axis.model; var keysByAxisModelUid = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(model.ecModel)).keys; keysByAxisModelUid && each$12(keysByAxisModelUid.get(model.uid), function(axisStatKey) { var stat = getAxisStatPerKeyPerAxis(axis, axisStatKey); assert(stat && stat.sers.length > 0); cb(axisStatKey); }); } /** * NOTICE: this processor may be omitted - it is registered only if required. */ function performAxisStatisticsOnOverallReset(ecModel) { var ecPrepareCache = ecModelCachePrepareInner(getCachePerECPrepare(ecModel)); var ecPrepareCacheKeyed = ecPrepareCache.keyed || (ecPrepareCache.keyed = createHashMap()); eachKeyEachAxis(ecModel, function(perKeyPerAxis, axisStatKey, axisModelUid) { var ecPrepareCachePerKey = ecPrepareCacheKeyed.get(axisStatKey) || ecPrepareCacheKeyed.set(axisStatKey, createHashMap()); var ecPreparePerKeyPerAxis = ecPrepareCachePerKey.get(axisModelUid) || ecPrepareCachePerKey.set(axisModelUid, {}); if (perKeyPerAxis.metrics.liPosMinGap) _metricImpl.liPosMinGap(ecModel, perKeyPerAxis, ecPreparePerKeyPerAxis); }); } function registerMetricImpl(metricType, impl) { _metricImpl[metricType] = impl; } var _metricImpl = {}; /** * NOTICE: * - It must be called in `CoordinateSystem['create']`, before series filtering. * - It must be called in `seriesIndex` ascending order (series declaration order). * i.e., iterated by `ecModel.eachSeries`. * - Every pair can only call this method once. * * @see scaleRawExtentInfoCreate in `scaleRawExtentInfo.ts` */ function associateSeriesWithAxis(axis, seriesModel, coordSysType) { if (!axis) return; var ecModel = seriesModel.ecModel; var ecFullUpdateCache = ecModelCacheFullUpdateInner(getCachePerECFullUpdate(ecModel)); var axisModelUid = axis.model.uid; validateInputAxis(axis); var axSerPairCheck = ecFullUpdateCache.axSerPairCheck || (ecFullUpdateCache.axSerPairCheck = createHashMap()); var pairKey = "" + axisModelUid + "|&" + seriesModel.uid; assert(!axSerPairCheck.get(pairKey)); axSerPairCheck.set(pairKey, 1); var seriesOnAxisMap = ecFullUpdateCache.axSer || (ecFullUpdateCache.axSer = createHashMap()); var seriesListPerAxis = seriesOnAxisMap.get(axisModelUid) || seriesOnAxisMap.set(axisModelUid, []); var lastSeries = seriesListPerAxis[seriesListPerAxis.length - 1]; if (lastSeries) assert(lastSeries.seriesIndex < seriesModel.seriesIndex); seriesListPerAxis.push(seriesModel); var seriesType = seriesModel.subType; var isBaseAxis = seriesModel.getBaseAxis() === axis; var client = clientsForLookup.get(makeClientLookupKey(seriesType, isBaseAxis, coordSysType)) || clientsForLookup.get(makeClientLookupKey(seriesType, isBaseAxis, null)); if (!client) return; var keyed = ecFullUpdateCache.keyed || (ecFullUpdateCache.keyed = createHashMap()); var keys = ecFullUpdateCache.keys || (ecFullUpdateCache.keys = createHashMap()); var axisStatKey = client.key; var perKey = keyed.get(axisStatKey) || keyed.set(axisStatKey, createHashMap()); var perKeyPerAxis = perKey.get(axisModelUid); if (!perKeyPerAxis) { perKeyPerAxis = perKey.set(axisModelUid, { axis, sers: [], serByIdx: [] }); perKeyPerAxis.metrics = client.getMetrics(axis); (keys.get(axisModelUid) || keys.set(axisModelUid, [])).push(axisStatKey); } perKeyPerAxis.sers.push(seriesModel); perKeyPerAxis.serByIdx[seriesModel.seriesIndex] = seriesModel; } /** * NOTE: Currently, the scenario is simple enough to look up clients by hash map. * Otherwise, a caller-provided `filter` may be an alternative if more complex requirements arise. */ function makeClientLookupKey(seriesType, isBaseAxis, coordSysType) { return seriesType + "|&" + retrieve2(isBaseAxis, true) + "|&" + (coordSysType || ""); } /** * NOTICE: Can only be called in "install" stage. * * See `axisSnippets.ts` for some commonly used clients. */ function requireAxisStatistics(registers, client) { var clientKey = makeClientLookupKey(client.seriesType, client.baseAxis, client.coordSysType); assert(client.seriesType && client.key && !clientsForCheckingStatKey.get(client.key) && !clientsForLookup.get(clientKey)); clientsForCheckingStatKey.set(client.key, 1); clientsForLookup.set(clientKey, client); callOnlyOnce$5(registers, function() { registers.registerProcessor(registers.PRIORITY.PROCESSOR.AXIS_STATISTICS, { overallReset: performAxisStatisticsOnOverallReset }); }); } var clientsForCheckingStatKey = createHashMap(); var clientsForLookup = createHashMap(); //#endregion //#region node_modules/echarts/lib/coord/scaleRawExtentInfo.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * NOTICE: Can be only used in `ensureScaleStore(axisLike)`. * * In most cases the instances of `Axis` and `Scale` are one-to-one mapping and share the same lifecycle. * But in some external usage (such as echarts-gl), axis instance does not necessarily exist, and only * scale instance and axisModel are used. Therefore we store the internal info on scale instance directly. */ var scaleInner = makeInner(); var AXIS_EXTENT_INFO_BUILD_FROM_EMPTY = 3; var ScaleRawExtentInfo = function() { function ScaleRawExtentInfo(scale, model, dataExtent, requireStartValue, requireContainShape) { var isOrdinal = isOrdinalScale(scale); var axisDataLen = isOrdinal ? model.getCategories().length : null; var categoryAxisModelDataIsEmptyArray; if (isOrdinal) { var axisModelDataArray = model.getCategories(true); categoryAxisModelDataIsEmptyArray = axisModelDataArray && !axisModelDataArray.length; } var dataMM = dataExtent.slice(); if (isIntervalScale(scale) || isLogScale(scale) || isTimeScale(scale)) { unionExtentStartFromNumber(dataMM, parseAxisModelMinMax(scale, model.get("dataMin", true))); unionExtentEndFromNumber(dataMM, parseAxisModelMinMax(scale, model.get("dataMax", true))); } if (!extentHasValue(dataMM)) dataMM[0] = dataMM[1] = NaN; var noZoomEffMM = []; var fixMM = [false, false]; var modelMinRaw = model.get("min", true); if (modelMinRaw === "dataMin") { noZoomEffMM[0] = dataMM[0]; fixMM[0] = true; } else { noZoomEffMM[0] = parseAxisModelMinMax(scale, isFunction(modelMinRaw) ? modelMinRaw({ min: dataMM[0], max: dataMM[1] }) : modelMinRaw); fixMM[0] = noZoomEffMM[0] != null; } var modelMaxRaw = model.get("max", true); if (modelMaxRaw === "dataMax") { noZoomEffMM[1] = dataMM[1]; fixMM[1] = true; } else { noZoomEffMM[1] = parseAxisModelMinMax(scale, isFunction(modelMaxRaw) ? modelMaxRaw({ min: dataMM[0], max: dataMM[1] }) : modelMaxRaw); fixMM[1] = noZoomEffMM[1] != null; } var boundaryGap = parseBoundaryGapOption(scale, model); var span = !isOrdinal ? dataMM[1] - dataMM[0] || Math.abs(dataMM[0]) : null; if (noZoomEffMM[0] == null) noZoomEffMM[0] = isOrdinal ? categoryAxisModelDataIsEmptyArray ? dataMM[0] : axisDataLen ? 0 : NaN : dataMM[0] - boundaryGap[0] * span; if (noZoomEffMM[1] == null) noZoomEffMM[1] = isOrdinal ? categoryAxisModelDataIsEmptyArray ? dataMM[1] : axisDataLen ? axisDataLen - 1 : NaN : dataMM[1] + boundaryGap[1] * span; !isValidNumberForExtent(noZoomEffMM[0]) && (noZoomEffMM[0] = NaN); !isValidNumberForExtent(noZoomEffMM[1]) && (noZoomEffMM[1] = NaN); var isBlank = categoryAxisModelDataIsEmptyArray || eqNaN(noZoomEffMM[0]) || eqNaN(noZoomEffMM[1]) || isOrdinal && !axisDataLen; var needIncludeZeroApplicable = isIntervalScale(scale); var needIncludeZero = needIncludeZeroApplicable && model.needIncludeZero && model.needIncludeZero(); if (needIncludeZero) { if (noZoomEffMM[0] > 0 && noZoomEffMM[1] > 0 && !fixMM[0]) noZoomEffMM[0] = 0; if (noZoomEffMM[0] < 0 && noZoomEffMM[1] < 0 && !fixMM[1]) noZoomEffMM[1] = 0; } var needToggleAxisInverse = false; if (noZoomEffMM[0] > noZoomEffMM[1]) { noZoomEffMM.reverse(); needToggleAxisInverse = true; } var startValue = parseAxisModelMinMax(scale, model.get("startValue", true)); var startValueSpecified = startValue != null; if (!isNullableNumberFinite(startValue) && requireStartValue) startValue = scale.getDefaultStartValue ? scale.getDefaultStartValue() : 0; if (isNullableNumberFinite(startValue) && (startValueSpecified || !needIncludeZeroApplicable || needIncludeZero)) { if (startValue < noZoomEffMM[0] && !fixMM[0]) { noZoomEffMM[0] = startValue; fixMM[0] = true; } else if (startValue > noZoomEffMM[1] && !fixMM[1]) { noZoomEffMM[1] = startValue; fixMM[1] = true; } } sanitizeExtent(this._i = { scale, dataMM, noZoomEffMM, zoomMM: [], fixMM, zoomFixMM: [false, false], startValue, isBlank, incl0: needIncludeZero, tggAxInv: needToggleAxisInverse, ctnShp: requireContainShape }, noZoomEffMM); } ScaleRawExtentInfo.prototype.makeNoZoom = function() { return this._i.noZoomEffMM.slice(); }; ScaleRawExtentInfo.prototype.makeFinal = function() { var internal = this._i; var zoomMM = internal.zoomMM; var noZoomEffMM = internal.noZoomEffMM; var zoomFixMM = internal.zoomFixMM; var fixMM = internal.fixMM; var result = { fixMM, zoomFixMM, isBlank: internal.isBlank, incl0: internal.incl0, tggAxInv: internal.tggAxInv, ctnShp: internal.ctnShp, effMM: noZoomEffMM.slice() }; var effMM = result.effMM; if (zoomMM[0] != null) { effMM[0] = zoomMM[0]; fixMM[0] = zoomFixMM[0] = true; } if (zoomMM[1] != null) { effMM[1] = zoomMM[1]; fixMM[1] = zoomFixMM[1] = true; } sanitizeExtent(internal, effMM); return result; }; ScaleRawExtentInfo.prototype.makeRenderInfo = function() { return { startValue: this._i.startValue }; }; /** * NOTICE: * - Do not set them if the percent are 0% or 100%. (See `AxisProxy['reset']`.) * - The caller must ensure `start <= end` and the range is equal or less then `noZoomEffMM`. * (See `AxisProxy['calculateDataWindow']`.) * - The outcome `_zoomMM` may have both `NullUndefined` and a finite value, like `[undefined, 123]`. */ ScaleRawExtentInfo.prototype.setZoomMM = function(idxMinMax, val) { this._i.zoomMM[idxMinMax] = val; }; return ScaleRawExtentInfo; }(); /** * Should be called when a new extent is created or modified. */ function sanitizeExtent(internal, mm) { var scale = internal.scale; var dataMM = internal.dataMM; if (scale.sanitize) { mm[0] = scale.sanitize(mm[0], dataMM); mm[1] = scale.sanitize(mm[1], dataMM); ensureExtentAscSimply(mm); } } function parseAxisModelMinMax(scale, minMax) { return minMax == null ? null : eqNaN(minMax) ? NaN : scale.parse(minMax); } function parseBoundaryGapOption(scale, model) { var boundaryGapOptionArr; if (isOrdinalScale(scale)) boundaryGapOptionArr = [0, 0]; else { var boundaryGap = model.get("boundaryGap"); if (typeof boundaryGap === "boolean") { if (boundaryGap === true) console.warn("Boolean type for boundaryGap is only allowed for ordinal axis. Please use string in percentage instead, e.g., \"20%\". Currently, boundaryGap is set to 0."); boundaryGap = null; } boundaryGapOptionArr = isArray$1(boundaryGap) ? boundaryGap : [boundaryGap, boundaryGap]; } return [parseBoundaryGapOptionItem(boundaryGapOptionArr[0]), parseBoundaryGapOptionItem(boundaryGapOptionArr[1])]; } function parseBoundaryGapOptionItem(opt) { return parsePercent$1(typeof opt === "boolean" ? 0 : opt, 1) || 0; } /** * NOTE: `associateSeriesWithAxis` is not necessarily called, e.g., when * an axis is not used by any series. */ function ensureScaleStore(axisLike) { var store = scaleInner(axisLike.scale); if (!store.extent) store.extent = initExtentForUnion(); return store; } /** * This supports union extent on case like: pie (or other similar series) * lays out on cartesian2d. * @see scaleRawExtentInfoCreate */ function scaleRawExtentInfoEnableBoxCoordSysUsage(axisLike, coordSysDimIdxMap) { ensureScaleStore(axisLike).dimIdxInCoord = coordSysDimIdxMap.get(axisLike.dim); } /** * @usage * class SomeCoordSys { * static create() { * ecModel.eachSeries(function (seriesModel) { * associateSeriesWithAxis(axis1, seriesModel, ...); * associateSeriesWithAxis(axis2, seriesModel, ...); * // ... * }); * } * update() { * scaleRawExtentInfoCreate(axis1); * scaleRawExtentInfoCreate(axis2); * } * } * class AxisProxy { * reset() { * scaleRawExtentInfoCreate(axis1); * } * } * * NOTICE: * - `associateSeriesWithAxis`(in `axisStatistics.ts`) should be called in: * - Coord sys create method. * - `scaleRawExtentInfoCreate` should be typically called in: * - `dataZoom` processor. It requires processing like: * 1. Filter series data by dataZoom1; * 2. Union the filtered data and init the extent of the orthogonal axes, which is the 100% of dataZoom2; * 3. Filter series data by dataZoom2; * 4. ... * - Coord sys update method, for other axes that not covered by `dataZoom`. * NOTE: If a `dataZoom` covers this series, this data and its extent has been dataZoom-filtered. * Therefore this handling should not before `dataZoom`. * - The callback of `min`/`max` in ec option should NOT be called multiple times, * therefore, we initialize `ScaleRawExtentInfo` uniformly in `scaleRawExtentInfoCreate`. * * @see SCALE_EXTENT_CONSTRUCTION for the full processing flow. */ function scaleRawExtentInfoCreate(axis, from) { var scale = axis.scale; var model = axis.model; var axisDim = axis.dim; assert(scale && model && axisDim); if (scale.rawExtentInfo) { assert(scale.rawExtentInfo.from !== from || from === 2); return; } scaleRawExtentInfoCreateDeal(scale, axis, axisDim, model, from); } function scaleRawExtentInfoCreateDeal(scale, axis, axisDim, model, from) { var scaleStore = ensureScaleStore(axis); var extent = scaleStore.extent; var requireStartValue = false; eachSeriesOnAxis(axis, function(seriesModel) { if (seriesModel.boxCoordinateSystem) { var coord = getCoordForCoordSysUsageKindBox(seriesModel).coord; var dimIdx = scaleStore.dimIdxInCoord; if (!(dimIdx >= 0)) error("Property \"series.coord\" is not supported on axis " + seriesModel.boxCoordinateSystem.type + "."); else if (isArray$1(coord)) { var coordItem = coord[dimIdx]; if (coordItem != null && !isArray$1(coordItem)) unionExtentFromNumber(extent, scale.parse(coordItem)); } } else if (seriesModel.coordinateSystem) { var data_1 = seriesModel.getData(); if (data_1) { var filter_1 = scale.getFilter ? scale.getFilter() : null; each$12(getDataDimensionsOnAxis(data_1, axisDim), function(dim) { unionExtentFromExtent(extent, data_1.getApproximateExtent(dim, filter_1)); }); } if (seriesModel.__requireStartValue && seriesModel.__requireStartValue(axis)) requireStartValue = true; } }); var requireContainShape = determineRequireContainShape(scale, axis, model); injectScaleRawExtentInfo(scale, new ScaleRawExtentInfo(scale, model, extent, requireStartValue, requireContainShape), from); scaleStore.extent = null; } /** * `rawExtentInfo` may not be created in some cases, such as no series declared or extra useless * axes declared in ec option. In this case we still create a default one for that empty axis. */ function scaleRawExtentInfoBuildDefault(axisLike, dataExtent) { var scale = axisLike.scale; assert(!scale.rawExtentInfo); injectScaleRawExtentInfo(scale, new ScaleRawExtentInfo(scale, axisLike.model, dataExtent, false, false), AXIS_EXTENT_INFO_BUILD_FROM_EMPTY); } function injectScaleRawExtentInfo(scale, scaleRawExtentInfo, from) { scale.rawExtentInfo = scaleRawExtentInfo; scaleRawExtentInfo.from = from; } /** * See `axisSnippets.ts` for some commonly used handlers. * * FIXME: * `boundaryGap: true` (i.e., `onBand: true` in code) has long been supported on category axis. * And it is implemented in different code and not merged to this implementation yet. */ function registerAxisContainShapeHandler(axisStatKey, handler) { assert(!axisContainShapeHandlerMap.get(axisStatKey)); axisContainShapeHandlerMap.set(axisStatKey, handler); } var axisContainShapeHandlerMap = createHashMap(); /** * Prepare axis scale extent before "nice". * Item of returned array can only be number (including Infinity and NaN). */ function adoptScaleRawExtentInfoAndPrepare(scale, model, ecModel, axis, externalDataExtent) { assert(!externalDataExtent || !scale.rawExtentInfo); if (!scale.rawExtentInfo) scaleRawExtentInfoBuildDefault({ scale, model }, externalDataExtent || initExtentForUnion()); var rawExtentResult = scale.rawExtentInfo.makeFinal(); var effectiveMinMax = rawExtentResult.effMM; scale.setExtent(effectiveMinMax[0], effectiveMinMax[1]); scale.setBlank(rawExtentResult.isBlank); if (axis && rawExtentResult.tggAxInv && ecModel && !ecModel.get("legacyMinMaxDontInverseAxis")) axis.inverse = !axis.inverse; return rawExtentResult; } function determineRequireContainShape(scale, axis, model) { var onBand = isAxisOnBand(scale, model); var modelContainShape = model.get("containShape", true); if (modelContainShape == null && !onBand) modelContainShape = true; if (!modelContainShape) return false; var requireContainShape = false; eachKeyOnAxis(axis, function(axisStatKey) { requireContainShape = !!axisContainShapeHandlerMap.get(axisStatKey) || requireContainShape; }); return requireContainShape; } /** * This implements ec option `someAxis.containShape`. That is, expand scale extent slightly to * ensure shapes of specific series are fully contained in the axis extent without overflow. * * NOTICE: * Scale extent (data extent) and axis pixel extent (pixel extent) and are required as inputs. * - See BAND_WIDTH_USED_SCALE_LINEAR_SPAN. * - Axis pixel extent has been set outside, though it may be modified later (e.g., via `outerBounds`). * * @tutorial [AXIS_CONTAIN_SHAPE_PROCESSING_ORDER] * This is a trade-off between the following 2 approaches: * - Steps: (the current implementation) * 1. Process `dataZoom` based on a full window `noZoomEffMM`. * 2. Perform "nice" or "align" scale, where `intervalScaleEnsureValidExtent`-ish may be performed to * expand extent to avoid `extent[0] === extent[1]`. * 3. Calculate linear supplement of containShape based on the final result. * Cons: * - Abrupt changes occur when zooming away from 0% or 100%. * - Edge shapes are clipped in "dataZoom shadow". * - Steps: (discarded) * 1. Calculate linear supplement of containShape based on `noZoomEffMM` and * `intervalScaleEnsureValidExtent`-ish. * 2. Process `dataZoom` based on a full window `noZoomEffMM + linearSupplement`. * 3. Perform "nice"/"align" scale. * Cons: * - Input `startValue: 0` (in ec option or action) does not corresponds to `0%`, which is unacceptable. * - Not easy to perform `intervalScaleEnsureValidExtent`-ish before "nice"/"align" processing. * * @see SCALE_EXTENT_CONSTRUCTION for the full processing flow. */ function adoptScaleExtentKindMapping(axis, scale, rawExtentResult, ecModel) { if (!rawExtentResult.ctnShp) return; var linearSupplement; eachKeyOnAxis(axis, function(axisStatKey) { var handler = axisContainShapeHandlerMap.get(axisStatKey); if (handler) { var singleLinearSupplement = handler(axis, ecModel); if (singleLinearSupplement) { linearSupplement = linearSupplement || [0, 0]; unionExtentStartFromNumber(linearSupplement, singleLinearSupplement[0]); unionExtentEndFromNumber(linearSupplement, singleLinearSupplement[1]); discourageOnAxisZero(axis); } } }); if (!linearSupplement) return; var scaleExtent = scale.getExtent(); if (isOrdinalScale(scale)) { if (!axis.onBand) scale.setExtent2(1, mathMin$9(scaleExtent[0], scaleExtent[0] + linearSupplement[0]), mathMax$9(scaleExtent[1], scaleExtent[1] + linearSupplement[1])); } else { var scaleExtentExpanded = scaleExtent.slice(); if (!rawExtentResult.zoomFixMM[0]) scaleExtentExpanded[0] = mathMin$9(scaleExtentExpanded[0], scale.transformOut(scale.transformIn(scaleExtentExpanded[0], null) + linearSupplement[0], null)); if (!rawExtentResult.zoomFixMM[1]) scaleExtentExpanded[1] = mathMax$9(scaleExtentExpanded[1], scale.transformOut(scale.transformIn(scaleExtentExpanded[1], null) + linearSupplement[1], null)); if (scaleExtentExpanded[0] < scaleExtent[0] || scaleExtentExpanded[1] > scaleExtent[1]) scale.setExtent2(1, scaleExtentExpanded[0], scaleExtentExpanded[1]); } } //#endregion //#region node_modules/echarts/lib/coord/axisNiceTicks.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function calcNiceForIntervalOrLogScale(scale, opt) { var isTargetLogScale = isLogScale(scale); var intervalStub = isTargetLogScale ? scale.intervalStub : scale; var fixMinMax = opt.fixMinMax || []; var oldOutermostExtent = isTargetLogScale ? scale.getExtent() : null; var oldIntervalExtent = intervalStub.getExtent(); var newIntervalExtent = intervalScaleEnsureValidExtent(oldIntervalExtent, fixMinMax, opt.rawExtentResult); intervalStub.setExtent(newIntervalExtent[0], newIntervalExtent[1]); newIntervalExtent = intervalStub.getExtent(); var config = isTargetLogScale ? logScaleCalcNiceTicks(intervalStub, opt) : intervalScaleCalcNiceTicks(intervalStub, opt); var autoIntervalPrecision = config.intervalPrecision; var autoInterval = config.interval; var userInterval = opt.userInterval; if (userInterval != null) { config.interval = userInterval; config.intervalPrecision = getIntervalPrecision(userInterval); } if (!fixMinMax[0]) newIntervalExtent[0] = round$3(mathFloor(newIntervalExtent[0] / autoInterval) * autoInterval, autoIntervalPrecision); if (!fixMinMax[1]) newIntervalExtent[1] = round$3(mathCeil(newIntervalExtent[1] / autoInterval) * autoInterval, autoIntervalPrecision); if (userInterval != null) config.niceExtent = newIntervalExtent.slice(); updateIntervalOrLogScaleForNiceOrAligned(scale, fixMinMax, oldIntervalExtent, newIntervalExtent, oldOutermostExtent, config); } function intervalScaleCalcNiceTicks(scale, opt) { var splitNumber = ensureValidSplitNumber(opt.splitNumber, 5); var span = getScaleLinearSpanEffective(scale); assert(isFinite(span) && span > 0); var minInterval = opt.minInterval; var maxInterval = opt.maxInterval; var interval = nice(span / splitNumber, true); if (minInterval != null && interval < minInterval) interval = minInterval; if (maxInterval != null && interval > maxInterval) interval = maxInterval; var intervalPrecision = getIntervalPrecision(interval); var extent = scale.getExtent(); var niceExtent = [round$3(mathCeil(extent[0] / interval) * interval, intervalPrecision), round$3(mathFloor(extent[1] / interval) * interval, intervalPrecision)]; return { interval, intervalPrecision, niceExtent }; } function logScaleCalcNiceTicks(intervalStub, opt) { var splitNumber = ensureValidSplitNumber(opt.splitNumber, 10); var intervalExtent = intervalStub.getExtent(); var span = getScaleLinearSpanEffective(intervalStub); assert(isFinite(span) && span > 0); var interval = mathMax$9(quantity(span), 1); if (splitNumber / span * interval <= .5) interval *= 10; var intervalPrecision = getIntervalPrecision(interval); var niceExtent = [round$3(mathCeil(intervalExtent[0] / interval) * interval, intervalPrecision), round$3(mathFloor(intervalExtent[1] / interval) * interval, intervalPrecision)]; return { intervalPrecision, interval, niceExtent }; } /** * NOTE: See the summary of the process of extent determination in the comment of `scaleMapper.setExtent`. * * Calculate a "nice" extent and "nice" ticks configs based on the current scale extent and ec options. * scale extent will be modified, and config may be set to the scale. * * @see SCALE_EXTENT_CONSTRUCTION for the full processing flow. */ function scaleCalcNice(axisLike) { var scale = axisLike.scale; var model = axisLike.model; var axis = model.axis; var ecModel = model.ecModel; assert(axis && ecModel); scaleCalcNice2(scale, model, axis, ecModel, null); } /** * @see SCALE_EXTENT_CONSTRUCTION for the full processing flow. */ function scaleCalcNice2(scale, model, axis, ecModel, externalDataExtent) { var rawExtentResult = adoptScaleRawExtentInfoAndPrepare(scale, model, ecModel, axis, externalDataExtent); var isIntervalOrTime = isIntervalScale(scale) || isTimeScale(scale); scaleCalcNiceDirectly(scale, { splitNumber: model.get("splitNumber"), fixMinMax: rawExtentResult.fixMM, userInterval: model.get("interval"), minInterval: isIntervalOrTime ? model.get("minInterval") : null, maxInterval: isIntervalOrTime ? model.get("maxInterval") : null, rawExtentResult }); if (axis && ecModel) adoptScaleExtentKindMapping(axis, scale, rawExtentResult, ecModel); scale.freeze(); } function scaleCalcNiceDirectly(scale, opt) { scaleCalcNiceMethods[scale.type](scale, opt); } var scaleCalcNiceMethods = { interval: calcNiceForIntervalOrLogScale, log: calcNiceForIntervalOrLogScale, time: calcNiceForTimeScale, ordinal: noop }; //#endregion //#region node_modules/echarts/lib/export/api/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * This module exposes helper functions for developing extensions. */ var helper_exports = /* @__PURE__ */ __exportAll({ createDimensions: () => createDimensions, createList: () => createList$2, createScale: () => createScale, createSymbol: () => createSymbol$1, createTextStyle: () => createTextStyle, dataStack: () => dataStack, enableHoverEmphasis: () => enableHoverEmphasis, getECData: () => getECData, getLayoutRect: () => getLayoutRect, mixinAxisModelCommonMethods: () => mixinAxisModelCommonMethods }); /** * Create a multi dimension List structure from seriesModel. */ function createList$2(seriesModel) { return createSeriesData(null, seriesModel); } var dataStack = { isDimensionStacked, enableDataStack, getStackedDimension }; /** * Externally used by echarts-gl. * Create scale * @param dataExtent * @param option If `option.type` * is specified, it can only be `'value'` currently. */ function createScale(dataExtent, option) { var axisModel = option; if (!(option instanceof Model)) axisModel = new Model(option); var axisType = determineAxisType(axisModel); var scale = createScaleByModel(axisModel, axisType, false); if (dataExtent[1] < dataExtent[0]) dataExtent = dataExtent.slice().reverse(); scaleCalcNice2(scale, axisModel, null, null, dataExtent); return scale; } /** * Mixin common methods to axis model */ function mixinAxisModelCommonMethods(Model) { mixin(Model, AxisModelCommonMixin); } function createTextStyle(textStyleModel, opts) { opts = opts || {}; return createTextStyle$1(textStyleModel, null, null, opts.state !== "normal"); } //#endregion //#region node_modules/zrender/lib/contain/polygon.js var EPSILON = 1e-8; function isAroundEqual(a, b) { return Math.abs(a - b) < EPSILON; } function contain(points, x, y) { var w = 0; var p = points[0]; if (!p) return false; for (var i = 1; i < points.length; i++) { var p2 = points[i]; w += windingLine(p[0], p[1], p2[0], p2[1], x, y); p = p2; } var p0 = points[0]; if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) w += windingLine(p[0], p[1], p0[0], p0[1], x, y); return w !== 0; } //#endregion //#region node_modules/echarts/lib/coord/geo/Region.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TMP_TRANSFORM = []; function transformPoints(points, transform) { for (var p = 0; p < points.length; p++) applyTransform$1(points[p], points[p], transform); } function updateBBoxFromPoints(points, min, max, projection) { for (var i = 0; i < points.length; i++) { var p = points[i]; if (projection) p = projection.project(p); if (p && isFinite(p[0]) && isFinite(p[1])) { min$1(min, min, p); max$1(max, max, p); } } } function centroid$1(points) { var signedArea = 0; var cx = 0; var cy = 0; var len = points.length; var x0 = points[len - 1][0]; var y0 = points[len - 1][1]; for (var i = 0; i < len; i++) { var x1 = points[i][0]; var y1 = points[i][1]; var a = x0 * y1 - x1 * y0; signedArea += a; cx += (x0 + x1) * a; cy += (y0 + y1) * a; x0 = x1; y0 = y1; } return signedArea ? [ cx / signedArea / 3, cy / signedArea / 3, signedArea ] : [points[0][0] || 0, points[0][1] || 0]; } var Region = function() { function Region(name) { this.name = name; } Region.prototype.setCenter = function(center) { this._center = center; }; /** * Get center point in data unit. That is, * for GeoJSONRegion, the unit is lat/lng, * for GeoSVGRegion, the unit is SVG local coord. */ Region.prototype.getCenter = function() { var center = this._center; if (!center) center = this._center = this.calcCenter(); return center; }; return Region; }(); var GeoJSONPolygonGeometry = function() { function GeoJSONPolygonGeometry(exterior, interiors) { this.type = "polygon"; this.exterior = exterior; this.interiors = interiors; } return GeoJSONPolygonGeometry; }(); var GeoJSONLineStringGeometry = function() { function GeoJSONLineStringGeometry(points) { this.type = "linestring"; this.points = points; } return GeoJSONLineStringGeometry; }(); var GeoJSONRegion = function(_super) { __extends(GeoJSONRegion, _super); function GeoJSONRegion(name, geometries, cp) { var _this = _super.call(this, name) || this; _this.type = "geoJSON"; _this.geometries = geometries; _this._center = cp && [cp[0], cp[1]]; return _this; } GeoJSONRegion.prototype.calcCenter = function() { var geometries = this.geometries; var largestGeo; var largestGeoSize = 0; for (var i = 0; i < geometries.length; i++) { var geo = geometries[i]; var exterior = geo.exterior; var size = exterior && exterior.length; if (size > largestGeoSize) { largestGeo = geo; largestGeoSize = size; } } if (largestGeo) return centroid$1(largestGeo.exterior); var rect = this.getBoundingRect(); return [rect.x + rect.width / 2, rect.y + rect.height / 2]; }; GeoJSONRegion.prototype.getBoundingRect = function(projection) { var rect = this._rect; if (rect && !projection) return rect; var min = [Infinity, Infinity]; var max = [-Infinity, -Infinity]; var geometries = this.geometries; each$12(geometries, function(geo) { if (geo.type === "polygon") updateBBoxFromPoints(geo.exterior, min, max, projection); else each$12(geo.points, function(points) { updateBBoxFromPoints(points, min, max, projection); }); }); if (!(isFinite(min[0]) && isFinite(min[1]) && isFinite(max[0]) && isFinite(max[1]))) min[0] = min[1] = max[0] = max[1] = 0; rect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); if (!projection) this._rect = rect; return rect; }; GeoJSONRegion.prototype.contain = function(coord) { var rect = this.getBoundingRect(); var geometries = this.geometries; if (!rect.contain(coord[0], coord[1])) return false; loopGeo: for (var i = 0, len = geometries.length; i < len; i++) { var geo = geometries[i]; if (geo.type !== "polygon") continue; var exterior = geo.exterior; var interiors = geo.interiors; if (contain(exterior, coord[0], coord[1])) { for (var k = 0; k < (interiors ? interiors.length : 0); k++) if (contain(interiors[k], coord[0], coord[1])) continue loopGeo; return true; } } return false; }; /** * Transform the raw coords to target bounding. * @param x * @param y * @param width * @param height */ GeoJSONRegion.prototype.transformTo = function(x, y, width, height) { var rect = this.getBoundingRect(); var aspect = rect.width / rect.height; if (!width) width = aspect * height; else if (!height) height = width / aspect; var target = new BoundingRect(x, y, width, height); var transform = rect.calculateTransform(target); var geometries = this.geometries; for (var i = 0; i < geometries.length; i++) { var geo = geometries[i]; if (geo.type === "polygon") { transformPoints(geo.exterior, transform); each$12(geo.interiors, function(interior) { transformPoints(interior, transform); }); } else each$12(geo.points, function(points) { transformPoints(points, transform); }); } rect = this._rect; rect.copy(target); this._center = [rect.x + rect.width / 2, rect.y + rect.height / 2]; }; GeoJSONRegion.prototype.cloneShallow = function(name) { name ??= this.name; var newRegion = new GeoJSONRegion(name, this.geometries, this._center); newRegion._rect = this._rect; newRegion.transformTo = null; return newRegion; }; return GeoJSONRegion; }(Region); var GeoSVGRegion = function(_super) { __extends(GeoSVGRegion, _super); function GeoSVGRegion(name, elOnlyForCalculate) { var _this = _super.call(this, name) || this; _this.type = "geoSVG"; _this._elOnlyForCalculate = elOnlyForCalculate; return _this; } GeoSVGRegion.prototype.calcCenter = function() { var el = this._elOnlyForCalculate; var rect = el.getBoundingRect(); var center = [rect.x + rect.width / 2, rect.y + rect.height / 2]; var mat = identity(TMP_TRANSFORM); var target = el; while (target && !target.isGeoSVGGraphicRoot) { mul(mat, target.getLocalTransform(), mat); target = target.parent; } invert(mat, mat); applyTransform$1(center, center, mat); return center; }; return GeoSVGRegion; }(Region); //#endregion //#region node_modules/echarts/lib/coord/geo/parseGeoJson.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Parse and decode geo json */ function decode(json) { if (!json.UTF8Encoding) return json; var jsonCompressed = json; var encodeScale = jsonCompressed.UTF8Scale; if (encodeScale == null) encodeScale = 1024; var features = jsonCompressed.features; each$12(features, function(feature) { var geometry = feature.geometry; var encodeOffsets = geometry.encodeOffsets; var coordinates = geometry.coordinates; if (!encodeOffsets) return; switch (geometry.type) { case "LineString": geometry.coordinates = decodeRing(coordinates, encodeOffsets, encodeScale); break; case "Polygon": decodeRings(coordinates, encodeOffsets, encodeScale); break; case "MultiLineString": decodeRings(coordinates, encodeOffsets, encodeScale); break; case "MultiPolygon": each$12(coordinates, function(rings, idx) { return decodeRings(rings, encodeOffsets[idx], encodeScale); }); } }); jsonCompressed.UTF8Encoding = false; return jsonCompressed; } function decodeRings(rings, encodeOffsets, encodeScale) { for (var c = 0; c < rings.length; c++) rings[c] = decodeRing(rings[c], encodeOffsets[c], encodeScale); } function decodeRing(coordinate, encodeOffsets, encodeScale) { var result = []; var prevX = encodeOffsets[0]; var prevY = encodeOffsets[1]; for (var i = 0; i < coordinate.length; i += 2) { var x = coordinate.charCodeAt(i) - 64; var y = coordinate.charCodeAt(i + 1) - 64; x = x >> 1 ^ -(x & 1); y = y >> 1 ^ -(y & 1); x += prevX; y += prevY; prevX = x; prevY = y; result.push([x / encodeScale, y / encodeScale]); } return result; } function parseGeoJSON(geoJson, nameProperty) { geoJson = decode(geoJson); return map$1(filter(geoJson.features, function(featureObj) { return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0; }), function(featureObj) { var properties = featureObj.properties; var geo = featureObj.geometry; var geometries = []; switch (geo.type) { case "Polygon": var coordinates = geo.coordinates; geometries.push(new GeoJSONPolygonGeometry(coordinates[0], coordinates.slice(1))); break; case "MultiPolygon": each$12(geo.coordinates, function(item) { if (item[0]) geometries.push(new GeoJSONPolygonGeometry(item[0], item.slice(1))); }); break; case "LineString": geometries.push(new GeoJSONLineStringGeometry([geo.coordinates])); break; case "MultiLineString": geometries.push(new GeoJSONLineStringGeometry(geo.coordinates)); } var region = new GeoJSONRegion(properties[nameProperty || "name"], geometries, properties.cp); region.properties = properties; return region; }); } //#endregion //#region node_modules/echarts/lib/export/api/number.js var number_exports = /* @__PURE__ */ __exportAll({ MAX_SAFE_INTEGER: () => MAX_SAFE_INTEGER, asc: () => asc$1, getPercentWithPrecision: () => getPercentWithPrecision, getPixelPrecision: () => getPixelPrecision, getPrecision: () => getPrecision, getPrecisionSafe: () => getPrecisionSafe, isNumeric: () => isNumeric, isRadianAroundZero: () => isRadianAroundZero, linearMap: () => linearMap$2, nice: () => nice, numericToNumber: () => numericToNumber, parseDate: () => parseDate, parsePercent: () => parsePercent, quantile: () => quantile, quantity: () => quantity, quantityExponent: () => quantityExponent, reformIntervals: () => reformIntervals, remRadian: () => remRadian, round: () => roundLegacy }); //#endregion //#region node_modules/echarts/lib/export/api/time.js var time_exports = /* @__PURE__ */ __exportAll({ format: () => format, parse: () => parseDate, roundTime: () => roundTime }); //#endregion //#region node_modules/echarts/lib/export/api/graphic.js var graphic_exports = /* @__PURE__ */ __exportAll({ Arc: () => Arc, BezierCurve: () => BezierCurve, BoundingRect: () => BoundingRect, Circle: () => Circle, CompoundPath: () => CompoundPath, Ellipse: () => Ellipse, Group: () => Group$3, Image: () => ZRImage, IncrementalDisplayable: () => IncrementalDisplayable, Line: () => Line$1, LinearGradient: () => LinearGradient, Polygon: () => Polygon, Polyline: () => Polyline$1, RadialGradient: () => RadialGradient, Rect: () => Rect$2, Ring: () => Ring, Sector: () => Sector, Text: () => ZRText, clipPointsByRect: () => clipPointsByRect, clipRectByRect: () => clipRectByRect, createIcon: () => createIcon, extendPath: () => extendPath, extendShape: () => extendShape, getShapeClass: () => getShapeClass, getTransform: () => getTransform$1, initProps: () => initProps, makeImage: () => makeImage, makePath: () => makePath, mergePath: () => mergePath, registerShape: () => registerShape, resizePath: () => resizePath, updateProps: () => updateProps$1 }); //#endregion //#region node_modules/echarts/lib/export/api/format.js var format_exports = /* @__PURE__ */ __exportAll({ addCommas: () => addCommas, capitalFirst: () => capitalFirst, encodeHTML: () => encodeHTML, formatTime: () => formatTime, formatTpl: () => formatTpl, getTextRect: () => getTextRect, getTooltipMarker: () => getTooltipMarker, normalizeCssArray: () => normalizeCssArray, toCamelCase: () => toCamelCase, truncateText: () => truncateText }); //#endregion //#region node_modules/echarts/lib/export/api/util.js var util_exports = /* @__PURE__ */ __exportAll({ bind: () => bind$1, clone: () => clone$4, curry: () => curry$1, defaults: () => defaults, each: () => each$12, extend: () => extend, filter: () => filter, indexOf: () => indexOf, inherits: () => inherits, isArray: () => isArray$1, isFunction: () => isFunction, isObject: () => isObject$3, isString: () => isString, map: () => map$1, merge: () => merge, reduce: () => reduce }); //#endregion //#region node_modules/echarts/lib/coord/axisTickLabelBuilder.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var modelInner = makeInner(); var axisInner = makeInner(); var AxisTickLabelComputingKind = { estimate: 1, determine: 2 }; function createAxisLabelsComputingContext(kind) { return { out: { noPxChangeTryDetermine: [] }, kind }; } /** * CAUTION: Do not modify the result. */ function createAxisLabels(axis, ctx) { var custom = axis.getLabelModel().get("customValues"); if (custom) { var scale_1 = axis.scale; return { labels: map$1(parseTickLabelCustomValues(custom, scale_1), function(tick, index) { return { formattedLabel: makeLabelFormatter(axis)(tick, index), rawLabel: scale_1.getLabel(tick), tick }; }) }; } return axis.type === "category" ? makeCategoryLabels(axis, ctx) : makeRealNumberLabels(axis); } /** * CAUTION: Do not modify the result. * * @param tickModel For example, can be axisTick, splitLine, splitArea. */ function createAxisTicks(axis, tickModel, opt) { var scale = axis.scale; var custom = axis.getTickModel().get("customValues"); if (custom) return { ticks: parseTickLabelCustomValues(custom, scale) }; return axis.type === "category" ? makeCategoryTicks(axis, tickModel) : { ticks: scale.getTicks(opt) }; } function parseTickLabelCustomValues(customValues, scale) { var extent = scale.getExtent(); var tickNumbers = []; each$12(customValues, function(val) { val = scale.parse(val); if (val >= extent[0] && val <= extent[1]) tickNumbers.push(val); }); removeDuplicates(tickNumbers, removeDuplicatesGetKeyFromItemItself, null); asc$1(tickNumbers); return map$1(tickNumbers, function(tickVal) { return { value: tickVal }; }); } function makeCategoryLabels(axis, ctx) { var labelModel = axis.getLabelModel(); var result = makeCategoryLabelsActually(axis, labelModel, ctx); return !labelModel.get("show") || axis.scale.isBlank() ? { labels: [] } : result; } function makeCategoryLabelsActually(axis, labelModel, ctx) { var labelsCache = ensureCategoryLabelCache(axis); var optionLabelInterval = getOptionCategoryInterval(labelModel); var isEstimate = ctx.kind === AxisTickLabelComputingKind.estimate; if (!isEstimate) { var result_1 = axisCacheGet(labelsCache, optionLabelInterval); if (result_1) return result_1; } var labels; var numericLabelInterval; if (isFunction(optionLabelInterval)) labels = makeTicksLabelsByCategoryIntervalNumOrCb(axis, optionLabelInterval, false); else { numericLabelInterval = optionLabelInterval === "auto" ? makeAutoCategoryInterval(axis, ctx) : optionLabelInterval; labels = makeTicksLabelsByCategoryIntervalNumOrCb(axis, numericLabelInterval, false); } var result = { labels, labelCategoryInterval: numericLabelInterval }; if (!isEstimate) axisCacheSet(labelsCache, optionLabelInterval, result); else ctx.out.noPxChangeTryDetermine.push(function() { axisCacheSet(labelsCache, optionLabelInterval, result); return true; }); return result; } function makeCategoryTicks(axis, tickModel) { var ticksCache = ensureCategoryTickCache(axis); var optionTickInterval = getOptionCategoryInterval(tickModel); var result = axisCacheGet(ticksCache, optionTickInterval); if (result) return result; var ticks; var tickCategoryInterval; if (!tickModel.get("show") || axis.scale.isBlank()) ticks = []; if (isFunction(optionTickInterval)) ticks = makeTicksLabelsByCategoryIntervalNumOrCb(axis, optionTickInterval, true); else if (optionTickInterval === "auto") { var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel(), createAxisLabelsComputingContext(AxisTickLabelComputingKind.determine)); tickCategoryInterval = labelsResult.labelCategoryInterval; ticks = map$1(labelsResult.labels, function(labelItem) { return labelItem.tick; }); } else { tickCategoryInterval = optionTickInterval; ticks = makeTicksLabelsByCategoryIntervalNumOrCb(axis, tickCategoryInterval, true); } return axisCacheSet(ticksCache, optionTickInterval, { ticks, tickCategoryInterval }); } function makeRealNumberLabels(axis) { var ticks = axis.scale.getTicks(); var labelFormatter = makeLabelFormatter(axis); return { labels: map$1(ticks, function(tick, idx) { return { formattedLabel: labelFormatter(tick, idx), rawLabel: axis.scale.getLabel(tick), tick }; }) }; } var ensureCategoryTickCache = initAxisCacheMethod("axisTick"); var ensureCategoryLabelCache = initAxisCacheMethod("axisLabel"); /** * PENDING: refactor to JS Map? Because key can be a function or more complicated object, and * cache size always is small, and currently no JS Map object key polyfill, we use a simple * array cache instead of plain object hash. */ function initAxisCacheMethod(prop) { return function ensureCache(axis) { return axisInner(axis)[prop] || (axisInner(axis)[prop] = { list: [] }); }; } function axisCacheGet(cache, key) { for (var i = 0; i < cache.list.length; i++) if (cache.list[i].key === key) return cache.list[i].value; } function axisCacheSet(cache, key, value) { cache.list.push({ key, value }); return value; } function makeAutoCategoryInterval(axis, ctx) { if (ctx.kind === AxisTickLabelComputingKind.estimate) { var result_2 = axis.calculateCategoryInterval(ctx); ctx.out.noPxChangeTryDetermine.push(function() { axisInner(axis).autoInterval = result_2; return true; }); return result_2; } var result = axisInner(axis).autoInterval; return result != null ? result : axisInner(axis).autoInterval = axis.calculateCategoryInterval(ctx); } /** * Calculate interval for category axis ticks and labels. * Use a strategy to try to avoid overlapping. * To get precise result, at least one of `getRotate` and `isHorizontal` * should be implemented in axis. */ function calculateCategoryInterval(axis, ctx) { var kind = ctx.kind; var params = fetchAutoCategoryIntervalCalculationParams(axis); var labelFormatter = makeLabelFormatter(axis); var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI; var ordinalScale = axis.scale; var ordinalExtent = ordinalScale.getExtent(); var tickCount = ordinalScale.count(); if (ordinalExtent[1] - ordinalExtent[0] < 1) return 0; var step = 1; var maxCount = 40; if (tickCount > maxCount) step = Math.max(1, Math.floor(tickCount / maxCount)); var tickValue = ordinalExtent[0]; var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); var unitW = Math.abs(unitSpan * Math.cos(rotation)); var unitH = Math.abs(unitSpan * Math.sin(rotation)); var maxW = 0; var maxH = 0; for (; tickValue <= ordinalExtent[1]; tickValue += step) { var width = 0; var height = 0; var rect = getBoundingRect(labelFormatter({ value: tickValue }), params.font, "center", "top"); width = rect.width * 1.3; height = rect.height * 1.3; maxW = Math.max(maxW, width, 7); maxH = Math.max(maxH, height, 7); } var dw = maxW / unitW; var dh = maxH / unitH; isNaN(dw) && (dw = Infinity); isNaN(dh) && (dh = Infinity); var interval = Math.max(0, Math.floor(Math.min(dw, dh))); if (kind === AxisTickLabelComputingKind.estimate) { ctx.out.noPxChangeTryDetermine.push(bind$1(calculateCategoryIntervalTryDetermine, null, axis, interval, tickCount)); return interval; } var lastInterval = calculateCategoryIntervalDealCache(axis, interval, tickCount); return lastInterval != null ? lastInterval : interval; } function calculateCategoryIntervalTryDetermine(axis, interval, tickCount) { return calculateCategoryIntervalDealCache(axis, interval, tickCount) == null; } function calculateCategoryIntervalDealCache(axis, interval, tickCount) { var cache = modelInner(axis.model); var axisExtent = axis.getExtent(); var lastAutoInterval = cache.lastAutoInterval; var lastTickCount = cache.lastTickCount; if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 && lastAutoInterval > interval && cache.axisExtent0 === axisExtent[0] && cache.axisExtent1 === axisExtent[1]) return lastAutoInterval; else { cache.lastTickCount = tickCount; cache.lastAutoInterval = interval; cache.axisExtent0 = axisExtent[0]; cache.axisExtent1 = axisExtent[1]; } } function fetchAutoCategoryIntervalCalculationParams(axis) { var labelModel = axis.getLabelModel(); return { axisRotate: axis.getRotate ? axis.getRotate() : axis.isHorizontal && !axis.isHorizontal() ? 90 : 0, labelRotate: labelModel.get("rotate") || 0, font: labelModel.getFont() }; } function makeTicksLabelsByCategoryIntervalNumOrCb(axis, categoryInterval, onlyTick) { var labelFormatter = makeLabelFormatter(axis); var ordinalScale = axis.scale; var result = []; var categoryIntervalIsCb = isFunction(categoryInterval); ordinalScaleCreateTicks(ordinalScale, categoryIntervalIsCb ? 0 : categoryInterval, function(tickObj, isExtentBoundary) { var tickLabel = ordinalScale.getLabel(tickObj); if (categoryIntervalIsCb) { var isOnInterval = !!categoryInterval(tickObj.value, tickLabel); tickObj.offInterval = !isOnInterval; if (!isOnInterval && !isExtentBoundary) return; } result.push(onlyTick ? tickObj : { formattedLabel: labelFormatter(tickObj), rawLabel: tickLabel, tick: tickObj }); }); return result; } //#endregion //#region node_modules/echarts/lib/coord/axisBand.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var FALLBACK_BAND_WIDTH_RATIO = .8; /** * NOTICE: * - Require the axis pixel extent and the scale extent as inputs. But they * can be not precise for approximation. * - Can only be called after "data processing" stage. * * PENDING: * Currently `bandWidth` can not be specified by users explicitly. But if we * allow that in future, these issues must be considered: * - Can only allow specifying a band width in data scale rather than pixel. * - LogScale needs to be considered - band width can only be specified on linear * (but before break) scale, similar to `axis.interval`. * * A band is required on: * - series group band width in bar/boxplot/candlestick/...; * - tooltip axisPointer type "shadow"; * - etc. */ function calcBandWidth(axis, opt) { opt = opt || {}; var out = { w: NaN, w2: NaN }; var scale = axis.scale; var fromStat = opt.fromStat; var min = opt.min; var scaleLinearSpan = getScaleLinearSpanForMapping(scale); if (!isNullableNumberFinite(scaleLinearSpan)) scaleLinearSpan = NaN; var axisExtent = axis.getExtent(); var pxSpan = mathAbs$4(axisExtent[1] - axisExtent[0]); if (isOrdinalScale(scale)) calcBandWidthForCategoryAxis(out, axis, scaleLinearSpan, pxSpan); else if (fromStat) calcBandWidthForNumericAxis(out, axis, scaleLinearSpan, pxSpan, fromStat); else if (min == null) assert(false); if (min != null) out.w = isNullableNumberFinite(out.w) ? mathMax$9(min, out.w) : min; return out; } function calcBandWidthForCategoryAxis(out, axis, scaleLinearSpan, pxSpan) { var onBand = axis.onBand; var len = scaleLinearSpan + (onBand ? 1 : 0); len === 0 && (len = 1); out.w = pxSpan / len; if (!onBand && scaleLinearSpan && pxSpan) out.w2 = out.w * scaleLinearSpan / pxSpan; } function calcBandWidthForNumericAxis(out, axis, scaleLinearSpan, pxSpan, fromStat) { assert(fromStat); var onlySingular = false; var bandWidthInData = -Infinity; each$12(fromStat.key ? [getAxisStat(axis, fromStat.key)] : getAxisStatBySeries(axis, fromStat.sers || []), function(stat) { var liPosMinGap = stat.liPosMinGap; if (liPosMinGap != null) { if (liPosMinGap > 0) { if (liPosMinGap > bandWidthInData) bandWidthInData = liPosMinGap; onlySingular = false; } else if (liPosMinGap === -2) onlySingular = true; } }); if (isNullableNumberFinite(scaleLinearSpan) && scaleLinearSpan > 0 && isNullableNumberFinite(bandWidthInData)) { out.w = pxSpan / scaleLinearSpan * bandWidthInData; out.w2 = bandWidthInData; } else if (onlySingular) { out.w = pxSpan * FALLBACK_BAND_WIDTH_RATIO; out.w2 = out.w * scaleLinearSpan / pxSpan; } } //#endregion //#region node_modules/echarts/lib/coord/Axis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var NORMALIZED_EXTENT = [0, 1]; /** * Base class of Axis. * * Lifetime: recreate for each main process. * [NOTICE]: Some caches is stored on the axis instance (e.g., `axisTickLabelBuilder.ts`, `scaleRawExtentInfo.ts`), * which is based on this lifetime. */ var Axis = function() { function Axis(dim, scale, extent) { this.onBand = false; this.inverse = false; this.dim = dim; this.scale = scale; this._extent = extent || [0, 0]; } /** * If axis extent contain given coord */ Axis.prototype.contain = function(coord) { var extent = this._extent; var min = Math.min(extent[0], extent[1]); var max = Math.max(extent[0], extent[1]); return coord >= min && coord <= max; }; /** * If axis extent contain given data */ Axis.prototype.containData = function(data) { return this.scale.contain(this.scale.parse(data)); }; /** * Get coord extent. */ Axis.prototype.getExtent = function() { return this._extent.slice(); }; /** * Set coord extent */ Axis.prototype.setExtent = function(start, end) { var extent = this._extent; extent[0] = start; extent[1] = end; }; /** * Convert data to coord. Data is the rank if it has an ordinal scale */ Axis.prototype.dataToCoord = function(data, clamp) { var scale = this.scale; data = scale.normalize(scale.parse(data)); return linearMap$2(data, NORMALIZED_EXTENT, makeExtentWithBands(this), clamp); }; /** * Convert coord to data. Data is the rank if it has an ordinal scale */ Axis.prototype.coordToData = function(coord, clamp) { var t = linearMap$2(coord, makeExtentWithBands(this), NORMALIZED_EXTENT, clamp); return this.scale.scale(t); }; /** * Convert pixel point to data in axis */ Axis.prototype.pointToData = function(point, clamp) {}; /** * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`, * `axis.getTicksCoords` considers `onBand`, which is used by * `boundaryGap:true` of category axis and splitLine and splitArea. * @param opt.tickModel default: axis.model.getModel('axisTick') */ Axis.prototype.getTicksCoords = function(opt) { opt = opt || {}; var tickModel = opt.tickModel || this.getTickModel(); var preTicksCoords = map$1(createAxisTicks(this, tickModel, { breakTicks: opt.breakTicks, pruneByBreak: opt.pruneByBreak }).ticks, function(tick) { return { coord: this.dataToCoord(getTickValueOutermost(this.scale, tick)), tick }; }, this); var alignWithLabel = tickModel.get("alignWithLabel"); var onBandModified = fixOnBandTicksCoords(this, preTicksCoords, alignWithLabel); return map$1(preTicksCoords, function(item) { return { coord: item.coord, tickValue: item.tick.value, onBand: onBandModified }; }); }; Axis.prototype.getMinorTicksCoords = function() { if (isOrdinalScale(this.scale)) return []; var splitNumber = this.model.getModel("minorTick").get("splitNumber"); if (!(splitNumber > 0 && splitNumber < 100)) splitNumber = 5; return map$1(this.scale.getMinorTicks(splitNumber), function(minorTicksGroup) { return map$1(minorTicksGroup, function(minorTick) { return { coord: this.dataToCoord(minorTick), tickValue: minorTick }; }, this); }, this); }; Axis.prototype.getViewLabels = function(ctx) { ctx = ctx || createAxisLabelsComputingContext(AxisTickLabelComputingKind.determine); return createAxisLabels(this, ctx).labels; }; Axis.prototype.getLabelModel = function() { return this.model.getModel("axisLabel"); }; /** * Notice here we only get the default tick model. For splitLine * or splitArea, we should pass the splitLineModel or splitAreaModel * manually when calling `getTicksCoords`. * In GL, this method may be overridden to: * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));` */ Axis.prototype.getTickModel = function() { return this.model.getModel("axisTick"); }; /** * @deprecated Use `calcBandWidth` instead. */ Axis.prototype.getBandWidth = function() { return calcBandWidth(this, { min: 1 }).w; }; /** * Only be called in category axis. * Can be overridden, consider other axes like in 3D. * @return Auto interval for category axis tick and label */ Axis.prototype.calculateCategoryInterval = function(ctx) { ctx = ctx || createAxisLabelsComputingContext(AxisTickLabelComputingKind.determine); return calculateCategoryInterval(this, ctx); }; return Axis; }(); function makeExtentWithBands(axis) { var extent = axis.getExtent(); if (axis.onBand) { var margin = (extent[1] - extent[0]) / axis.scale.count() / 2; extent[0] += margin; extent[1] -= margin; } return extent; } /** * `axis.onBand: true` (i.e., `boundaryGap: true` in ec option) and `CategoryTickLabelSplitIntervalOption` * affects `axisTick`/`axisLabel`/`splitLine`/`splitArea`. * * Currently, the visual result is best only when `axisTick/splitLine/splitArea.interval === 0`. * The typical case is: * |---|---|---| <= This is the input `preTicksCoords` * 0 1 2 3 (having been added half band width by `makeExtentWithBands`). * |---|---|---|---| <= This is the result. * 0 1 2 3 * * When `interval > 0`, the visual result may be odd for `axisLabel` and `customValues`, but acceptable * for `axisTick` `splitLine` and `splitArea`: * |---~---|---~---~---|---| <= This is the input `preTicksCoords`; `interval: 2; min: 1; max: 7`. * ₁ ₂ 3 ₄ ₅ 6 ₇ Subscript numbers (`₀`, `₁`, `₃`) indicate axis labels are hidden * (by default settings) due to off-interval. * A tilde (`~`) indicates a tick ignored due to off-interval. * |---~---|---~---~---|---~---| <= This is the result. * ₁ ₂ 3 ₄ ₅ 6 ₇ * * NOTE: * - A inappropriate result may cause misleading (e.g., split 2 bars of a single data item when there * are two bar series). * - See also #11176 #11186 . * PENDING: * - The show/hide of `axisLabel` may be optimized when `interval > 1 and be an even number`, * but that may introduce complex and still not perfect in odd number, and may not necessary if * `axisTick: {show: false}` and `axisLabel` can auto hidden when overlapping. */ function fixOnBandTicksCoords(axis, preTicksCoords, alignWithLabel) { var ticksLen = preTicksCoords.length; if (!axis.onBand || alignWithLabel || !ticksLen) return false; var bandWidth = calcBandWidth(axis).w; if (!bandWidth) return false; each$12(preTicksCoords, function(ticksItem) { ticksItem.coord -= bandWidth / 2; }); var dataExtent = axis.scale.getExtent(); var oldLast = preTicksCoords[ticksLen - 1]; if (oldLast.tick.offInterval) preTicksCoords.pop(); preTicksCoords.push({ coord: oldLast.coord + bandWidth, tick: { value: dataExtent[1] + 1 } }); return true; } //#endregion //#region node_modules/echarts/lib/export/api.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function extendComponentModel(proto) { var Model = ComponentModel.extend(proto); ComponentModel.registerClass(Model); return Model; } function extendComponentView(proto) { var View = ComponentView.extend(proto); ComponentView.registerClass(View); return View; } function extendSeriesModel(proto) { var Model = SeriesModel.extend(proto); SeriesModel.registerClass(Model); return Model; } function extendChartView(proto) { var View = ChartView.extend(proto); ChartView.registerClass(View); return View; } //#endregion //#region node_modules/echarts/lib/label/labelGuideHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI2$2 = Math.PI * 2; var CMD$1 = PathProxy.CMD; var DEFAULT_SEARCH_SPACE = [ "top", "right", "bottom", "left" ]; function getCandidateAnchor(pos, distance, rect, outPt, outDir) { var width = rect.width; var height = rect.height; switch (pos) { case "top": outPt.set(rect.x + width / 2, rect.y - distance); outDir.set(0, -1); break; case "bottom": outPt.set(rect.x + width / 2, rect.y + height + distance); outDir.set(0, 1); break; case "left": outPt.set(rect.x - distance, rect.y + height / 2); outDir.set(-1, 0); break; case "right": outPt.set(rect.x + width + distance, rect.y + height / 2); outDir.set(1, 0); } } function projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) { x -= cx; y -= cy; var d = Math.sqrt(x * x + y * y); x /= d; y /= d; var ox = x * r + cx; var oy = y * r + cy; if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) { out[0] = ox; out[1] = oy; return d - r; } if (anticlockwise) { var tmp = startAngle; startAngle = normalizeRadian(endAngle); endAngle = normalizeRadian(tmp); } else { startAngle = normalizeRadian(startAngle); endAngle = normalizeRadian(endAngle); } if (startAngle > endAngle) endAngle += PI2$2; var angle = Math.atan2(y, x); if (angle < 0) angle += PI2$2; if (angle >= startAngle && angle <= endAngle || angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle) { out[0] = ox; out[1] = oy; return d - r; } var x1 = r * Math.cos(startAngle) + cx; var y1 = r * Math.sin(startAngle) + cy; var x2 = r * Math.cos(endAngle) + cx; var y2 = r * Math.sin(endAngle) + cy; var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y); var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y); if (d1 < d2) { out[0] = x1; out[1] = y1; return Math.sqrt(d1); } else { out[0] = x2; out[1] = y2; return Math.sqrt(d2); } } function projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) { var dx = x - x1; var dy = y - y1; var dx1 = x2 - x1; var dy1 = y2 - y1; var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1); dx1 /= lineLen; dy1 /= lineLen; var t = (dx * dx1 + dy * dy1) / lineLen; if (limitToEnds) t = Math.min(Math.max(t, 0), 1); t *= lineLen; var ox = out[0] = x1 + t * dx1; var oy = out[1] = y1 + t * dy1; return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)); } function projectPointToRect(x1, y1, width, height, x, y, out) { if (width < 0) { x1 = x1 + width; width = -width; } if (height < 0) { y1 = y1 + height; height = -height; } var x2 = x1 + width; var y2 = y1 + height; var ox = out[0] = Math.min(Math.max(x, x1), x2); var oy = out[1] = Math.min(Math.max(y, y1), y2); return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)); } var tmpPt = []; function nearestPointOnRect(pt, rect, out) { var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt); out.set(tmpPt[0], tmpPt[1]); return dist; } /** * Calculate min distance corresponding point. * This method won't evaluate if point is in the path. */ function nearestPointOnPath(pt, path, out) { var xi = 0; var yi = 0; var x0 = 0; var y0 = 0; var x1; var y1; var minDist = Infinity; var data = path.data; var x = pt.x; var y = pt.y; for (var i = 0; i < data.length;) { var cmd = data[i++]; if (i === 1) { xi = data[i]; yi = data[i + 1]; x0 = xi; y0 = yi; } var d = minDist; switch (cmd) { case CMD$1.M: x0 = data[i++]; y0 = data[i++]; xi = x0; yi = y0; break; case CMD$1.L: d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true); xi = data[i++]; yi = data[i++]; break; case CMD$1.C: d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt); xi = data[i++]; yi = data[i++]; break; case CMD$1.Q: d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt); xi = data[i++]; yi = data[i++]; break; case CMD$1.A: var cx = data[i++]; var cy = data[i++]; var rx = data[i++]; var ry = data[i++]; var theta = data[i++]; var dTheta = data[i++]; i += 1; var anticlockwise = !!(1 - data[i++]); x1 = Math.cos(theta) * rx + cx; y1 = Math.sin(theta) * ry + cy; if (i <= 1) { x0 = x1; y0 = y1; } var _x = (x - cx) * ry / rx + cx; d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt); xi = Math.cos(theta + dTheta) * rx + cx; yi = Math.sin(theta + dTheta) * ry + cy; break; case CMD$1.R: x0 = xi = data[i++]; y0 = yi = data[i++]; var width = data[i++]; var height = data[i++]; d = projectPointToRect(x0, y0, width, height, x, y, tmpPt); break; case CMD$1.Z: d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true); xi = x0; yi = y0; } if (d < minDist) { minDist = d; out.set(tmpPt[0], tmpPt[1]); } } return minDist; } var pt0 = new Point(); var pt1 = new Point(); var pt2 = new Point(); var dir = new Point(); var dir2 = new Point(); /** * Calculate a proper guide line based on the label position and graphic element definition * @param label * @param labelRect * @param target * @param targetRect */ function updateLabelLinePoints(target, labelLineModel) { if (!target) return; var labelLine = target.getTextGuideLine(); var label = target.getTextContent(); if (!(label && labelLine)) return; var labelGuideConfig = target.textGuideLineConfig || {}; var points = [ [0, 0], [0, 0], [0, 0] ]; var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE; var labelRect = label.getBoundingRect().clone(); labelRect.applyTransform(label.getComputedTransform()); var minDist = Infinity; var anchorPoint = labelGuideConfig.anchor; var targetTransform = target.getComputedTransform(); var targetInversedTransform = targetTransform && invert([], targetTransform); var len = labelLineModel.get("length2") || 0; if (anchorPoint) pt2.copy(anchorPoint); for (var i = 0; i < searchSpace.length; i++) { var candidate = searchSpace[i]; getCandidateAnchor(candidate, 0, labelRect, pt0, dir); Point.scaleAndAdd(pt1, pt0, dir, len); pt1.transform(targetInversedTransform); var boundingRect = target.getBoundingRect(); var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); if (dist < minDist) { minDist = dist; pt1.transform(targetTransform); pt2.transform(targetTransform); pt2.toArray(points[0]); pt1.toArray(points[1]); pt0.toArray(points[2]); } } limitTurnAngle(points, labelLineModel.get("minTurnAngle")); labelLine.setShape({ points }); } var tmpArr = []; var tmpProjPoint = new Point(); /** * Reduce the line segment attached to the label to limit the turn angle between two segments. * @param linePoints * @param minTurnAngle Radian of minimum turn angle. 0 - 180 */ function limitTurnAngle(linePoints, minTurnAngle) { if (!(minTurnAngle <= 180 && minTurnAngle > 0)) return; minTurnAngle = minTurnAngle / 180 * Math.PI; pt0.fromArray(linePoints[0]); pt1.fromArray(linePoints[1]); pt2.fromArray(linePoints[2]); Point.sub(dir, pt0, pt1); Point.sub(dir2, pt2, pt1); var len1 = dir.len(); var len2 = dir2.len(); if (len1 < .001 || len2 < .001) return; dir.scale(1 / len1); dir2.scale(1 / len2); var angleCos = dir.dot(dir2); if (Math.cos(minTurnAngle) < angleCos) { var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false); tmpProjPoint.fromArray(tmpArr); tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y); if (isNaN(t)) return; if (t < 0) Point.copy(tmpProjPoint, pt1); else if (t > 1) Point.copy(tmpProjPoint, pt2); tmpProjPoint.toArray(linePoints[1]); } } /** * Limit the angle of line and the surface * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite */ function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) { if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) return; maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI; pt0.fromArray(linePoints[0]); pt1.fromArray(linePoints[1]); pt2.fromArray(linePoints[2]); Point.sub(dir, pt1, pt0); Point.sub(dir2, pt2, pt1); var len1 = dir.len(); var len2 = dir2.len(); if (len1 < .001 || len2 < .001) return; dir.scale(1 / len1); dir2.scale(1 / len2); if (dir.dot(surfaceNormal) < Math.cos(maxSurfaceAngle)) { var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false); tmpProjPoint.fromArray(tmpArr); var HALF_PI = Math.PI / 2; var newAngle = HALF_PI + Math.acos(dir2.dot(surfaceNormal)) - maxSurfaceAngle; if (newAngle >= HALF_PI) Point.copy(tmpProjPoint, pt2); else { tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y); if (isNaN(t)) return; if (t < 0) Point.copy(tmpProjPoint, pt1); else if (t > 1) Point.copy(tmpProjPoint, pt2); } tmpProjPoint.toArray(linePoints[1]); } } function setLabelLineState(labelLine, ignore, stateName, stateModel) { var isNormal = stateName === "normal"; var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); stateObj.ignore = ignore; var smooth = stateModel.get("smooth"); smooth = smooth === true ? .3 : Math.max(+smooth, 0) || 0; stateObj.shape = stateObj.shape || {}; stateObj.shape.smooth = smooth; var styleObj = stateModel.getModel("lineStyle").getLineStyle(); isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj; } function buildLabelLinePath(path, shape) { var smooth = shape.smooth; var points = shape.points; if (!points) return; path.moveTo(points[0][0], points[0][1]); if (smooth > 0 && points.length >= 3) { var len1 = dist$1(points[0], points[1]); var len2 = dist$1(points[1], points[2]); if (!len1 || !len2) { path.lineTo(points[1][0], points[1][1]); path.lineTo(points[2][0], points[2][1]); return; } var moveLen = Math.min(len1, len2) * smooth; var midPoint0 = lerp$1([], points[1], points[0], moveLen / len1); var midPoint2 = lerp$1([], points[1], points[2], moveLen / len2); var midPoint1 = lerp$1([], midPoint0, midPoint2, .5); path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]); path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]); } else for (var i = 1; i < points.length; i++) path.lineTo(points[i][0], points[i][1]); } /** * Create a label line if necessary and set it's style. */ function setLabelLineStyle(targetEl, statesModels, defaultStyle) { var labelLine = targetEl.getTextGuideLine(); var label = targetEl.getTextContent(); if (!label) { if (labelLine) targetEl.removeTextGuideLine(); return; } var normalModel = statesModels.normal; var showNormal = normalModel.get("show"); var labelIgnoreNormal = label.ignore; for (var i = 0; i < DISPLAY_STATES.length; i++) { var stateName = DISPLAY_STATES[i]; var stateModel = statesModels[stateName]; var isNormal = stateName === "normal"; if (stateModel) { var stateShow = stateModel.get("show"); if ((isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal)) || !retrieve2(stateShow, showNormal)) { var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName]; if (stateObj) stateObj.ignore = true; if (!!labelLine) setLabelLineState(labelLine, true, stateName, stateModel); continue; } if (!labelLine) { labelLine = new Polyline$1(); targetEl.setTextGuideLine(labelLine); if (!isNormal && (labelIgnoreNormal || !showNormal)) setLabelLineState(labelLine, true, "normal", statesModels.normal); if (targetEl.stateProxy) labelLine.stateProxy = targetEl.stateProxy; } setLabelLineState(labelLine, false, stateName, stateModel); } } if (labelLine) { defaults(labelLine.style, defaultStyle); labelLine.style.fill = null; var showAbove = normalModel.get("showAbove"); var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {}; labelLineConfig.showAbove = showAbove || false; labelLine.buildPath = buildLabelLinePath; } } function getLabelLineStatesModels(itemModel, labelLineName) { labelLineName = labelLineName || "labelLine"; var statesModels = { normal: itemModel.getModel(labelLineName) }; for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; statesModels[stateName] = itemModel.getModel([stateName, labelLineName]); } return statesModels; } //#endregion //#region node_modules/echarts/lib/label/labelLayoutHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LABEL_LAYOUT_BASE_PROPS = [ "label", "labelLine", "layoutOption", "priority", "defaultAttr", "marginForce", "minMarginForce", "marginDefault", "suggestIgnore" ]; var LABEL_LAYOUT_DIRTY_BIT_OTHERS = 1; var LABEL_LAYOUT_DIRTY_BIT_OBB = 2; var LABEL_LAYOUT_DIRTY_ALL = LABEL_LAYOUT_DIRTY_BIT_OTHERS | LABEL_LAYOUT_DIRTY_BIT_OBB; function setLabelLayoutDirty(labelGeometry, dirtyOrClear, dirtyBits) { dirtyBits = dirtyBits || LABEL_LAYOUT_DIRTY_ALL; dirtyOrClear ? labelGeometry.dirty |= dirtyBits : labelGeometry.dirty &= ~dirtyBits; } function isLabelLayoutDirty(labelGeometry, dirtyBits) { dirtyBits = dirtyBits || LABEL_LAYOUT_DIRTY_ALL; return labelGeometry.dirty == null || !!(labelGeometry.dirty & dirtyBits); } /** * [CAUTION] * - No auto dirty propagation mechanism yet. If the transform of the raw label or any of its ancestors is * changed, must sync the changes to the props of `LabelGeometry` by: * either explicitly call: * `setLabelLayoutDirty(labelLayout, true); ensureLabelLayoutWithGeometry(labelLayout);` * or call (if only translation is performed): * `labelLayoutApplyTranslation(labelLayout);` * - `label.ignore` is not necessarily falsy, and not considered in computing `LabelGeometry`, * since it might be modified by some overlap resolving handling. * - To duplicate or make a variation: * use `newLabelLayoutWithGeometry`. * * The result can also be the input of this method. * @return `NullUndefined` if and only if `labelLayout` is `NullUndefined`. */ function ensureLabelLayoutWithGeometry(labelLayout) { if (!labelLayout) return; if (isLabelLayoutDirty(labelLayout)) computeLabelGeometry(labelLayout, labelLayout.label, labelLayout); return labelLayout; } /** * The props in `out` will be filled if existing, or created. */ function computeLabelGeometry(out, label, opt) { var rawTransform = label.getComputedTransform(); out.transform = ensureCopyTransform(out.transform, rawTransform); var outLocalRect = out.localRect = ensureCopyRect(out.localRect, label.getBoundingRect()); var labelStyleExt = label.style; var margin = labelStyleExt.margin; var marginForce = opt && opt.marginForce; var minMarginForce = opt && opt.minMarginForce; var marginDefault = opt && opt.marginDefault; var marginType = labelStyleExt.__marginType; if (marginType == null && marginDefault) { margin = marginDefault; marginType = LabelMarginType.textMargin; } for (var i = 0; i < 4; i++) _tmpLabelMargin[i] = marginType === LabelMarginType.minMargin && minMarginForce && minMarginForce[i] != null ? minMarginForce[i] : marginForce && marginForce[i] != null ? marginForce[i] : margin ? margin[i] : 0; if (marginType === LabelMarginType.textMargin) expandOrShrinkRect(outLocalRect, _tmpLabelMargin, false, false); var outGlobalRect = out.rect = ensureCopyRect(out.rect, outLocalRect); if (rawTransform) outGlobalRect.applyTransform(rawTransform); if (marginType === LabelMarginType.minMargin) expandOrShrinkRect(outGlobalRect, _tmpLabelMargin, false, false); out.axisAligned = isBoundingRectAxisAligned(rawTransform); (out.label = out.label || {}).ignore = label.ignore; setLabelLayoutDirty(out, false); setLabelLayoutDirty(out, true, LABEL_LAYOUT_DIRTY_BIT_OBB); return out; } var _tmpLabelMargin = [ 0, 0, 0, 0 ]; /** * The props in `out` will be filled if existing, or created. */ function computeLabelGeometry2(out, rawLocalRect, rawTransform) { out.transform = ensureCopyTransform(out.transform, rawTransform); out.localRect = ensureCopyRect(out.localRect, rawLocalRect); out.rect = ensureCopyRect(out.rect, rawLocalRect); if (rawTransform) out.rect.applyTransform(rawTransform); out.axisAligned = isBoundingRectAxisAligned(rawTransform); out.obb = void 0; (out.label = out.label || {}).ignore = false; return out; } /** * This is a shortcut of * ```js * labelLayout.label.x = newX; * labelLayout.label.y = newY; * setLabelLayoutDirty(labelLayout, true); * ensureLabelLayoutWithGeometry(labelLayout); * ``` * and provide better performance in this common case. */ function labelLayoutApplyTranslation(labelLayout, offset) { if (!labelLayout) return; labelLayout.label.x += offset.x; labelLayout.label.y += offset.y; labelLayout.label.markRedraw(); var transform = labelLayout.transform; if (transform) { transform[4] += offset.x; transform[5] += offset.y; } var globalRect = labelLayout.rect; if (globalRect) { globalRect.x += offset.x; globalRect.y += offset.y; } var obb = labelLayout.obb; if (obb) obb.fromBoundingRect(labelLayout.localRect, transform); } /** * To duplicate or make a variation of a label layout. * Copy the only relevant properties to avoid the conflict or wrongly reuse of the props of `LabelLayoutWithGeometry`. */ function newLabelLayoutWithGeometry(newBaseWithDefaults, source) { for (var i = 0; i < LABEL_LAYOUT_BASE_PROPS.length; i++) { var prop = LABEL_LAYOUT_BASE_PROPS[i]; if (newBaseWithDefaults[prop] == null) newBaseWithDefaults[prop] = source[prop]; } return ensureLabelLayoutWithGeometry(newBaseWithDefaults); } /** * Create obb if no one, can cache it. */ function ensureOBB(labelGeometry) { var obb = labelGeometry.obb; if (!obb || isLabelLayoutDirty(labelGeometry, LABEL_LAYOUT_DIRTY_BIT_OBB)) { labelGeometry.obb = obb = obb || new OrientedBoundingRect(); obb.fromBoundingRect(labelGeometry.localRect, labelGeometry.transform); setLabelLayoutDirty(labelGeometry, false, LABEL_LAYOUT_DIRTY_BIT_OBB); } return obb; } /** * Adjust labels on x/y direction to avoid overlap. * * PENDING: the current implementation is based on the global bounding rect rather than the local rect, * which may be not preferable in some edge cases when the label has rotation, but works for most cases, * since rotation is unnecessary when there is sufficient space, while squeezing is applied regardless * of overlapping when there is no enough space. * * NOTICE: * - The input `list` and its content will be modified (sort, label.x/y, rect). * - The caller should sync the modifications to the other parts by * `setLabelLayoutDirty` and `ensureLabelLayoutWithGeometry` if needed. * * @return adjusted */ function shiftLayoutOnXY(list, xyDimIdx, minBound, maxBound, balanceShift) { var len = list.length; var xyDim = XY$2[xyDimIdx]; var sizeDim = WH$2[xyDimIdx]; if (len < 2) return false; list.sort(function(a, b) { return a.rect[xyDim] - b.rect[xyDim]; }); var lastPos = 0; var delta; var adjusted = false; var totalShifts = 0; for (var i = 0; i < len; i++) { var item = list[i]; var rect = item.rect; delta = rect[xyDim] - lastPos; if (delta < 0) { rect[xyDim] -= delta; item.label[xyDim] -= delta; adjusted = true; } var shift = Math.max(-delta, 0); totalShifts += shift; lastPos = rect[xyDim] + rect[sizeDim]; } if (totalShifts > 0 && balanceShift) shiftList(-totalShifts / len, 0, len); var first = list[0]; var last = list[len - 1]; var minGap; var maxGap; updateMinMaxGap(); minGap < 0 && squeezeGaps(-minGap, .8); maxGap < 0 && squeezeGaps(maxGap, .8); updateMinMaxGap(); takeBoundsGap(minGap, maxGap, 1); takeBoundsGap(maxGap, minGap, -1); updateMinMaxGap(); if (minGap < 0) squeezeWhenBailout(-minGap); if (maxGap < 0) squeezeWhenBailout(maxGap); function updateMinMaxGap() { minGap = first.rect[xyDim] - minBound; maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim]; } function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) { if (gapThisBound < 0) { var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound); if (moveFromMaxGap > 0) { shiftList(moveFromMaxGap * moveDir, 0, len); var remained = moveFromMaxGap + gapThisBound; if (remained < 0) squeezeGaps(-remained * moveDir, 1); } else squeezeGaps(-gapThisBound * moveDir, 1); } } function shiftList(delta, start, end) { if (delta !== 0) adjusted = true; for (var i = start; i < end; i++) { var item = list[i]; var rect = item.rect; rect[xyDim] += delta; item.label[xyDim] += delta; } } function squeezeGaps(delta, maxSqeezePercent) { var gaps = []; var totalGaps = 0; for (var i = 1; i < len; i++) { var prevItemRect = list[i - 1].rect; var gap = Math.max(list[i].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0); gaps.push(gap); totalGaps += gap; } if (!totalGaps) return; var squeezePercent = Math.min(Math.abs(delta) / totalGaps, maxSqeezePercent); if (delta > 0) for (var i = 0; i < len - 1; i++) { var movement = gaps[i] * squeezePercent; shiftList(movement, 0, i + 1); } else for (var i = len - 1; i > 0; i--) { var movement = gaps[i - 1] * squeezePercent; shiftList(-movement, i, len); } } /** * Squeeze to allow overlap if there is no more space available. * Let other overlapping strategy like hideOverlap do the job instead of keep exceeding the bounds. */ function squeezeWhenBailout(delta) { var dir = delta < 0 ? -1 : 1; delta = Math.abs(delta); var moveForEachLabel = Math.ceil(delta / (len - 1)); for (var i = 0; i < len - 1; i++) { if (dir > 0) shiftList(moveForEachLabel, 0, i + 1); else shiftList(-moveForEachLabel, len - i - 1, len); delta -= moveForEachLabel; if (delta <= 0) return; } } return adjusted; } /** * @see `SavedLabelAttr` in `LabelManager.ts` * @see `hideOverlap` */ function restoreIgnore(labelList) { for (var i = 0; i < labelList.length; i++) { var labelItem = labelList[i]; var defaultAttr = labelItem.defaultAttr; var labelLine = labelItem.labelLine; labelItem.label.attr("ignore", defaultAttr.ignore); labelLine && labelLine.attr("ignore", defaultAttr.labelGuideIgnore); } } /** * [NOTICE - restore]: * 'series:layoutlabels' may be triggered during some EC_PARTIAL_UPDATE passes, such as zooming in series.graph/geo * (`updateLabelLayout`), where the modified `Element` props should be restorable from `defaultAttr`. * @see `SavedLabelAttr` in `LabelManager.ts` * `restoreIgnore` can be called to perform the restore, if needed. * * [NOTICE - state]: * Regarding Element's states, this method is only designed for the normal state. * PENDING: although currently this method is effectively called in other states in `updateLabelLayout` case, * the bad case is not noticeable in the zooming scenario. */ function hideOverlap(labelList) { var displayedLabels = []; labelList.sort(function(a, b) { return (b.suggestIgnore ? 1 : 0) - (a.suggestIgnore ? 1 : 0) || b.priority - a.priority; }); function hideEl(el) { if (!el.ignore) { var emphasisState = el.ensureState("emphasis"); if (emphasisState.ignore == null) emphasisState.ignore = false; } el.ignore = true; } for (var i = 0; i < labelList.length; i++) { var labelItem = ensureLabelLayoutWithGeometry(labelList[i]); if (labelItem.label.ignore) continue; var label = labelItem.label; var labelLine = labelItem.labelLine; var overlapped = false; for (var j = 0; j < displayedLabels.length; j++) if (labelIntersect(labelItem, displayedLabels[j], null, { touchThreshold: .05 })) { overlapped = true; break; } if (overlapped) { hideEl(label); labelLine && hideEl(labelLine); } else displayedLabels.push(labelItem); } } /** * Enable fast check for performance; use obb if inevitable. * If `mtv` is used, `targetLayoutInfo` can be moved based on the values filled into `mtv`. * * This method is based only on the current `Element` states (regardless of other states). * Typically this method (and the entire layout process) is performed in normal state. */ function labelIntersect(baseLayoutInfo, targetLayoutInfo, mtv, intersectOpt) { if (!baseLayoutInfo || !targetLayoutInfo) return false; if (baseLayoutInfo.label && baseLayoutInfo.label.ignore || targetLayoutInfo.label && targetLayoutInfo.label.ignore) return false; if (!baseLayoutInfo.rect.intersect(targetLayoutInfo.rect, mtv, intersectOpt)) return false; if (baseLayoutInfo.axisAligned && targetLayoutInfo.axisAligned) return true; return ensureOBB(baseLayoutInfo).intersect(ensureOBB(targetLayoutInfo), mtv, intersectOpt); } //#endregion //#region node_modules/echarts/lib/label/LabelManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function cloneArr(points) { if (points) { var newPoints = []; for (var i = 0; i < points.length; i++) newPoints.push(points[i].slice()); return newPoints; } } function prepareLayoutCallbackParams(labelItem, hostEl) { var label = labelItem.label; var labelLine = hostEl && hostEl.getTextGuideLine(); return { dataIndex: labelItem.dataIndex, dataType: labelItem.dataType, seriesIndex: labelItem.seriesModel.seriesIndex, text: labelItem.label.style.text, rect: labelItem.hostRect, labelRect: labelItem.rect, align: label.style.align, verticalAlign: label.style.verticalAlign, labelLinePoints: cloneArr(labelLine && labelLine.shape.points) }; } var LABEL_OPTION_TO_STYLE_KEYS = [ "align", "verticalAlign", "width", "height", "fontSize" ]; var dummyTransformable = new Transformable(); var labelLayoutInnerStore = makeInner(); var labelLineAnimationStore = makeInner(); function extendWithKeys(target, source, keys) { for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (source[key] != null) target[key] = source[key]; } } var LABEL_LAYOUT_PROPS = [ "x", "y", "rotation" ]; var LabelManager = function() { function LabelManager() { this._labelList = []; this._chartViewList = []; } LabelManager.prototype.clearLabels = function() { this._labelList = []; this._chartViewList = []; }; /** * Add label to manager */ LabelManager.prototype._addLabel = function(dataIndex, dataType, seriesModel, label, layoutOptionOrCb) { var labelStyle = label.style; var textConfig = label.__hostTarget.textConfig || {}; var labelTransform = label.getComputedTransform(); var labelRect = label.getBoundingRect().plain(); BoundingRect.applyTransform(labelRect, labelRect, labelTransform); if (labelTransform) dummyTransformable.setLocalTransform(labelTransform); else { dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0; dummyTransformable.scaleX = dummyTransformable.scaleY = 1; } dummyTransformable.rotation = normalizeRadian(dummyTransformable.rotation); var host = label.__hostTarget; var hostRect; if (host) { hostRect = host.getBoundingRect().plain(); var transform = host.getComputedTransform(); BoundingRect.applyTransform(hostRect, hostRect, transform); } var labelGuide = hostRect && host.getTextGuideLine(); this._labelList.push({ label, labelLine: labelGuide, seriesModel, dataIndex, dataType, layoutOptionOrCb, layoutOption: null, rect: labelRect, hostRect, priority: hostRect ? hostRect.width * hostRect.height : 0, defaultAttr: { ignore: label.ignore, labelGuideIgnore: labelGuide && labelGuide.ignore, x: dummyTransformable.x, y: dummyTransformable.y, scaleX: dummyTransformable.scaleX, scaleY: dummyTransformable.scaleY, rotation: dummyTransformable.rotation, style: { x: labelStyle.x, y: labelStyle.y, align: labelStyle.align, verticalAlign: labelStyle.verticalAlign, width: labelStyle.width, height: labelStyle.height, fontSize: labelStyle.fontSize }, cursor: label.cursor, attachedPos: textConfig.position, attachedRot: textConfig.rotation } }); }; LabelManager.prototype.addLabelsOfSeries = function(chartView) { var _this = this; this._chartViewList.push(chartView); var seriesModel = chartView.__model; var layoutOption = seriesModel.get("labelLayout"); /** * Ignore layouting if it's not specified anything. */ if (!(isFunction(layoutOption) || keys(layoutOption).length)) return; chartView.group.traverse(function(child) { if (child.ignore) return true; var textEl = child.getTextContent(); var ecData = getECData(child); if (textEl && !textEl.disableLabelLayout) _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption); }); }; LabelManager.prototype.updateLayoutConfig = function(api) { var width = api.getWidth(); var height = api.getHeight(); function createDragHandler(el, labelLineModel) { return function() { updateLabelLinePoints(el, labelLineModel); }; } for (var i = 0; i < this._labelList.length; i++) { var labelItem = this._labelList[i]; var label = labelItem.label; var hostEl = label.__hostTarget; var defaultLabelAttr = labelItem.defaultAttr; var layoutOption = void 0; if (isFunction(labelItem.layoutOptionOrCb)) layoutOption = labelItem.layoutOptionOrCb(prepareLayoutCallbackParams(labelItem, hostEl)); else layoutOption = labelItem.layoutOptionOrCb; layoutOption = layoutOption || {}; labelItem.layoutOption = layoutOption; var degreeToRadian = Math.PI / 180; if (hostEl) hostEl.setTextConfig({ local: false, position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos, rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot, offset: [layoutOption.dx || 0, layoutOption.dy || 0] }); var needsUpdateLabelLine = false; if (layoutOption.x != null) { label.x = parsePercent(layoutOption.x, width); label.setStyle("x", 0); needsUpdateLabelLine = true; } else { label.x = defaultLabelAttr.x; label.setStyle("x", defaultLabelAttr.style.x); } if (layoutOption.y != null) { label.y = parsePercent(layoutOption.y, height); label.setStyle("y", 0); needsUpdateLabelLine = true; } else { label.y = defaultLabelAttr.y; label.setStyle("y", defaultLabelAttr.style.y); } if (layoutOption.labelLinePoints) { var guideLine = hostEl.getTextGuideLine(); if (guideLine) { guideLine.setShape({ points: layoutOption.labelLinePoints }); needsUpdateLabelLine = false; } } var labelLayoutStore = labelLayoutInnerStore(label); labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine; label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation; label.scaleX = defaultLabelAttr.scaleX; label.scaleY = defaultLabelAttr.scaleY; for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) { var key = LABEL_OPTION_TO_STYLE_KEYS[k]; label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]); } if (layoutOption.draggable) { label.draggable = true; label.cursor = "move"; if (hostEl) { var hostModel = labelItem.seriesModel; if (labelItem.dataIndex != null) hostModel = labelItem.seriesModel.getData(labelItem.dataType).getItemModel(labelItem.dataIndex); label.on("drag", createDragHandler(hostEl, hostModel.getModel("labelLine"))); } } else { label.off("drag"); label.cursor = defaultLabelAttr.cursor; } } }; LabelManager.prototype.layout = function(api) { var width = api.getWidth(); var height = api.getHeight(); var labelList = []; each$12(this._labelList, function(inputItem) { if (!inputItem.defaultAttr.ignore) labelList.push(newLabelLayoutWithGeometry({}, inputItem)); }); var labelsNeedsAdjustOnX = filter(labelList, function(item) { return item.layoutOption.moveOverlap === "shiftX"; }); var labelsNeedsAdjustOnY = filter(labelList, function(item) { return item.layoutOption.moveOverlap === "shiftY"; }); shiftLayoutOnXY(labelsNeedsAdjustOnX, 0, 0, width); shiftLayoutOnXY(labelsNeedsAdjustOnY, 1, 0, height); var labelsNeedsHideOverlap = filter(labelList, function(item) { return item.layoutOption.hideOverlap; }); restoreIgnore(labelsNeedsHideOverlap); hideOverlap(labelsNeedsHideOverlap); }; /** * Process all labels. Not only labels with layoutOption. */ LabelManager.prototype.processLabelsOverall = function() { var _this = this; each$12(this._chartViewList, function(chartView) { var seriesModel = chartView.__model; var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate; var animationEnabled = seriesModel.isAnimationEnabled(); chartView.group.traverse(function(child) { if (child.ignore && !child.forceLabelAnimation) return true; var needsUpdateLabelLine = !ignoreLabelLineUpdate; var label = child.getTextContent(); if (!needsUpdateLabelLine && label) needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine; if (needsUpdateLabelLine) _this._updateLabelLine(child, seriesModel); if (animationEnabled) _this._animateLabels(child, seriesModel); }); }); }; LabelManager.prototype._updateLabelLine = function(el, seriesModel) { var textEl = el.getTextContent(); var ecData = getECData(el); var dataIndex = ecData.dataIndex; if (textEl && dataIndex != null) { var data = seriesModel.getData(ecData.dataType); var itemModel = data.getItemModel(dataIndex); var defaultStyle = {}; var visualStyle = data.getItemVisual(dataIndex, "style"); if (visualStyle) defaultStyle.stroke = visualStyle[data.getVisual("drawType")]; var labelLineModel = itemModel.getModel("labelLine"); setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle); updateLabelLinePoints(el, labelLineModel); } }; LabelManager.prototype._animateLabels = function(el, seriesModel) { var textEl = el.getTextContent(); var guideLine = el.getTextGuideLine(); if (textEl && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) { var layoutStore = labelLayoutInnerStore(textEl); var oldLayout = layoutStore.oldLayout; var ecData = getECData(el); var dataIndex = ecData.dataIndex; var newProps = { x: textEl.x, y: textEl.y, rotation: textEl.rotation }; var data = seriesModel.getData(ecData.dataType); if (!oldLayout) { textEl.attr(newProps); if (!labelInner(textEl).valueAnimation) { var oldOpacity = retrieve2(textEl.style.opacity, 1); textEl.style.opacity = 0; initProps(textEl, { style: { opacity: oldOpacity } }, seriesModel, dataIndex); } } else { textEl.attr(oldLayout); var prevStates = el.prevStates; if (prevStates) { if (indexOf(prevStates, "select") >= 0) textEl.attr(layoutStore.oldLayoutSelect); if (indexOf(prevStates, "emphasis") >= 0) textEl.attr(layoutStore.oldLayoutEmphasis); } updateProps$1(textEl, newProps, seriesModel, dataIndex); } layoutStore.oldLayout = newProps; if (textEl.states.select) { var layoutSelect = layoutStore.oldLayoutSelect = {}; extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS); extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS); } if (textEl.states.emphasis) { var layoutEmphasis = layoutStore.oldLayoutEmphasis = {}; extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS); extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS); } animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel); } if (guideLine && !guideLine.ignore && !guideLine.invisible) { var layoutStore = labelLineAnimationStore(guideLine); var oldLayout = layoutStore.oldLayout; var newLayout = { points: guideLine.shape.points }; if (!oldLayout) { guideLine.setShape(newLayout); guideLine.style.strokePercent = 0; initProps(guideLine, { style: { strokePercent: 1 } }, seriesModel); } else { guideLine.attr({ shape: oldLayout }); updateProps$1(guideLine, { shape: newLayout }, seriesModel); } layoutStore.oldLayout = newLayout; } }; return LabelManager; }(); //#endregion //#region node_modules/echarts/lib/label/installLabelLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var getLabelManager = makeInner(); function installLabelLayout(registers) { registers.registerUpdateLifecycle("series:beforeupdate", function(ecModel, api, params) { var labelManager = getLabelManager(api).labelManager; if (!labelManager) labelManager = getLabelManager(api).labelManager = new LabelManager(); labelManager.clearLabels(); }); registers.registerUpdateLifecycle("series:layoutlabels", function(ecModel, api, params) { var labelManager = getLabelManager(api).labelManager; each$12(params.updatedSeries, function(series) { labelManager.addLabelsOfSeries(api.getViewOfSeriesModel(series)); }); labelManager.updateLayoutConfig(api); labelManager.layout(api); labelManager.processLabelsOverall(); }); } //#endregion //#region node_modules/zrender/lib/svg/SVGPathRebuilder.js var mathSin = Math.sin; var mathCos = Math.cos; var PI$3 = Math.PI; var PI2$1 = Math.PI * 2; var degree = 180 / PI$3; var SVGPathRebuilder = function() { function SVGPathRebuilder() {} SVGPathRebuilder.prototype.reset = function(precision) { this._start = true; this._d = []; this._str = ""; this._p = Math.pow(10, precision || 4); }; SVGPathRebuilder.prototype.moveTo = function(x, y) { this._add("M", x, y); }; SVGPathRebuilder.prototype.lineTo = function(x, y) { this._add("L", x, y); }; SVGPathRebuilder.prototype.bezierCurveTo = function(x, y, x2, y2, x3, y3) { this._add("C", x, y, x2, y2, x3, y3); }; SVGPathRebuilder.prototype.quadraticCurveTo = function(x, y, x2, y2) { this._add("Q", x, y, x2, y2); }; SVGPathRebuilder.prototype.arc = function(cx, cy, r, startAngle, endAngle, anticlockwise) { this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise); }; SVGPathRebuilder.prototype.ellipse = function(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise) { var dTheta = endAngle - startAngle; var clockwise = !anticlockwise; var dThetaPositive = Math.abs(dTheta); var isCircle = isAroundZero(dThetaPositive - PI2$1) || (clockwise ? dTheta >= PI2$1 : -dTheta >= PI2$1); var unifiedTheta = dTheta > 0 ? dTheta % PI2$1 : dTheta % PI2$1 + PI2$1; var large = false; if (isCircle) large = true; else if (isAroundZero(dThetaPositive)) large = false; else large = unifiedTheta >= PI$3 === !!clockwise; var x0 = cx + rx * mathCos(startAngle); var y0 = cy + ry * mathSin(startAngle); if (this._start) this._add("M", x0, y0); var xRot = Math.round(psi * degree); if (isCircle) { var p = 1 / this._p; var dTheta_1 = (clockwise ? 1 : -1) * (PI2$1 - p); this._add("A", rx, ry, xRot, 1, +clockwise, cx + rx * mathCos(startAngle + dTheta_1), cy + ry * mathSin(startAngle + dTheta_1)); if (p > .01) this._add("A", rx, ry, xRot, 0, +clockwise, x0, y0); } else { var x = cx + rx * mathCos(endAngle); var y = cy + ry * mathSin(endAngle); this._add("A", rx, ry, xRot, +large, +clockwise, x, y); } }; SVGPathRebuilder.prototype.rect = function(x, y, w, h) { this._add("M", x, y); this._add("l", w, 0); this._add("l", 0, h); this._add("l", -w, 0); this._add("Z"); }; SVGPathRebuilder.prototype.closePath = function() { if (this._d.length > 0) this._add("Z"); }; SVGPathRebuilder.prototype._add = function(cmd, a, b, c, d, e, f, g, h) { var vals = []; var p = this._p; for (var i = 1; i < arguments.length; i++) { var val = arguments[i]; if (isNaN(val)) { this._invalid = true; return; } vals.push(Math.round(val * p) / p); } this._d.push(cmd + vals.join(" ")); this._start = cmd === "Z"; }; SVGPathRebuilder.prototype.generateStr = function() { this._str = this._invalid ? "" : this._d.join(""); this._d = []; }; SVGPathRebuilder.prototype.getStr = function() { return this._str; }; return SVGPathRebuilder; }(); //#endregion //#region node_modules/zrender/lib/svg/mapStyleToAttrs.js var NONE = "none"; var mathRound = Math.round; function pathHasFill(style) { var fill = style.fill; return fill != null && fill !== NONE; } function pathHasStroke(style) { var stroke = style.stroke; return stroke != null && stroke !== NONE; } var strokeProps = [ "lineCap", "miterLimit", "lineJoin" ]; var svgStrokeProps = map$1(strokeProps, function(prop) { return "stroke-" + prop.toLowerCase(); }); function mapStyleToAttrs(updateAttr, style, el, forceUpdate) { var opacity = style.opacity == null ? 1 : style.opacity; if (el instanceof ZRImage) { updateAttr("opacity", opacity); return; } if (pathHasFill(style)) { var fill = normalizeColor(style.fill); updateAttr("fill", fill.color); var fillOpacity = style.fillOpacity != null ? style.fillOpacity * fill.opacity * opacity : fill.opacity * opacity; if (forceUpdate || fillOpacity < 1) updateAttr("fill-opacity", fillOpacity); } else updateAttr("fill", NONE); if (pathHasStroke(style)) { var stroke = normalizeColor(style.stroke); updateAttr("stroke", stroke.color); var strokeScale = style.strokeNoScale ? el.getLineScale() : 1; var strokeWidth = strokeScale ? (style.lineWidth || 0) / strokeScale : 0; var strokeOpacity = style.strokeOpacity != null ? style.strokeOpacity * stroke.opacity * opacity : stroke.opacity * opacity; var strokeFirst = style.strokeFirst; if (forceUpdate || strokeWidth !== 1) updateAttr("stroke-width", strokeWidth); if (forceUpdate || strokeFirst) updateAttr("paint-order", strokeFirst ? "stroke" : "fill"); if (forceUpdate || strokeOpacity < 1) updateAttr("stroke-opacity", strokeOpacity); if (style.lineDash) { var _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1]; if (lineDash) { lineDashOffset = mathRound(lineDashOffset || 0); updateAttr("stroke-dasharray", lineDash.join(",")); if (lineDashOffset || forceUpdate) updateAttr("stroke-dashoffset", lineDashOffset); } } else if (forceUpdate) updateAttr("stroke-dasharray", NONE); for (var i = 0; i < strokeProps.length; i++) { var propName = strokeProps[i]; if (forceUpdate || style[propName] !== DEFAULT_PATH_STYLE[propName]) { var val = style[propName] || DEFAULT_PATH_STYLE[propName]; val && updateAttr(svgStrokeProps[i], val); } } } else if (forceUpdate) updateAttr("stroke", NONE); } //#endregion //#region node_modules/zrender/lib/svg/core.js var SVGNS = "http://www.w3.org/2000/svg"; var XLINKNS = "http://www.w3.org/1999/xlink"; var XMLNS = "http://www.w3.org/2000/xmlns/"; var XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; var META_DATA_PREFIX = "ecmeta_"; function createElement(name) { return document.createElementNS(SVGNS, name); } function createVNode(tag, key, attrs, children, text) { return { tag, attrs: attrs || {}, children, text, key }; } function createElementOpen(name, attrs) { var attrsStr = []; if (attrs) for (var key in attrs) { var val = attrs[key]; var part = key; if (val === false) continue; else if (val !== true && val != null) part += "=\"" + val + "\""; attrsStr.push(part); } return "<" + name + " " + attrsStr.join(" ") + ">"; } function createElementClose(name) { return ""; } function vNodeToString(el, opts) { opts = opts || {}; var S = opts.newline ? "\n" : ""; function convertElToString(el) { var children = el.children, tag = el.tag, attrs = el.attrs, text = el.text; return createElementOpen(tag, attrs) + (tag !== "style" ? encodeHTML(text) : text || "") + (children ? "" + S + map$1(children, function(child) { return convertElToString(child); }).join(S) + S : "") + createElementClose(tag); } return convertElToString(el); } function getCssString(selectorNodes, animationNodes, opts) { opts = opts || {}; var S = opts.newline ? "\n" : ""; var bracketBegin = " {" + S; var bracketEnd = S + "}"; var selectors = map$1(keys(selectorNodes), function(className) { return className + bracketBegin + map$1(keys(selectorNodes[className]), function(attrName) { return attrName + ":" + selectorNodes[className][attrName] + ";"; }).join(S) + bracketEnd; }).join(S); var animations = map$1(keys(animationNodes), function(animationName) { return "@keyframes " + animationName + bracketBegin + map$1(keys(animationNodes[animationName]), function(percent) { return percent + bracketBegin + map$1(keys(animationNodes[animationName][percent]), function(attrName) { var val = animationNodes[animationName][percent][attrName]; if (attrName === "d") val = "path(\"" + val + "\")"; return attrName + ":" + val + ";"; }).join(S) + bracketEnd; }).join(S) + bracketEnd; }).join(S); if (!selectors && !animations) return ""; return [ "" ].join(S); } function createBrushScope(zrId) { return { zrId, shadowCache: {}, patternCache: {}, gradientCache: {}, clipPathCache: {}, defs: {}, cssNodes: {}, cssAnims: {}, cssStyleCache: {}, cssAnimIdx: 0, shadowIdx: 0, gradientIdx: 0, patternIdx: 0, clipPathIdx: 0 }; } function createSVGVNode(width, height, children, useViewBox) { return createVNode("svg", "root", { "width": width, "height": height, "xmlns": SVGNS, "xmlns:xlink": XLINKNS, "version": "1.1", "baseProfile": "full", "viewBox": useViewBox ? "0 0 " + width + " " + height : false }, children); } //#endregion //#region node_modules/zrender/lib/svg/cssClassId.js var cssClassIdx = 0; function getClassId() { return cssClassIdx++; } //#endregion //#region node_modules/zrender/lib/svg/cssAnimation.js var EASING_MAP = { cubicIn: "0.32,0,0.67,0", cubicOut: "0.33,1,0.68,1", cubicInOut: "0.65,0,0.35,1", quadraticIn: "0.11,0,0.5,0", quadraticOut: "0.5,1,0.89,1", quadraticInOut: "0.45,0,0.55,1", quarticIn: "0.5,0,0.75,0", quarticOut: "0.25,1,0.5,1", quarticInOut: "0.76,0,0.24,1", quinticIn: "0.64,0,0.78,0", quinticOut: "0.22,1,0.36,1", quinticInOut: "0.83,0,0.17,1", sinusoidalIn: "0.12,0,0.39,0", sinusoidalOut: "0.61,1,0.88,1", sinusoidalInOut: "0.37,0,0.63,1", exponentialIn: "0.7,0,0.84,0", exponentialOut: "0.16,1,0.3,1", exponentialInOut: "0.87,0,0.13,1", circularIn: "0.55,0,1,0.45", circularOut: "0,0.55,0.45,1", circularInOut: "0.85,0,0.15,1" }; var transformOriginKey = "transform-origin"; function buildPathString(el, kfShape, path) { var shape = extend({}, el.shape); extend(shape, kfShape); el.buildPath(path, shape); var svgPathBuilder = new SVGPathRebuilder(); svgPathBuilder.reset(getPathPrecision(el)); path.rebuildPath(svgPathBuilder, 1); svgPathBuilder.generateStr(); return svgPathBuilder.getStr(); } function setTransformOrigin(target, transform) { var originX = transform.originX, originY = transform.originY; if (originX || originY) target[transformOriginKey] = originX + "px " + originY + "px"; } var ANIMATE_STYLE_MAP = { fill: "fill", opacity: "opacity", lineWidth: "stroke-width", lineDashOffset: "stroke-dashoffset" }; function addAnimation(cssAnim, scope) { var animationName = scope.zrId + "-ani-" + scope.cssAnimIdx++; scope.cssAnims[animationName] = cssAnim; return animationName; } function createCompoundPathCSSAnimation(el, attrs, scope) { var paths = el.shape.paths; var composedAnim = {}; var cssAnimationCfg; var cssAnimationName; each$12(paths, function(path) { var subScope = createBrushScope(scope.zrId); subScope.animation = true; createCSSAnimation(path, {}, subScope, true); var cssAnims = subScope.cssAnims; var cssNodes = subScope.cssNodes; var animNames = keys(cssAnims); var len = animNames.length; if (!len) return; cssAnimationName = animNames[len - 1]; var lastAnim = cssAnims[cssAnimationName]; for (var percent in lastAnim) { var kf = lastAnim[percent]; composedAnim[percent] = composedAnim[percent] || { d: "" }; composedAnim[percent].d += kf.d || ""; } for (var className in cssNodes) { var val = cssNodes[className].animation; if (val.indexOf(cssAnimationName) >= 0) cssAnimationCfg = val; } }); if (!cssAnimationCfg) return; attrs.d = false; var animationName = addAnimation(composedAnim, scope); return cssAnimationCfg.replace(cssAnimationName, animationName); } function getEasingFunc(easing) { return isString(easing) ? EASING_MAP[easing] ? "cubic-bezier(" + EASING_MAP[easing] + ")" : createCubicEasingFunc(easing) ? easing : "" : ""; } function createCSSAnimation(el, attrs, scope, onlyShape) { var animators = el.animators; var len = animators.length; var cssAnimations = []; if (el instanceof CompoundPath) { var animationCfg = createCompoundPathCSSAnimation(el, attrs, scope); if (animationCfg) cssAnimations.push(animationCfg); else if (!len) return; } else if (!len) return; var groupAnimators = {}; for (var i = 0; i < len; i++) { var animator = animators[i]; var cfgArr = [animator.getMaxTime() / 1e3 + "s"]; var easing = getEasingFunc(animator.getClip().easing); var delay = animator.getDelay(); if (easing) cfgArr.push(easing); else cfgArr.push("linear"); if (delay) cfgArr.push(delay / 1e3 + "s"); if (animator.getLoop()) cfgArr.push("infinite"); var cfg = cfgArr.join(" "); groupAnimators[cfg] = groupAnimators[cfg] || [cfg, []]; groupAnimators[cfg][1].push(animator); } function createSingleCSSAnimation(groupAnimator) { var animators = groupAnimator[1]; var len = animators.length; var transformKfs = {}; var shapeKfs = {}; var finalKfs = {}; var animationTimingFunctionAttrName = "animation-timing-function"; function saveAnimatorTrackToCssKfs(animator, cssKfs, toCssAttrName) { var tracks = animator.getTracks(); var maxTime = animator.getMaxTime(); for (var k = 0; k < tracks.length; k++) { var track = tracks[k]; if (track.needsAnimate()) { var kfs = track.keyframes; var attrName = track.propName; toCssAttrName && (attrName = toCssAttrName(attrName)); if (attrName) for (var i = 0; i < kfs.length; i++) { var kf = kfs[i]; var percent = Math.round(kf.time / maxTime * 100) + "%"; var kfEasing = getEasingFunc(kf.easing); var rawValue = kf.rawValue; if (isString(rawValue) || isNumber(rawValue)) { cssKfs[percent] = cssKfs[percent] || {}; cssKfs[percent][attrName] = kf.rawValue; if (kfEasing) cssKfs[percent][animationTimingFunctionAttrName] = kfEasing; } } } } } for (var i = 0; i < len; i++) { var animator = animators[i]; var targetProp = animator.targetName; if (!targetProp) !onlyShape && saveAnimatorTrackToCssKfs(animator, transformKfs); else if (targetProp === "shape") saveAnimatorTrackToCssKfs(animator, shapeKfs); } for (var percent in transformKfs) { var transform = {}; copyTransform(transform, el); extend(transform, transformKfs[percent]); var str = getSRTTransformString(transform); var timingFunction = transformKfs[percent][animationTimingFunctionAttrName]; finalKfs[percent] = str ? { transform: str } : {}; setTransformOrigin(finalKfs[percent], transform); if (timingFunction) finalKfs[percent][animationTimingFunctionAttrName] = timingFunction; } var path; var canAnimateShape = true; for (var percent in shapeKfs) { finalKfs[percent] = finalKfs[percent] || {}; var isFirst = !path; var timingFunction = shapeKfs[percent][animationTimingFunctionAttrName]; if (isFirst) path = new PathProxy(); var len_1 = path.len(); path.reset(); finalKfs[percent].d = buildPathString(el, shapeKfs[percent], path); var newLen = path.len(); if (!isFirst && len_1 !== newLen) { canAnimateShape = false; break; } if (timingFunction) finalKfs[percent][animationTimingFunctionAttrName] = timingFunction; } if (!canAnimateShape) for (var percent in finalKfs) delete finalKfs[percent].d; if (!onlyShape) for (var i = 0; i < len; i++) { var animator = animators[i]; var targetProp = animator.targetName; if (targetProp === "style") saveAnimatorTrackToCssKfs(animator, finalKfs, function(propName) { return ANIMATE_STYLE_MAP[propName]; }); } var percents = keys(finalKfs); var allTransformOriginSame = true; var transformOrigin; for (var i = 1; i < percents.length; i++) { var p0 = percents[i - 1]; var p1 = percents[i]; if (finalKfs[p0][transformOriginKey] !== finalKfs[p1][transformOriginKey]) { allTransformOriginSame = false; break; } transformOrigin = finalKfs[p0][transformOriginKey]; } if (allTransformOriginSame && transformOrigin) { for (var percent in finalKfs) if (finalKfs[percent][transformOriginKey]) delete finalKfs[percent][transformOriginKey]; attrs[transformOriginKey] = transformOrigin; } if (filter(percents, function(percent) { return keys(finalKfs[percent]).length > 0; }).length) return addAnimation(finalKfs, scope) + " " + groupAnimator[0] + " both"; } for (var key in groupAnimators) { var animationCfg = createSingleCSSAnimation(groupAnimators[key]); if (animationCfg) cssAnimations.push(animationCfg); } if (cssAnimations.length) { var className = scope.zrId + "-cls-" + getClassId(); scope.cssNodes["." + className] = { animation: cssAnimations.join(",") }; attrs["class"] = className; } } //#endregion //#region node_modules/zrender/lib/svg/cssEmphasis.js function createCSSEmphasis(el, attrs, scope) { if (!el.ignore) { if (el.isSilent()) { var style = { "pointer-events": "none" }; setClassAttribute(style, attrs, scope, true); } else { var emphasisStyle = el.states.emphasis && el.states.emphasis.style ? el.states.emphasis.style : {}; var fill = emphasisStyle.fill; if (!fill) { var normalFill = el.style && el.style.fill; var selectFill = el.states.select && el.states.select.style && el.states.select.style.fill; var fromFill = el.currentStates.indexOf("select") >= 0 ? selectFill || normalFill : normalFill; if (fromFill) fill = liftColor(fromFill); } var lineWidth = emphasisStyle.lineWidth; if (lineWidth) { var scaleX = !emphasisStyle.strokeNoScale && el.transform ? el.transform[0] : 1; lineWidth = lineWidth / scaleX; } var style = { cursor: "pointer" }; if (fill) style.fill = fill; if (emphasisStyle.stroke) style.stroke = emphasisStyle.stroke; if (lineWidth) style["stroke-width"] = lineWidth; setClassAttribute(style, attrs, scope, true); } } } function setClassAttribute(style, attrs, scope, withHover) { var styleKey = JSON.stringify(style); var className = scope.cssStyleCache[styleKey]; if (!className) { className = scope.zrId + "-cls-" + getClassId(); scope.cssStyleCache[styleKey] = className; scope.cssNodes["." + className + (withHover ? ":hover" : "")] = style; } attrs["class"] = attrs["class"] ? attrs["class"] + " " + className : className; } //#endregion //#region node_modules/zrender/lib/svg/graphic.js var round$1 = Math.round; function isImageLike(val) { return val && isString(val.src); } function isCanvasLike(val) { return val && isFunction(val.toDataURL); } function setStyleAttrs(attrs, style, el, scope) { mapStyleToAttrs(function(key, val) { var isFillStroke = key === "fill" || key === "stroke"; if (isFillStroke && isGradient(val)) setGradient(style, attrs, key, scope); else if (isFillStroke && isPattern(val)) setPattern(el, attrs, key, scope); else attrs[key] = val; if (isFillStroke && scope.ssr && val === "none") attrs["pointer-events"] = "visible"; }, style, el, false); setShadow(el, attrs, scope); } function setMetaData(attrs, el) { var metaData = getElementSSRData(el); if (metaData) { metaData.each(function(val, key) { val != null && (attrs[("ecmeta_" + key).toLowerCase()] = val + ""); }); if (el.isSilent()) attrs[META_DATA_PREFIX + "silent"] = "true"; } } function noRotateScale(m) { return isAroundZero(m[0] - 1) && isAroundZero(m[1]) && isAroundZero(m[2]) && isAroundZero(m[3] - 1); } function noTranslate(m) { return isAroundZero(m[4]) && isAroundZero(m[5]); } function setTransform(attrs, m, compress) { if (m && !(noTranslate(m) && noRotateScale(m))) { var mul = compress ? 10 : 1e4; attrs.transform = noRotateScale(m) ? "translate(" + round$1(m[4] * mul) / mul + " " + round$1(m[5] * mul) / mul + ")" : getMatrixStr(m); } } function convertPolyShape(shape, attrs, mul) { var points = shape.points; var strArr = []; for (var i = 0; i < points.length; i++) { strArr.push(round$1(points[i][0] * mul) / mul); strArr.push(round$1(points[i][1] * mul) / mul); } attrs.points = strArr.join(" "); } function validatePolyShape(shape) { return !shape.smooth; } function createAttrsConvert(desc) { var normalizedDesc = map$1(desc, function(item) { return typeof item === "string" ? [item, item] : item; }); return function(shape, attrs, mul) { for (var i = 0; i < normalizedDesc.length; i++) { var item = normalizedDesc[i]; var val = shape[item[0]]; if (val != null) attrs[item[1]] = round$1(val * mul) / mul; } }; } var builtinShapesDef = { circle: [createAttrsConvert([ "cx", "cy", "r" ])], polyline: [convertPolyShape, validatePolyShape], polygon: [convertPolyShape, validatePolyShape] }; function hasShapeAnimation(el) { var animators = el.animators; for (var i = 0; i < animators.length; i++) if (animators[i].targetName === "shape") return true; return false; } function brushSVGPath(el, scope) { var style = el.style; var shape = el.shape; var builtinShpDef = builtinShapesDef[el.type]; var attrs = {}; var needsAnimate = scope.animation; var svgElType = "path"; var strokePercent = el.style.strokePercent; var precision = scope.compress && getPathPrecision(el) || 4; if (builtinShpDef && !scope.willUpdate && !(builtinShpDef[1] && !builtinShpDef[1](shape)) && !(needsAnimate && hasShapeAnimation(el)) && !(strokePercent < 1)) { svgElType = el.type; var mul = Math.pow(10, precision); builtinShpDef[0](shape, attrs, mul); } else { var needBuildPath = !el.path || el.shapeChanged(); if (!el.path) el.createPathProxy(); var path = el.path; if (needBuildPath) { path.beginPath(); el.buildPath(path, el.shape); el.pathUpdated(); } var pathVersion = path.getVersion(); var elExt = el; var svgPathBuilder = elExt.__svgPathBuilder; if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || strokePercent !== elExt.__svgPathStrokePercent) { if (!svgPathBuilder) svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder(); svgPathBuilder.reset(precision); path.rebuildPath(svgPathBuilder, strokePercent); svgPathBuilder.generateStr(); elExt.__svgPathVersion = pathVersion; elExt.__svgPathStrokePercent = strokePercent; } attrs.d = svgPathBuilder.getStr(); } setTransform(attrs, el.transform); setStyleAttrs(attrs, style, el, scope); setMetaData(attrs, el); scope.animation && createCSSAnimation(el, attrs, scope); scope.emphasis && createCSSEmphasis(el, attrs, scope); return createVNode(svgElType, el.id + "", attrs); } function brushSVGImage(el, scope) { var style = el.style; var image = style.image; if (image && !isString(image)) { if (isImageLike(image)) image = image.src; else if (isCanvasLike(image)) image = image.toDataURL(); } if (!image) return; var x = style.x || 0; var y = style.y || 0; var dw = style.width; var dh = style.height; var attrs = { href: image, width: dw, height: dh }; if (x) attrs.x = x; if (y) attrs.y = y; setTransform(attrs, el.transform); setStyleAttrs(attrs, style, el, scope); setMetaData(attrs, el); scope.animation && createCSSAnimation(el, attrs, scope); return createVNode("image", el.id + "", attrs); } function brushSVGTSpan(el, scope) { var style = el.style; var text = style.text; text != null && (text += ""); if (!text || isNaN(style.x) || isNaN(style.y)) return; var font = style.font || "12px sans-serif"; var x = style.x || 0; var y = adjustTextY$1(style.y || 0, getLineHeight(font), style.textBaseline); var attrs = { "dominant-baseline": "central", "text-anchor": TEXT_ALIGN_TO_ANCHOR[style.textAlign] || style.textAlign }; if (hasSeparateFont(style)) { var separatedFontStr = ""; var fontStyle = style.fontStyle; var fontSize = parseFontSize(style.fontSize); if (!parseFloat(fontSize)) return; var fontFamily = style.fontFamily || "sans-serif"; var fontWeight = style.fontWeight; separatedFontStr += "font-size:" + fontSize + ";font-family:" + fontFamily + ";"; if (fontStyle && fontStyle !== "normal") separatedFontStr += "font-style:" + fontStyle + ";"; if (fontWeight && fontWeight !== "normal") separatedFontStr += "font-weight:" + fontWeight + ";"; attrs.style = separatedFontStr; } else attrs.style = "font: " + font; if (text.match(/\s/)) attrs["xml:space"] = "preserve"; if (x) attrs.x = x; if (y) attrs.y = y; setTransform(attrs, el.transform); setStyleAttrs(attrs, style, el, scope); setMetaData(attrs, el); scope.animation && createCSSAnimation(el, attrs, scope); return createVNode("text", el.id + "", attrs, void 0, text); } function brush(el, scope) { if (el instanceof Path) return brushSVGPath(el, scope); else if (el instanceof ZRImage) return brushSVGImage(el, scope); else if (el instanceof TSpan) return brushSVGTSpan(el, scope); } function setShadow(el, attrs, scope) { var style = el.style; if (hasShadow(style)) { var shadowKey = getShadowKey(el); var shadowCache = scope.shadowCache; var shadowId = shadowCache[shadowKey]; if (!shadowId) { var globalScale = el.getGlobalScale(); var scaleX = globalScale[0]; var scaleY = globalScale[1]; if (!scaleX || !scaleY) return; var offsetX = style.shadowOffsetX || 0; var offsetY = style.shadowOffsetY || 0; var blur_1 = style.shadowBlur; var _a = normalizeColor(style.shadowColor), opacity = _a.opacity, color = _a.color; var stdDx = blur_1 / 2 / scaleX; var stdDy = blur_1 / 2 / scaleY; var stdDeviation = stdDx + " " + stdDy; shadowId = scope.zrId + "-s" + scope.shadowIdx++; scope.defs[shadowId] = createVNode("filter", shadowId, { "id": shadowId, "x": "-100%", "y": "-100%", "width": "300%", "height": "300%" }, [createVNode("feDropShadow", "", { "dx": offsetX / scaleX, "dy": offsetY / scaleY, "stdDeviation": stdDeviation, "flood-color": color, "flood-opacity": opacity })]); shadowCache[shadowKey] = shadowId; } attrs.filter = getIdURL(shadowId); } } function setGradient(style, attrs, target, scope) { var val = style[target]; var gradientTag; var gradientAttrs = { "gradientUnits": val.global ? "userSpaceOnUse" : "objectBoundingBox" }; if (isLinearGradient(val)) { gradientTag = "linearGradient"; gradientAttrs.x1 = val.x; gradientAttrs.y1 = val.y; gradientAttrs.x2 = val.x2; gradientAttrs.y2 = val.y2; } else if (isRadialGradient(val)) { gradientTag = "radialGradient"; gradientAttrs.cx = retrieve2(val.x, .5); gradientAttrs.cy = retrieve2(val.y, .5); gradientAttrs.r = retrieve2(val.r, .5); } else { logError("Illegal gradient type."); return; } var colors = val.colorStops; var colorStops = []; for (var i = 0, len = colors.length; i < len; ++i) { var offset = round4(colors[i].offset) * 100 + "%"; var stopColor = colors[i].color; var _a = normalizeColor(stopColor), color = _a.color, opacity = _a.opacity; var stopsAttrs = { "offset": offset }; stopsAttrs["stop-color"] = color; if (opacity < 1) stopsAttrs["stop-opacity"] = opacity; colorStops.push(createVNode("stop", i + "", stopsAttrs)); } var gradientKey = vNodeToString(createVNode(gradientTag, "", gradientAttrs, colorStops)); var gradientCache = scope.gradientCache; var gradientId = gradientCache[gradientKey]; if (!gradientId) { gradientId = scope.zrId + "-g" + scope.gradientIdx++; gradientCache[gradientKey] = gradientId; gradientAttrs.id = gradientId; scope.defs[gradientId] = createVNode(gradientTag, gradientId, gradientAttrs, colorStops); } attrs[target] = getIdURL(gradientId); } function setPattern(el, attrs, target, scope) { var val = el.style[target]; var boundingRect = el.getBoundingRect(); var patternAttrs = {}; var repeat = val.repeat; var noRepeat = repeat === "no-repeat"; var repeatX = repeat === "repeat-x"; var repeatY = repeat === "repeat-y"; var child; if (isImagePattern(val)) { var imageWidth_1 = val.imageWidth; var imageHeight_1 = val.imageHeight; var imageSrc = void 0; var patternImage = val.image; if (isString(patternImage)) imageSrc = patternImage; else if (isImageLike(patternImage)) imageSrc = patternImage.src; else if (isCanvasLike(patternImage)) imageSrc = patternImage.toDataURL(); if (typeof Image === "undefined") { var errMsg = "Image width/height must been given explictly in svg-ssr renderer."; assert(imageWidth_1, errMsg); assert(imageHeight_1, errMsg); } else if (imageWidth_1 == null || imageHeight_1 == null) { var setSizeToVNode_1 = function(vNode, img) { if (vNode) { var svgEl = vNode.elm; var width = imageWidth_1 || img.width; var height = imageHeight_1 || img.height; if (vNode.tag === "pattern") { if (repeatX) { height = 1; width /= boundingRect.width; } else if (repeatY) { width = 1; height /= boundingRect.height; } } vNode.attrs.width = width; vNode.attrs.height = height; if (svgEl) { svgEl.setAttribute("width", width); svgEl.setAttribute("height", height); } } }; var createdImage = createOrUpdateImage(imageSrc, null, el, function(img) { noRepeat || setSizeToVNode_1(patternVNode, img); setSizeToVNode_1(child, img); }); if (createdImage && createdImage.width && createdImage.height) { imageWidth_1 = imageWidth_1 || createdImage.width; imageHeight_1 = imageHeight_1 || createdImage.height; } } child = createVNode("image", "img", { href: imageSrc, width: imageWidth_1, height: imageHeight_1 }); patternAttrs.width = imageWidth_1; patternAttrs.height = imageHeight_1; } else if (val.svgElement) { child = clone$4(val.svgElement); patternAttrs.width = val.svgWidth; patternAttrs.height = val.svgHeight; } if (!child) return; var patternWidth; var patternHeight; if (noRepeat) patternWidth = patternHeight = 1; else if (repeatX) { patternHeight = 1; patternWidth = patternAttrs.width / boundingRect.width; } else if (repeatY) { patternWidth = 1; patternHeight = patternAttrs.height / boundingRect.height; } else patternAttrs.patternUnits = "userSpaceOnUse"; if (patternWidth != null && !isNaN(patternWidth)) patternAttrs.width = patternWidth; if (patternHeight != null && !isNaN(patternHeight)) patternAttrs.height = patternHeight; var patternTransform = getSRTTransformString(val); patternTransform && (patternAttrs.patternTransform = patternTransform); var patternVNode = createVNode("pattern", "", patternAttrs, [child]); var patternKey = vNodeToString(patternVNode); var patternCache = scope.patternCache; var patternId = patternCache[patternKey]; if (!patternId) { patternId = scope.zrId + "-p" + scope.patternIdx++; patternCache[patternKey] = patternId; patternAttrs.id = patternId; patternVNode = scope.defs[patternId] = createVNode("pattern", patternId, patternAttrs, [child]); } attrs[target] = getIdURL(patternId); } function setClipPath(clipPath, attrs, scope) { var clipPathCache = scope.clipPathCache, defs = scope.defs; var clipPathId = clipPathCache[clipPath.id]; if (!clipPathId) { clipPathId = scope.zrId + "-c" + scope.clipPathIdx++; var clipPathAttrs = { id: clipPathId }; clipPathCache[clipPath.id] = clipPathId; defs[clipPathId] = createVNode("clipPath", clipPathId, clipPathAttrs, [brushSVGPath(clipPath, scope)]); } attrs["clip-path"] = getIdURL(clipPathId); } //#endregion //#region node_modules/zrender/lib/svg/domapi.js function createTextNode(text) { return document.createTextNode(text); } function insertBefore(parentNode, newNode, referenceNode) { parentNode.insertBefore(newNode, referenceNode); } function removeChild(node, child) { node.removeChild(child); } function appendChild(node, child) { node.appendChild(child); } function parentNode(node) { return node.parentNode; } function nextSibling(node) { return node.nextSibling; } function setTextContent(node, text) { node.textContent = text; } //#endregion //#region node_modules/zrender/lib/svg/patch.js var colonChar = 58; var xChar = 120; var emptyNode = createVNode("", ""); function isUndef(s) { return s === void 0; } function isDef(s) { return s !== void 0; } function createKeyToOldIdx(children, beginIdx, endIdx) { var map = {}; for (var i = beginIdx; i <= endIdx; ++i) { var key = children[i].key; if (key !== void 0) { if (map[key] != null) console.error("Duplicate key " + key); map[key] = i; } } return map; } function sameVnode(vnode1, vnode2) { var isSameKey = vnode1.key === vnode2.key; return vnode1.tag === vnode2.tag && isSameKey; } function createElm(vnode) { var i; var children = vnode.children; var tag = vnode.tag; if (isDef(tag)) { var elm = vnode.elm = createElement(tag); updateAttrs(emptyNode, vnode); if (isArray$1(children)) for (i = 0; i < children.length; ++i) { var ch = children[i]; if (ch != null) appendChild(elm, createElm(ch)); } else if (isDef(vnode.text) && !isObject$3(vnode.text)) appendChild(elm, createTextNode(vnode.text)); } else vnode.elm = createTextNode(vnode.text); return vnode.elm; } function addVnodes(parentElm, before, vnodes, startIdx, endIdx) { for (; startIdx <= endIdx; ++startIdx) { var ch = vnodes[startIdx]; if (ch != null) insertBefore(parentElm, createElm(ch), before); } } function removeVnodes(parentElm, vnodes, startIdx, endIdx) { for (; startIdx <= endIdx; ++startIdx) { var ch = vnodes[startIdx]; if (ch != null) { if (isDef(ch.tag)) removeChild(parentNode(ch.elm), ch.elm); else removeChild(parentElm, ch.elm); } } } function updateAttrs(oldVnode, vnode) { var key; var elm = vnode.elm; var oldAttrs = oldVnode && oldVnode.attrs || {}; var attrs = vnode.attrs || {}; if (oldAttrs === attrs) return; for (key in attrs) { var cur = attrs[key]; if (oldAttrs[key] !== cur) { if (cur === true) elm.setAttribute(key, ""); else if (cur === false) elm.removeAttribute(key); else if (key === "style") elm.style.cssText = cur; else if (key.charCodeAt(0) !== xChar) elm.setAttribute(key, cur); else if (key === "xmlns:xlink" || key === "xmlns") elm.setAttributeNS(XMLNS, key, cur); else if (key.charCodeAt(3) === colonChar) elm.setAttributeNS(XML_NAMESPACE, key, cur); else if (key.charCodeAt(5) === colonChar) elm.setAttributeNS(XLINKNS, key, cur); else elm.setAttribute(key, cur); } } for (key in oldAttrs) if (!(key in attrs)) elm.removeAttribute(key); } function updateChildren(parentElm, oldCh, newCh) { var oldStartIdx = 0; var newStartIdx = 0; var oldEndIdx = oldCh.length - 1; var oldStartVnode = oldCh[0]; var oldEndVnode = oldCh[oldEndIdx]; var newEndIdx = newCh.length - 1; var newStartVnode = newCh[0]; var newEndVnode = newCh[newEndIdx]; var oldKeyToIdx; var idxInOld; var elmToMove; var before; while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) if (oldStartVnode == null) oldStartVnode = oldCh[++oldStartIdx]; else if (oldEndVnode == null) oldEndVnode = oldCh[--oldEndIdx]; else if (newStartVnode == null) newStartVnode = newCh[++newStartIdx]; else if (newEndVnode == null) newEndVnode = newCh[--newEndIdx]; else if (sameVnode(oldStartVnode, newStartVnode)) { patchVnode(oldStartVnode, newStartVnode); oldStartVnode = oldCh[++oldStartIdx]; newStartVnode = newCh[++newStartIdx]; } else if (sameVnode(oldEndVnode, newEndVnode)) { patchVnode(oldEndVnode, newEndVnode); oldEndVnode = oldCh[--oldEndIdx]; newEndVnode = newCh[--newEndIdx]; } else if (sameVnode(oldStartVnode, newEndVnode)) { patchVnode(oldStartVnode, newEndVnode); insertBefore(parentElm, oldStartVnode.elm, nextSibling(oldEndVnode.elm)); oldStartVnode = oldCh[++oldStartIdx]; newEndVnode = newCh[--newEndIdx]; } else if (sameVnode(oldEndVnode, newStartVnode)) { patchVnode(oldEndVnode, newStartVnode); insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); oldEndVnode = oldCh[--oldEndIdx]; newStartVnode = newCh[++newStartIdx]; } else { if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); idxInOld = oldKeyToIdx[newStartVnode.key]; if (isUndef(idxInOld)) insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm); else { elmToMove = oldCh[idxInOld]; if (elmToMove.tag !== newStartVnode.tag) insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm); else { patchVnode(elmToMove, newStartVnode); oldCh[idxInOld] = void 0; insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm); } } newStartVnode = newCh[++newStartIdx]; } if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) { if (oldStartIdx > oldEndIdx) { before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm; addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx); } else removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx); } } function patchVnode(oldVnode, vnode) { var elm = vnode.elm = oldVnode.elm; var oldCh = oldVnode.children; var ch = vnode.children; if (oldVnode === vnode) return; updateAttrs(oldVnode, vnode); if (isUndef(vnode.text)) { if (isDef(oldCh) && isDef(ch)) { if (oldCh !== ch) updateChildren(elm, oldCh, ch); } else if (isDef(ch)) { if (isDef(oldVnode.text)) setTextContent(elm, ""); addVnodes(elm, null, ch, 0, ch.length - 1); } else if (isDef(oldCh)) removeVnodes(elm, oldCh, 0, oldCh.length - 1); else if (isDef(oldVnode.text)) setTextContent(elm, ""); } else if (oldVnode.text !== vnode.text) { if (isDef(oldCh)) removeVnodes(elm, oldCh, 0, oldCh.length - 1); setTextContent(elm, vnode.text); } } function patch(oldVnode, vnode) { if (sameVnode(oldVnode, vnode)) patchVnode(oldVnode, vnode); else { var elm = oldVnode.elm; var parent_2 = parentNode(elm); createElm(vnode); if (parent_2 !== null) { insertBefore(parent_2, vnode.elm, nextSibling(elm)); removeVnodes(parent_2, [oldVnode], 0, 0); } } return vnode; } //#endregion //#region node_modules/zrender/lib/svg/Painter.js var svgId = 0; var SVGPainter = function() { function SVGPainter(root, storage, opts) { this.type = "svg"; this.configLayer = createMethodNotSupport("configLayer"); this.storage = storage; this._opts = opts = extend({}, opts); this.root = root; this._id = "zr" + svgId++; this._oldVNode = createSVGVNode(opts.width, opts.height); if (root && !opts.ssr) { var viewport = this._viewport = document.createElement("div"); viewport.style.cssText = "position:relative;overflow:hidden"; var svgDom = this._svgDom = this._oldVNode.elm = createElement("svg"); updateAttrs(null, this._oldVNode); viewport.appendChild(svgDom); root.appendChild(viewport); } this.resize(opts.width, opts.height); } SVGPainter.prototype.getType = function() { return this.type; }; SVGPainter.prototype.getViewportRoot = function() { return this._viewport; }; SVGPainter.prototype.getViewportRootOffset = function() { var viewportRoot = this.getViewportRoot(); if (viewportRoot) return { offsetLeft: viewportRoot.offsetLeft || 0, offsetTop: viewportRoot.offsetTop || 0 }; }; SVGPainter.prototype.getSvgDom = function() { return this._svgDom; }; SVGPainter.prototype.refresh = function() { if (this.root) { var vnode = this.renderToVNode({ willUpdate: true }); vnode.attrs.style = "position:absolute;left:0;top:0;user-select:none"; patch(this._oldVNode, vnode); this._oldVNode = vnode; } }; SVGPainter.prototype.renderOneToVNode = function(el) { return brush(el, createBrushScope(this._id)); }; SVGPainter.prototype.renderToVNode = function(opts) { opts = opts || {}; var list = this.storage.getDisplayList(true); var width = this._width; var height = this._height; var scope = createBrushScope(this._id); scope.animation = opts.animation; scope.willUpdate = opts.willUpdate; scope.compress = opts.compress; scope.emphasis = opts.emphasis; scope.ssr = this._opts.ssr; var children = []; var bgVNode = this._bgVNode = createBackgroundVNode(width, height, this._backgroundColor, scope); bgVNode && children.push(bgVNode); var mainVNode = !opts.compress ? this._mainVNode = createVNode("g", "main", {}, []) : null; this._paintList(list, scope, mainVNode ? mainVNode.children : children); mainVNode && children.push(mainVNode); var defs = map$1(keys(scope.defs), function(id) { return scope.defs[id]; }); if (defs.length) children.push(createVNode("defs", "defs", {}, defs)); if (opts.animation) { var animationCssStr = getCssString(scope.cssNodes, scope.cssAnims, { newline: true }); if (animationCssStr) { var styleNode = createVNode("style", "stl", {}, [], animationCssStr); children.push(styleNode); } } return createSVGVNode(width, height, children, opts.useViewBox); }; SVGPainter.prototype.renderToString = function(opts) { opts = opts || {}; return vNodeToString(this.renderToVNode({ animation: retrieve2(opts.cssAnimation, true), emphasis: retrieve2(opts.cssEmphasis, true), willUpdate: false, compress: true, useViewBox: retrieve2(opts.useViewBox, true) }), { newline: true }); }; SVGPainter.prototype.setBackgroundColor = function(backgroundColor) { this._backgroundColor = backgroundColor; }; SVGPainter.prototype.getSvgRoot = function() { return this._mainVNode && this._mainVNode.elm; }; SVGPainter.prototype._paintList = function(list, scope, out) { var listLen = list.length; var clipPathsGroupsStack = []; var clipPathsGroupsStackDepth = 0; var currentClipPathGroup; var prevClipPaths; var clipGroupNodeIdx = 0; for (var i = 0; i < listLen; i++) { var displayable = list[i]; if (!displayable.invisible) { var clipPaths = displayable.__clipPaths; var len = clipPaths && clipPaths.length || 0; var prevLen = prevClipPaths && prevClipPaths.length || 0; var lca = void 0; for (lca = Math.max(len - 1, prevLen - 1); lca >= 0; lca--) if (clipPaths && prevClipPaths && clipPaths[lca] === prevClipPaths[lca]) break; for (var i_1 = prevLen - 1; i_1 > lca; i_1--) { clipPathsGroupsStackDepth--; currentClipPathGroup = clipPathsGroupsStack[clipPathsGroupsStackDepth - 1]; } for (var i_2 = lca + 1; i_2 < len; i_2++) { var groupAttrs = {}; setClipPath(clipPaths[i_2], groupAttrs, scope); var g = createVNode("g", "clip-g-" + clipGroupNodeIdx++, groupAttrs, []); (currentClipPathGroup ? currentClipPathGroup.children : out).push(g); clipPathsGroupsStack[clipPathsGroupsStackDepth++] = g; currentClipPathGroup = g; } prevClipPaths = clipPaths; var ret = brush(displayable, scope); if (ret) (currentClipPathGroup ? currentClipPathGroup.children : out).push(ret); } } }; SVGPainter.prototype.resize = function(width, height) { var opts = this._opts; var root = this.root; var viewport = this._viewport; width != null && (opts.width = width); height != null && (opts.height = height); if (root && viewport) { viewport.style.display = "none"; width = getSize$1(root, 0, opts); height = getSize$1(root, 1, opts); viewport.style.display = ""; } if (this._width !== width || this._height !== height) { this._width = width; this._height = height; if (viewport) { var viewportStyle = viewport.style; viewportStyle.width = width + "px"; viewportStyle.height = height + "px"; } if (!isPattern(this._backgroundColor)) { var svgDom = this._svgDom; if (svgDom) { svgDom.setAttribute("width", width); svgDom.setAttribute("height", height); } var bgEl = this._bgVNode && this._bgVNode.elm; if (bgEl) { bgEl.setAttribute("width", width); bgEl.setAttribute("height", height); } } else this.refresh(); } }; SVGPainter.prototype.getWidth = function() { return this._width; }; SVGPainter.prototype.getHeight = function() { return this._height; }; SVGPainter.prototype.dispose = function() { if (this.root) this.root.innerHTML = ""; this._svgDom = this._viewport = this.storage = this._oldVNode = this._bgVNode = this._mainVNode = null; }; SVGPainter.prototype.clear = function() { if (this._svgDom) this._svgDom.innerHTML = null; this._oldVNode = null; }; SVGPainter.prototype.toDataURL = function(base64) { var str = this.renderToString(); var prefix = "data:image/svg+xml;"; if (base64) { str = encodeBase64(str); return str && prefix + "base64," + str; } return prefix + "charset=UTF-8," + encodeURIComponent(str); }; return SVGPainter; }(); function createMethodNotSupport(method) { return function() { logError("In SVG mode painter not support method \"" + method + "\""); }; } function createBackgroundVNode(width, height, backgroundColor, scope) { var bgVNode; if (backgroundColor && backgroundColor !== "none") { bgVNode = createVNode("rect", "bg", { width, height, x: "0", y: "0" }); if (isGradient(backgroundColor)) setGradient({ fill: backgroundColor }, bgVNode.attrs, "fill", scope); else if (isPattern(backgroundColor)) setPattern({ style: { fill: backgroundColor }, dirty: noop, getBoundingRect: function() { return { width, height }; } }, bgVNode.attrs, "fill", scope); else { var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity; bgVNode.attrs.fill = color; opacity < 1 && (bgVNode.attrs["fill-opacity"] = opacity); } } return bgVNode; } //#endregion //#region node_modules/echarts/lib/renderer/installSVGRenderer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$57(registers) { registers.registerPainter("svg", SVGPainter); } //#endregion //#region node_modules/zrender/lib/canvas/Layer.js function createDom(id, painter, dpr) { var newDom = platformApi.createCanvas(); var width = painter.getWidth(); var height = painter.getHeight(); var newDomStyle = newDom.style; if (newDomStyle) { newDomStyle.position = "absolute"; newDomStyle.left = "0"; newDomStyle.top = "0"; newDomStyle.width = width + "px"; newDomStyle.height = height + "px"; newDom.setAttribute("data-zr-dom-id", id); } newDom.width = width * dpr; newDom.height = height * dpr; return newDom; } function isIncrementalLayer(layer) { return !layer.__cursors.get(0); } function getStartEndFromCursor(layer) { var cursor = layer.__cursors.get(0); return { startIdx: cursor ? cursor.startIdx : 0, endIdx: cursor ? cursor.endIdx : 0 }; } var Layer = function(_super) { __extends(Layer, _super); function Layer(id, painter, dpr) { var _this = _super.call(this) || this; _this.motionBlur = false; _this.lastFrameAlpha = .7; _this.dpr = 1; _this.virtual = false; _this.config = {}; _this.zlevel = 0; _this.zlevel2 = 0; _this.maxRepaintRectCount = 5; _this.__dirty = true; _this.__firstTimePaint = true; _this.__prevIdx = { startIdx: 0, endIdx: 0 }; var dom; dpr = dpr || devicePixelRatio; if (typeof id === "string") dom = createDom(id, painter, dpr); else if (isObject$3(id)) { dom = id; id = dom.id; } _this.id = id; _this.dom = dom; var domStyle = dom.style; if (domStyle) { disableUserSelect(dom); dom.onselectstart = function() { return false; }; domStyle.padding = "0"; domStyle.margin = "0"; domStyle.borderWidth = "0"; } _this.painter = painter; _this.dpr = dpr; return _this; } Layer.prototype.afterBrush = function() { this.__prevIdx = getStartEndFromCursor(this); }; Layer.prototype.initContext = function() { this.ctx = this.dom.getContext("2d"); this.ctx.dpr = this.dpr; }; Layer.prototype.setUnpainted = function() { this.__firstTimePaint = true; }; Layer.prototype.createBackBuffer = function() { var dpr = this.dpr; this.domBack = createDom("back-" + this.id, this.painter, dpr); this.ctxBack = this.domBack.getContext("2d"); if (dpr !== 1) this.ctxBack.scale(dpr, dpr); }; Layer.prototype.createRepaintRects = function(displayList, prevList, viewWidth, viewHeight) { if (this.__firstTimePaint) { this.__firstTimePaint = false; return null; } var mergedRepaintRects = []; var maxRepaintRectCount = this.maxRepaintRectCount; var full = false; var pendingRect = new BoundingRect(0, 0, 0, 0); function addRectToMergePool(rect) { if (!rect.isFinite() || rect.isZero()) return; if (mergedRepaintRects.length === 0) { var boundingRect = new BoundingRect(0, 0, 0, 0); boundingRect.copy(rect); mergedRepaintRects.push(boundingRect); } else { var isMerged = false; var minDeltaArea = Infinity; var bestRectToMergeIdx = 0; for (var i = 0; i < mergedRepaintRects.length; ++i) { var mergedRect = mergedRepaintRects[i]; if (mergedRect.intersect(rect)) { var pendingRect_1 = new BoundingRect(0, 0, 0, 0); pendingRect_1.copy(mergedRect); pendingRect_1.union(rect); mergedRepaintRects[i] = pendingRect_1; isMerged = true; break; } else if (full) { pendingRect.copy(rect); pendingRect.union(mergedRect); var aArea = rect.width * rect.height; var bArea = mergedRect.width * mergedRect.height; var deltaArea = pendingRect.width * pendingRect.height - aArea - bArea; if (deltaArea < minDeltaArea) { minDeltaArea = deltaArea; bestRectToMergeIdx = i; } } } if (full) { mergedRepaintRects[bestRectToMergeIdx].union(rect); isMerged = true; } if (!isMerged) { var boundingRect = new BoundingRect(0, 0, 0, 0); boundingRect.copy(rect); mergedRepaintRects.push(boundingRect); } if (!full) full = mergedRepaintRects.length >= maxRepaintRectCount; } } var se = getStartEndFromCursor(this); for (var i = se.startIdx; i < se.endIdx; ++i) { var el = displayList[i]; if (el) { var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true); var prevRect = el.__isRendered && (el.__dirty & 1 || !shouldPaint) ? el.getPrevPaintRect() : null; if (prevRect) addRectToMergePool(prevRect); var curRect = shouldPaint && (el.__dirty & 1 || !el.__isRendered) ? el.getPaintRect() : null; if (curRect) addRectToMergePool(curRect); } } var prevIdx = this.__prevIdx; for (var i = prevIdx.startIdx; i < prevIdx.endIdx; ++i) { var el = prevList[i]; var shouldPaint = el && el.shouldBePainted(viewWidth, viewHeight, true, true); if (el && (!shouldPaint || !el.__zr) && el.__isRendered) { var prevRect = el.getPrevPaintRect(); if (prevRect) addRectToMergePool(prevRect); } } var hasIntersections; do { hasIntersections = false; for (var i = 0; i < mergedRepaintRects.length;) { if (mergedRepaintRects[i].isZero()) { mergedRepaintRects.splice(i, 1); continue; } for (var j = i + 1; j < mergedRepaintRects.length;) if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) { hasIntersections = true; mergedRepaintRects[i].union(mergedRepaintRects[j]); mergedRepaintRects.splice(j, 1); } else j++; i++; } } while (hasIntersections); this._paintRects = mergedRepaintRects; return mergedRepaintRects; }; Layer.prototype.debugGetPaintRects = function() { return (this._paintRects || []).slice(); }; Layer.prototype.resize = function(width, height) { var dpr = this.dpr; var dom = this.dom; var domStyle = dom.style; var domBack = this.domBack; if (domStyle) { domStyle.width = width + "px"; domStyle.height = height + "px"; } dom.width = width * dpr; dom.height = height * dpr; if (domBack) { domBack.width = width * dpr; domBack.height = height * dpr; if (dpr !== 1) this.ctxBack.scale(dpr, dpr); } }; Layer.prototype.clear = function(clearAll, clearColor, repaintRects) { var dom = this.dom; var ctx = this.ctx; var width = dom.width; var height = dom.height; clearColor = clearColor || this.clearColor; var haveMotionBLur = this.motionBlur && !clearAll; var lastFrameAlpha = this.lastFrameAlpha; var dpr = this.dpr; var self = this; if (haveMotionBLur) { if (!this.domBack) this.createBackBuffer(); this.ctxBack.globalCompositeOperation = "copy"; this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr); } var domBack = this.domBack; function doClear(x, y, width, height) { ctx.clearRect(x, y, width, height); if (clearColor && clearColor !== "transparent") { var clearColorGradientOrPattern = void 0; if (isGradientObject(clearColor)) { clearColorGradientOrPattern = (clearColor.global || clearColor.__width === width && clearColor.__height === height) && clearColor.__canvasGradient || getCanvasGradient(ctx, clearColor, { x: 0, y: 0, width, height }); clearColor.__canvasGradient = clearColorGradientOrPattern; clearColor.__width = width; clearColor.__height = height; } else if (isImagePatternObject(clearColor)) { clearColor.scaleX = clearColor.scaleX || dpr; clearColor.scaleY = clearColor.scaleY || dpr; clearColorGradientOrPattern = createCanvasPattern(ctx, clearColor, { dirty: function() { self.setUnpainted(); self.painter.refresh(); } }); } ctx.save(); ctx.fillStyle = clearColorGradientOrPattern || clearColor; ctx.fillRect(x, y, width, height); ctx.restore(); } if (haveMotionBLur) { ctx.save(); ctx.globalAlpha = lastFrameAlpha; ctx.drawImage(domBack, x, y, width, height); ctx.restore(); } } if (!repaintRects || haveMotionBLur) doClear(0, 0, width, height); else if (repaintRects.length) each$12(repaintRects, function(rect) { doClear(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr); }); }; return Layer; }(Eventful); //#endregion //#region node_modules/zrender/lib/canvas/Painter.js var HOVER_LAYER_ZLEVEL = 1e5; var CANVAS_ZLEVEL = 314159; var HOVER_LAYER_DIRTY_NO = void 0; var HOVER_LAYER_DIRTY_REPAINT_IF_EXISTING = 1; var HOVER_LAYER_DIRTY_REPAINT = 2; function isLayerValid(layer) { if (!layer) return false; if (layer.__builtin__) return true; if (typeof layer.resize !== "function" || typeof layer.refresh !== "function") return false; return true; } function createRoot(width, height) { var domRoot = document.createElement("div"); domRoot.style.cssText = [ "position:relative", "width:" + width + "px", "height:" + height + "px", "padding:0", "margin:0", "border-width:0" ].join(";") + ";"; return domRoot; } function createBuiltinLayer(id, painter, zlevel, zlevel2) { var layer = new Layer(id, painter, painter.dpr); layer.zlevel = zlevel; layer.zlevel2 = zlevel2; layer.__builtin__ = true; resetLayerDrawCursors(layer); return layer; } function resetLayerDrawCursors(layer) { layer.__cursorStack = []; layer.__cursors = createHashMap(); } function resetLayerDrawCursor(cursor) { cursor.startIdx = cursor.drawIdx = cursor.endIdx = cursor.endIdxNew = 0; cursor.used = false; cursor.first = cursor.last = NaN; cursor.notClearIdx = -1; return cursor; } function ensureLayerDrawCursor(layer, incrementalCompat) { var cursors = layer.__cursors; var incremental = +incrementalCompat; return cursors.get(incremental) || (layer.__cursorStack.push(incremental), cursors.set(incremental, resetLayerDrawCursor({ key: incremental }))); } function eachCursorInLayer(layer, cb) { var cursorStack = layer.__cursorStack; for (var i = 0; i < cursorStack.length; i++) cb(layer.__cursors.get(cursorStack[i])); } function ensureLayerListInZLevel(internal, zlevel) { var layers = internal.layers; return layers[zlevel] || (layers[zlevel] = new Array(3)); } function eachLayer(internal, cb, filter) { var layerStack = internal.layerStack; for (var i = 0; i < layerStack.length; i++) { var zlevel = layerStack[i].zl; var zlevel2 = layerStack[i].zl2; var layer = internal.layers[zlevel][zlevel2]; if (!filter || (!(filter & EACH_LAYER_BUILTIN) || layer.__builtin__) && (!(filter & EACH_LAYER_NOT_BUILTIN) || !layer.__builtin__) && (!(filter & EACH_LAYER_NOT_HOVER) || layer !== internal.hoverlayer)) cb(layer, zlevel, zlevel2, i); } } var EACH_LAYER_BUILTIN = 1; var EACH_LAYER_NOT_BUILTIN = 2; var EACH_LAYER_NOT_HOVER = 4; var EACH_LAYER_BUILTIN_NOT_HOVER = EACH_LAYER_BUILTIN | EACH_LAYER_NOT_HOVER; var CanvasPainter = function() { function CanvasPainter(root, storage, opts, id) { this.type = "canvas"; this._prevDisplayList = []; this._layerConfig = {}; this._needsManuallyCompositing = false; this.type = "canvas"; this._i = { layerStack: [], layers: [] }; var singleCanvas = !root.nodeName || root.nodeName.toUpperCase() === "CANVAS"; this._opts = opts = extend({}, opts || {}); this.dpr = opts.devicePixelRatio || devicePixelRatio; this._singleCanvas = singleCanvas; this.root = root; if (root.style) { disableUserSelect(root); root.innerHTML = ""; } this.storage = storage; this._prevDisplayList = []; if (!singleCanvas) { this._width = getSize$1(root, 0, opts); this._height = getSize$1(root, 1, opts); var domRoot = this._domRoot = createRoot(this._width, this._height); root.appendChild(domRoot); } else { var rootCanvas = root; var width = rootCanvas.width; var height = rootCanvas.height; if (opts.width != null) width = opts.width; if (opts.height != null) height = opts.height; this.dpr = opts.devicePixelRatio || 1; rootCanvas.width = width * this.dpr; rootCanvas.height = height * this.dpr; this._width = width; this._height = height; var singleLayer = createBuiltinLayer(rootCanvas, this, CANVAS_ZLEVEL, 0); singleLayer.initContext(); this._insertLayer(singleLayer, CANVAS_ZLEVEL, 0, true); this._domRoot = root; } } CanvasPainter.prototype.getType = function() { return "canvas"; }; CanvasPainter.prototype.isSingleCanvas = function() { return this._singleCanvas; }; CanvasPainter.prototype.getViewportRoot = function() { return this._domRoot; }; CanvasPainter.prototype.getViewportRootOffset = function() { var viewportRoot = this.getViewportRoot(); if (viewportRoot) return { offsetLeft: viewportRoot.offsetLeft || 0, offsetTop: viewportRoot.offsetTop || 0 }; }; CanvasPainter.prototype.refresh = function(optOrPaintAll) { var opt; if (optOrPaintAll && !isObject$3(optOrPaintAll)) opt = { paintAll: !!optOrPaintAll }; else opt = optOrPaintAll || {}; var refresh = retrieve2(opt.refresh, true); var refreshHover = retrieve2(opt.refreshHover, false); if (refreshHover) this._hoverLayerDirty = HOVER_LAYER_DIRTY_REPAINT; if (!refresh) { if (refreshHover) this._paintHoverList(this.storage.getDisplayList(false)); return this; } var list = this.storage.getDisplayList(true); this._updateLayerStatus(list, opt.paintAll); this._redrawId = Math.random(); var prevList = this._prevDisplayList; this._paintList(list, prevList, this._redrawId); var bgColor = this._backgroundColor; eachLayer(this._i, function(layer, zlevel, zlevel2, idx) { if (layer.refresh) layer.refresh(idx === 0 ? bgColor : null); }, EACH_LAYER_NOT_BUILTIN); if (this._opts.useDirtyRect) this._prevDisplayList = list.slice(); return this; }; CanvasPainter.prototype._paintHoverList = function(list) { var hoverLayer = this._i.hoverlayer; var hoverLayerDirty = this._hoverLayerDirty; this._hoverLayerDirty = HOVER_LAYER_DIRTY_NO; if (hoverLayerDirty === HOVER_LAYER_DIRTY_NO) return; if (!hoverLayer && hoverLayerDirty === HOVER_LAYER_DIRTY_REPAINT) hoverLayer = this._i.hoverlayer = this._ensureLayer(HOVER_LAYER_ZLEVEL); if (!hoverLayer) return; hoverLayer.clear(); var scope = { inHover: true, viewWidth: this._width, viewHeight: this._height, beforeBrushParam: {} }; var ctx; for (var i = 0, len = list.length; i < len; i++) { var el = list[i]; if (!el.__inHover) continue; if (!ctx) { ctx = hoverLayer.ctx; ctx.save(); } var hoverStyle = el.__hoverStyle; var originalStyle = void 0; if (hoverStyle) { originalStyle = el.style; el.style = hoverStyle; } brush$1(ctx, el, scope); if (hoverStyle) el.style = originalStyle; } if (ctx) { brushLoopFinalize(ctx, scope); ctx.restore(); } }; CanvasPainter.prototype.getHoverLayer = function() { return this._ensureLayer(HOVER_LAYER_ZLEVEL); }; CanvasPainter.prototype.paintOne = function(ctx, el) { brushSingle(ctx, el); }; CanvasPainter.prototype._paintList = function(list, prevList, redrawId) { if (this._redrawId !== redrawId) return; var finished = this._doPaintList(list, prevList); if (this._needsManuallyCompositing) this._compositeManually(); if (!finished) { var self_1 = this; requestAnimationFrame(function() { self_1._paintList(list, prevList, redrawId); }); } else { eachLayer(this._i, function(layer) { layer.afterBrush && layer.afterBrush(); }, EACH_LAYER_BUILTIN_NOT_HOVER); this._paintHoverList(list); } }; CanvasPainter.prototype._compositeManually = function() { var ctx = this._ensureLayer(CANVAS_ZLEVEL).ctx; var width = this._domRoot.width; var height = this._domRoot.height; ctx.clearRect(0, 0, width, height); eachLayer(this._i, function(layer) { if (layer.virtual) ctx.drawImage(layer.dom, 0, 0, width, height); }, EACH_LAYER_BUILTIN); }; CanvasPainter.prototype._doPaintList = function(list, prevList) { var painter = this; var finished = true; eachLayer(this._i, function(layer) { var needDraw = false; eachCursorInLayer(layer, function(cursor) { if (cursor.drawIdx < cursor.endIdx || cursor.notClearIdx >= 0) needDraw = true; }); if (!needDraw && !layer.__dirty) return; var repaintRects = painter._opts.useDirtyRect && !isIncrementalLayer(layer) ? layer.createRepaintRects(list, prevList, painter._width, painter._height) : null; var firstLayerKey = painter._i.layerStack[0]; var contentRetained = true; if (layer.__dirty) { contentRetained = false; layer.__dirty = false; var clearColor = layer.zlevel === firstLayerKey.zl && layer.zlevel2 === firstLayerKey.zl2 ? painter._backgroundColor : null; layer.clear(false, clearColor, repaintRects); } eachCursorInLayer(layer, function(cursor) { var cursorFinished = painter._paintPerCursor(layer, cursor, list, repaintRects, contentRetained); finished = finished && cursorFinished; }); }, EACH_LAYER_BUILTIN_NOT_HOVER); if (env.wxa) eachLayer(this._i, function(layer) { if (layer && layer.ctx && layer.ctx.draw) layer.ctx.draw(); }); return finished; }; CanvasPainter.prototype._paintPerCursor = function(layer, layerCursor, list, repaintRects, contentRetained) { var ctx = layer.ctx; if (repaintRects) { if (!repaintRects.length) layerCursor.drawIdx = layerCursor.endIdx; else { var dpr = this.dpr; for (var r = 0; r < repaintRects.length; ++r) { var rect = repaintRects[r]; ctx.save(); ctx.beginPath(); ctx.rect(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr); ctx.clip(); this._paintPerCursorInRect(layer, layerCursor, list, rect, contentRetained); ctx.restore(); } } } else { ctx.save(); this._paintPerCursorInRect(layer, layerCursor, list, null, contentRetained); ctx.restore(); } return layerCursor.drawIdx >= layerCursor.endIdx; }; CanvasPainter.prototype._paintPerCursorInRect = function(layer, layerCursor, list, repaintRect, contentRetained) { var scope = { inHover: false, allClipped: false, prevEl: null, viewWidth: this._width, viewHeight: this._height, beforeBrushParam: { contentRetained } }; var ctx = layer.ctx; var useTimer = isIncrementalLayer(layer); var startTime = useTimer && platformApi.getTime(); var drawIdxBegin = layerCursor.drawIdx; var notClearIdx = layerCursor.notClearIdx; var idx = notClearIdx >= 0 ? Math.min(notClearIdx, drawIdxBegin) : drawIdxBegin; for (; idx < layerCursor.endIdx; idx++) { var el = list[idx]; if (idx < drawIdxBegin && !el.notClear) continue; if (el.__inHover) this._hoverLayerDirty = HOVER_LAYER_DIRTY_REPAINT; if (repaintRect != null) { var paintRect = el.getPaintRect(); if (paintRect && paintRect.intersect(repaintRect)) { brush$1(ctx, el, scope); el.setPrevPaintRect(paintRect); } } else brush$1(ctx, el, scope); if (useTimer) { if (platformApi.getTime() - startTime > 15) { idx++; break; } } } brushLoopFinalize(ctx, scope); layerCursor.drawIdx = Math.max(idx, drawIdxBegin); }; CanvasPainter.prototype.getLayer = function(zlevel, virtual) { return this._ensureLayer(zlevel, 0, virtual); }; CanvasPainter.prototype._ensureLayer = function(zlevel, zlevel2, virtual) { zlevel2 = zlevel2 || 0; var singleCanvas = this._singleCanvas; if (singleCanvas && !this._needsManuallyCompositing) { zlevel = CANVAS_ZLEVEL; zlevel2 = 0; } var layer = ensureLayerListInZLevel(this._i, zlevel)[zlevel2]; if (!layer) { layer = createBuiltinLayer("zr_" + zlevel + "." + zlevel2, this, zlevel, zlevel2); if (this._layerConfig[zlevel]) merge(layer, this._layerConfig[zlevel], true); if (virtual || singleCanvas && zlevel !== CANVAS_ZLEVEL) layer.virtual = true; this._insertLayer(layer, zlevel, zlevel2, false); layer.initContext(); } return layer; }; CanvasPainter.prototype.insertLayer = function(zlevel, layer) { this._insertLayer(layer, zlevel, 0, false); }; CanvasPainter.prototype._insertLayer = function(layer, zlevel, zlevel2, suppressDOMInsert) { var internal = this._i; var layersMap = internal.layers; var layerStack = internal.layerStack; var domRoot = this._domRoot; var prevLayer = null; if (layersMap[zlevel] && layersMap[zlevel][zlevel2]) { logError("ZLevel " + zlevel + "." + zlevel2 + " has been used already"); return; } if (!isLayerValid(layer)) { logError("Layer of zlevel " + zlevel + " is not valid"); return; } var len = layerStack.length; var i = 0; while (i < len && (layerStack[i].zl < zlevel || layerStack[i].zl === zlevel && layerStack[i].zl2 < zlevel2)) i++; if (i > 0) prevLayer = ensureLayerListInZLevel(internal, layerStack[i - 1].zl)[layerStack[i - 1].zl2]; layerStack.splice(i, 0, { zl: zlevel, zl2: zlevel2 }); ensureLayerListInZLevel(internal, zlevel)[zlevel2] = layer; if (!suppressDOMInsert && !layer.virtual) { if (prevLayer) { var prevDom = prevLayer.dom; if (prevDom.nextSibling) domRoot.insertBefore(layer.dom, prevDom.nextSibling); else domRoot.appendChild(layer.dom); } else if (domRoot.firstChild) domRoot.insertBefore(layer.dom, domRoot.firstChild); else domRoot.appendChild(layer.dom); } layer.painter || (layer.painter = this); }; CanvasPainter.prototype.eachLayer = function(cb, context) { return eachLayer(this._i, function(layer, zlevel) { cb.call(context, layer, zlevel); }); }; CanvasPainter.prototype.eachBuiltinLayer = function(cb, context) { return eachLayer(this._i, function(layer, zlevel) { cb.call(context, layer, zlevel); }, EACH_LAYER_BUILTIN); }; CanvasPainter.prototype.eachOtherLayer = function(cb, context) { return eachLayer(this._i, function(layer, zlevel) { cb.call(context, layer, zlevel); }, EACH_LAYER_NOT_BUILTIN); }; CanvasPainter.prototype.getLayers = function() { var layers = {}; eachLayer(this._i, function(layer, zlevel, zlevel2) { layers[layer.id] = layer; }); return layers; }; CanvasPainter.prototype._updateLayerStatus = function(list, paintAll) { var painter = this; if (painter._singleCanvas) for (var i = 1; i < list.length; i++) { var el = list[i]; if (el.zlevel !== list[i - 1].zlevel || el.incremental) { painter._needsManuallyCompositing = true; break; } } eachLayer(painter._i, function(layer) { layer.__dirty = false; eachCursorInLayer(layer, function(cursor) { cursor.used = false; cursor.endIdxNew = 0; cursor.notClearIdx = -1; }); }, EACH_LAYER_BUILTIN_NOT_HOVER); var prevZLevel; var currLayer = null; var currCursor = null; var aboveIncrementalInCurrZLevel = false; for (var idx = 0, len = list.length; idx < len; idx++) { var el = list[idx]; var zlevel = el.zlevel; var elIncremental = el.incremental; var zlevel2 = void 0; if (prevZLevel !== zlevel) { prevZLevel = zlevel; aboveIncrementalInCurrZLevel = false; } if (elIncremental) { aboveIncrementalInCurrZLevel = true; zlevel2 = 1; } else zlevel2 = aboveIncrementalInCurrZLevel ? 2 : 0; if (!currLayer || zlevel !== currLayer.zlevel || zlevel2 !== currLayer.zlevel2) { currLayer = painter._ensureLayer(zlevel, zlevel2); currCursor = null; if (!currLayer.__builtin__) { logError("ZLevel " + zlevel + " has been used by unknown layer " + currLayer.id); continue; } } if (!currCursor || elIncremental !== currCursor.key) { currCursor = ensureLayerDrawCursor(currLayer, elIncremental); if (!currCursor.used) { currCursor.used = true; if (!paintAll && currCursor.first === el.id) { var idxShift = idx - currCursor.startIdx; currCursor.startIdx = idx; currCursor.drawIdx += idxShift; currCursor.endIdx += idxShift; } else { currLayer.__dirty = true; currCursor.first = el.id; currCursor.startIdx = currCursor.drawIdx = idx; currCursor.endIdx = idx + 1; } } } currCursor.endIdxNew = idx + 1; if (el.__dirty & 1 && !el.__inHover) { if (!elIncremental || !el.notClear && idx < currCursor.drawIdx) currLayer.__dirty = true; if (elIncremental && el.notClear && currCursor.notClearIdx < 0) currCursor.notClearIdx = idx; } } eachLayer(painter._i, function(layer) { var cursorStack = layer.__cursorStack; var cursors = layer.__cursors; for (var i = cursorStack.length - 1; i >= 0; i--) { var cursor = cursors.get(cursorStack[i]); if (!cursor.used) { layer.__dirty = true; cursors.removeKey(cursorStack[i]); cursorStack.splice(i, 1); } else { var endIdxNew = cursor.endIdxNew; if (isIncrementalLayer(layer) ? endIdxNew < cursor.drawIdx : endIdxNew !== cursor.endIdx || !endIdxNew || list[endIdxNew - 1].id !== cursor.last) layer.__dirty = true; cursor.endIdx = cursor.endIdxNew; cursor.last = endIdxNew ? list[endIdxNew - 1].id : NaN; } } if (layer.__dirty) { eachCursorInLayer(layer, function(cursor) { cursor.drawIdx = cursor.startIdx; }); if (painter._hoverLayerDirty === HOVER_LAYER_DIRTY_NO) painter._hoverLayerDirty = HOVER_LAYER_DIRTY_REPAINT_IF_EXISTING; } }, EACH_LAYER_BUILTIN_NOT_HOVER); }; CanvasPainter.prototype.clear = function() { eachLayer(this._i, function(layer) { layer.clear(); resetLayerDrawCursors(layer); }, EACH_LAYER_BUILTIN); return this; }; CanvasPainter.prototype.setBackgroundColor = function(backgroundColor) { this._backgroundColor = backgroundColor; eachLayer(this._i, function(layer) { layer.setUnpainted(); }); }; CanvasPainter.prototype.configLayer = function(zlevel, config) { if (config) { var layerConfig_1 = this._layerConfig; if (!layerConfig_1[zlevel]) layerConfig_1[zlevel] = config; else merge(layerConfig_1[zlevel], config, true); eachLayer(this._i, function(layer, zlevel) { merge(layer, layerConfig_1[zlevel], true); }); } }; CanvasPainter.prototype.delLayer = function(zlevel) { var layerStack = this._i.layerStack; var layersMap = this._i.layers; for (var i = layerStack.length - 1; i >= 0; i--) { var key = layerStack[i]; if (key.zl === zlevel) { var layer = layersMap[zlevel][key.zl2]; if (layer.__builtin__) continue; layerStack.splice(i, 1); layersMap[zlevel][key.zl2] = void 0; if (!layer.virtual) { var parentNode = layer.dom.parentNode; parentNode && parentNode.removeChild(layer.dom); } } } }; CanvasPainter.prototype.resize = function(width, height) { if (!this._domRoot.style) { if (width == null || height == null) return; this._width = width; this._height = height; this._ensureLayer(CANVAS_ZLEVEL).resize(width, height); } else { var domRoot = this._domRoot; domRoot.style.display = "none"; var opts = this._opts; var root = this.root; width != null && (opts.width = width); height != null && (opts.height = height); width = getSize$1(root, 0, opts); height = getSize$1(root, 1, opts); domRoot.style.display = ""; if (this._width !== width || height !== this._height) { domRoot.style.width = width + "px"; domRoot.style.height = height + "px"; eachLayer(this._i, function(layer) { layer.resize(width, height); }); this.refresh({ paintAll: true }); } this._width = width; this._height = height; } return this; }; CanvasPainter.prototype.clearLayer = function(zlevel) { each$12(this._i.layers[zlevel], function(layer) { if (layer && !layer.__builtin__) layer.clear(); }); }; CanvasPainter.prototype.dispose = function() { this.root.innerHTML = ""; this.root = this.storage = this._domRoot = this._i = null; }; CanvasPainter.prototype.getRenderedCanvas = function(opts) { opts = opts || {}; if (this._singleCanvas && !this._compositeManually) return this._i.layers[CANVAS_ZLEVEL][0].dom; var imageLayer = new Layer("image", this, opts.pixelRatio || this.dpr); imageLayer.initContext(); imageLayer.clear(false, opts.backgroundColor || this._backgroundColor); var ctx = imageLayer.ctx; if (opts.pixelRatio <= this.dpr) { this.refresh(); var width_1 = imageLayer.dom.width; var height_1 = imageLayer.dom.height; eachLayer(this._i, function(layer) { if (layer.__builtin__) ctx.drawImage(layer.dom, 0, 0, width_1, height_1); else if (layer.renderToCanvas) { ctx.save(); layer.renderToCanvas(ctx); ctx.restore(); } }); } else { var scope = { inHover: false, viewWidth: this._width, viewHeight: this._height, beforeBrushParam: {} }; var displayList = this.storage.getDisplayList(true); for (var i = 0, len = displayList.length; i < len; i++) { var el = displayList[i]; brush$1(ctx, el, scope); } brushLoopFinalize(ctx, scope); } return imageLayer.dom; }; CanvasPainter.prototype.getWidth = function() { return this._width; }; CanvasPainter.prototype.getHeight = function() { return this._height; }; return CanvasPainter; }(); //#endregion //#region node_modules/echarts/lib/renderer/installCanvasRenderer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$56(registers) { registers.registerPainter("canvas", CanvasPainter); } //#endregion //#region node_modules/echarts/lib/chart/line/LineSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LineSeriesModel = function(_super) { __extends(LineSeriesModel, _super); function LineSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = LineSeriesModel.type; _this.hasSymbolVisual = true; return _this; } LineSeriesModel.prototype.getInitialData = function(option) { var coordSys = option.coordinateSystem; if (coordSys !== "polar" && coordSys !== "cartesian2d") throw new Error("Line not support coordinateSystem besides cartesian and polar"); return createSeriesData(null, this, { useEncodeDefaulter: true }); }; LineSeriesModel.prototype.getLegendIcon = function(opt) { var group = new Group$3(); var line = createSymbol$1("line", 0, opt.itemHeight / 2, opt.itemWidth, 0, opt.lineStyle.stroke, false); group.add(line); line.setStyle(opt.lineStyle); var visualType = this.getData().getVisual("symbol"); var visualRotate = this.getData().getVisual("symbolRotate"); var symbolType = visualType === "none" ? "circle" : visualType; var size = opt.itemHeight * .8; var symbol = createSymbol$1(symbolType, (opt.itemWidth - size) / 2, (opt.itemHeight - size) / 2, size, size, opt.itemStyle.fill); group.add(symbol); symbol.setStyle(opt.itemStyle); symbol.rotation = (opt.iconRotate === "inherit" ? visualRotate : opt.iconRotate || 0) * Math.PI / 180; symbol.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]); if (symbolType.indexOf("empty") > -1) { symbol.style.stroke = symbol.style.fill; symbol.style.fill = tokens.color.neutral00; symbol.style.lineWidth = 2; } return group; }; LineSeriesModel.type = "series.line"; LineSeriesModel.dependencies = ["grid", "polar"]; LineSeriesModel.defaultOption = { z: 3, coordinateSystem: "cartesian2d", legendHoverLink: true, clip: true, label: { position: "top" }, endLabel: { show: false, valueAnimation: true, distance: 8 }, lineStyle: { width: 2, type: "solid" }, emphasis: { scale: true }, step: false, smooth: false, smoothMonotone: null, symbol: "emptyCircle", symbolSize: 6, symbolRotate: null, showSymbol: true, showAllSymbol: "auto", connectNulls: false, sampling: "none", animationEasing: "linear", progressive: 0, hoverLayerThreshold: Infinity, universalTransition: { divideShape: "clone" }, /** * @deprecated */ triggerLineEvent: false, triggerEvent: false }; return LineSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/helper/labelHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @return label string. Not null/undefined */ function getDefaultLabel(data, dataIndex) { var labelDims = data.mapDimensionsAll("defaultedLabel"); var len = labelDims.length; if (len === 1) { var rawVal = retrieveRawValue(data, dataIndex, labelDims[0]); return rawVal != null ? rawVal + "" : null; } else if (len) { var vals = []; for (var i = 0; i < labelDims.length; i++) vals.push(retrieveRawValue(data, dataIndex, labelDims[i])); return vals.join(" "); } } function getDefaultInterpolatedLabel(data, interpolatedValue) { var labelDims = data.mapDimensionsAll("defaultedLabel"); if (!isArray$1(interpolatedValue)) return interpolatedValue + ""; var vals = []; for (var i = 0; i < labelDims.length; i++) { var dimIndex = data.getDimensionIndex(labelDims[i]); if (dimIndex >= 0) vals.push(interpolatedValue[dimIndex]); } return vals.join(" "); } //#endregion //#region node_modules/echarts/lib/chart/helper/Symbol.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Symbol$1 = function(_super) { __extends(Symbol, _super); function Symbol(data, idx, seriesScope, opts) { var _this = _super.call(this) || this; _this.updateData(data, idx, seriesScope, opts); return _this; } Symbol.prototype._createSymbol = function(symbolType, data, idx, symbolSize, z2, keepAspect) { this.removeAll(); var symbolPath = createSymbol$1(symbolType, -1, -1, 2, 2, null, keepAspect); symbolPath.attr({ z2: retrieve2(z2, 100), culling: true, scaleX: symbolSize[0] / 2, scaleY: symbolSize[1] / 2 }); symbolPath.drift = driftSymbol; this._symbolType = symbolType; this.add(symbolPath); }; /** * Stop animation * @param {boolean} toLastFrame */ Symbol.prototype.stopSymbolAnimation = function(toLastFrame) { this.childAt(0).stopAnimation(null, toLastFrame); }; Symbol.prototype.getSymbolType = function() { return this._symbolType; }; /** * FIXME: * Caution: This method breaks the encapsulation of this module, * but it indeed brings convenience. So do not use the method * unless you detailedly know all the implements of `Symbol`, * especially animation. * * Get symbol path element. */ Symbol.prototype.getSymbolPath = function() { return this.childAt(0); }; /** * Highlight symbol */ Symbol.prototype.highlight = function() { enterEmphasis(this.childAt(0)); }; /** * Downplay symbol */ Symbol.prototype.downplay = function() { leaveEmphasis(this.childAt(0)); }; /** * @param {number} zlevel * @param {number} z */ Symbol.prototype.setZ = function(zlevel, z) { var symbolPath = this.childAt(0); symbolPath.zlevel = zlevel; symbolPath.z = z; }; Symbol.prototype.setDraggable = function(draggable, hasCursorOption) { var symbolPath = this.childAt(0); symbolPath.draggable = draggable; symbolPath.cursor = !hasCursorOption && draggable ? "move" : symbolPath.cursor; }; /** * Update symbol properties */ Symbol.prototype.updateData = function(data, idx, seriesScope, opts) { this.silent = false; var symbolType = data.getItemVisual(idx, "symbol") || "circle"; var seriesModel = data.hostModel; var symbolSize = Symbol.getSymbolSize(data, idx); var z2 = Symbol.getSymbolZ2(data, idx); var isInit = symbolType !== this._symbolType; var disableAnimation = opts && opts.disableAnimation; if (isInit) { var keepAspect = data.getItemVisual(idx, "symbolKeepAspect"); this._createSymbol(symbolType, data, idx, symbolSize, z2, keepAspect); } else { var symbolPath = this.childAt(0); symbolPath.silent = false; var target = { scaleX: symbolSize[0] / 2, scaleY: symbolSize[1] / 2 }; disableAnimation ? symbolPath.attr(target) : updateProps$1(symbolPath, target, seriesModel, idx); saveOldStyle(symbolPath); } this._updateCommon(data, idx, symbolSize, seriesScope, opts); if (isInit) { var symbolPath = this.childAt(0); if (!disableAnimation) { var target = { scaleX: this._sizeX, scaleY: this._sizeY, style: { opacity: symbolPath.style.opacity } }; symbolPath.scaleX = symbolPath.scaleY = 0; symbolPath.style.opacity = 0; initProps(symbolPath, target, seriesModel, idx); } } if (disableAnimation) this.childAt(0).stopAnimation("leave"); }; Symbol.prototype._updateCommon = function(data, idx, symbolSize, seriesScope, opts) { var symbolPath = this.childAt(0); var seriesModel = data.hostModel; var emphasisItemStyle; var blurItemStyle; var selectItemStyle; var focus; var blurScope; var emphasisDisabled; var labelStatesModels; var hoverScale; var cursorStyle; if (seriesScope) { emphasisItemStyle = seriesScope.emphasisItemStyle; blurItemStyle = seriesScope.blurItemStyle; selectItemStyle = seriesScope.selectItemStyle; focus = seriesScope.focus; blurScope = seriesScope.blurScope; labelStatesModels = seriesScope.labelStatesModels; hoverScale = seriesScope.hoverScale; cursorStyle = seriesScope.cursorStyle; emphasisDisabled = seriesScope.emphasisDisabled; } if (!seriesScope || data.hasItemOption) { var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx); var emphasisModel = itemModel.getModel("emphasis"); emphasisItemStyle = emphasisModel.getModel("itemStyle").getItemStyle(); selectItemStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle(); blurItemStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle(); focus = emphasisModel.get("focus"); blurScope = emphasisModel.get("blurScope"); emphasisDisabled = emphasisModel.get("disabled"); labelStatesModels = getLabelStatesModels(itemModel); hoverScale = emphasisModel.getShallow("scale"); cursorStyle = itemModel.getShallow("cursor"); } var symbolRotate = data.getItemVisual(idx, "symbolRotate"); symbolPath.attr("rotation", (symbolRotate || 0) * Math.PI / 180 || 0); var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, "symbolOffset"), symbolSize); if (symbolOffset) { symbolPath.x = symbolOffset[0]; symbolPath.y = symbolOffset[1]; } cursorStyle && symbolPath.attr("cursor", cursorStyle); var symbolStyle = data.getItemVisual(idx, "style"); var visualColor = symbolStyle.fill; if (symbolPath instanceof ZRImage) { var pathStyle = symbolPath.style; symbolPath.useStyle(extend({ image: pathStyle.image, x: pathStyle.x, y: pathStyle.y, width: pathStyle.width, height: pathStyle.height }, symbolStyle)); } else { if (symbolPath.__isEmptyBrush) symbolPath.useStyle(extend({}, symbolStyle)); else symbolPath.useStyle(symbolStyle); symbolPath.style.decal = null; symbolPath.setColor(visualColor, opts && opts.symbolInnerColor); symbolPath.style.strokeNoScale = true; } var liftZ = data.getItemVisual(idx, "liftZ"); var z2Origin = this._z2; if (liftZ != null) { if (z2Origin == null) { this._z2 = symbolPath.z2; symbolPath.z2 += liftZ; } } else if (z2Origin != null) { symbolPath.z2 = z2Origin; this._z2 = null; } var useNameLabel = opts && opts.useNameLabel; setLabelStyle(symbolPath, labelStatesModels, { labelFetcher: seriesModel, labelDataIndex: idx, defaultText: getLabelDefaultText, inheritColor: visualColor, defaultOpacity: symbolStyle.opacity }); function getLabelDefaultText(idx) { return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx); } this._sizeX = symbolSize[0] / 2; this._sizeY = symbolSize[1] / 2; var emphasisState = symbolPath.ensureState("emphasis"); emphasisState.style = emphasisItemStyle; symbolPath.ensureState("select").style = selectItemStyle; symbolPath.ensureState("blur").style = blurItemStyle; var scaleRatio = hoverScale == null || hoverScale === true ? Math.max(1.1, 3 / this._sizeY) : isFinite(hoverScale) && hoverScale > 0 ? +hoverScale : 1; emphasisState.scaleX = this._sizeX * scaleRatio; emphasisState.scaleY = this._sizeY * scaleRatio; this.setSymbolScale(1); toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled); }; Symbol.prototype.setSymbolScale = function(scale) { this.scaleX = this.scaleY = scale; }; Symbol.prototype.fadeOut = function(cb, seriesModel, opt) { var symbolPath = this.childAt(0); var dataIndex = getECData(this).dataIndex; var animationOpt = opt && opt.animation; this.silent = symbolPath.silent = true; if (opt && opt.fadeLabel) { var textContent = symbolPath.getTextContent(); if (textContent) removeElement(textContent, { style: { opacity: 0 } }, seriesModel, { dataIndex, removeOpt: animationOpt, cb: function() { symbolPath.removeTextContent(); } }); } else symbolPath.removeTextContent(); removeElement(symbolPath, { style: { opacity: 0 }, scaleX: 0, scaleY: 0 }, seriesModel, { dataIndex, cb, removeOpt: animationOpt }); }; Symbol.getSymbolSize = function(data, idx) { return normalizeSymbolSize(data.getItemVisual(idx, "symbolSize")); }; Symbol.getSymbolZ2 = function(data, idx) { return data.getItemVisual(idx, "z2"); }; return Symbol; }(Group$3); function driftSymbol(dx, dy) { this.parent.drift(dx, dy); } //#endregion //#region node_modules/echarts/lib/chart/helper/SymbolDraw.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function symbolNeedsDraw$1(data, point, idx, opt) { return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt && opt.isIgnore && opt.isIgnore(idx)) && !(opt && opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, "symbol") !== "none"; } function normalizeUpdateOpt(opt) { if (opt != null && !isObject$3(opt)) opt = { isIgnore: opt }; return opt || {}; } function makeSeriesScope$2(data) { var seriesModel = data.hostModel; var emphasisModel = seriesModel.getModel("emphasis"); return { emphasisItemStyle: emphasisModel.getModel("itemStyle").getItemStyle(), blurItemStyle: seriesModel.getModel(["blur", "itemStyle"]).getItemStyle(), selectItemStyle: seriesModel.getModel(["select", "itemStyle"]).getItemStyle(), focus: emphasisModel.get("focus"), blurScope: emphasisModel.get("blurScope"), emphasisDisabled: emphasisModel.get("disabled"), hoverScale: emphasisModel.get("scale"), labelStatesModels: getLabelStatesModels(seriesModel), cursorStyle: seriesModel.get("cursor") }; } function createEl$2(SymbolCtor, data, newIdx, seriesScope, symbolUpdateOpt, point, group) { var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); symbolEl.setPosition(point); data.setItemGraphicEl(newIdx, symbolEl); group.add(symbolEl); return symbolEl; } var SymbolDraw = function() { function SymbolDraw(SymbolCtor) { this.group = new Group$3(); this._SymbolCtor = SymbolCtor || Symbol$1; } /** * Update symbols draw by new data */ SymbolDraw.prototype.updateData = function(data, opt) { this._progressiveEls = null; opt = normalizeUpdateOpt(opt); var group = this.group; var seriesModel = data.hostModel; var oldData = this._data; var SymbolCtor = this._SymbolCtor; var disableAnimation = opt.disableAnimation; var seriesScope = this._seriesScope = makeSeriesScope$2(data); var symbolUpdateOpt = { disableAnimation }; var getSymbolPoint = opt.getSymbolPoint || function(idx) { return data.getItemLayout(idx); }; if (!oldData) group.removeAll(); data.diff(oldData).add(function(newIdx) { var point = getSymbolPoint(newIdx); if (symbolNeedsDraw$1(data, point, newIdx, opt)) createEl$2(SymbolCtor, data, newIdx, seriesScope, symbolUpdateOpt, point, group); }).update(function(newIdx, oldIdx) { var symbolEl = oldData.getItemGraphicEl(oldIdx); var point = getSymbolPoint(newIdx); if (!symbolNeedsDraw$1(data, point, newIdx, opt)) { group.remove(symbolEl); return; } var newSymbolType = data.getItemVisual(newIdx, "symbol") || "circle"; var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType(); if (!symbolEl || oldSymbolType && oldSymbolType !== newSymbolType) { group.remove(symbolEl); symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); symbolEl.setPosition(point); } else { symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt); var target = { x: point[0], y: point[1] }; disableAnimation ? symbolEl.attr(target) : updateProps$1(symbolEl, target, seriesModel); } group.add(symbolEl); data.setItemGraphicEl(newIdx, symbolEl); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && el.fadeOut(function() { group.remove(el); }, seriesModel); }).execute(); this._getSymbolPoint = getSymbolPoint; this._data = data; }; SymbolDraw.prototype.updateLayout = function(opt) { var data = this._data; if (!data) return; var symbolDraw = this; var store = data.getStore(); for (var idx = 0, len = store.count(); idx < len; idx++) { var el = data.getItemGraphicEl(idx); var point = symbolDraw._getSymbolPoint(idx); if (symbolNeedsDraw$1(data, point, idx, opt)) { el = el || createEl$2(symbolDraw._SymbolCtor, data, idx, symbolDraw._seriesScope, { disableAnimation: true }, point, symbolDraw.group); el.stopAnimation(); el.setPosition(point); el.markRedraw(); } else if (el) { symbolDraw.group.remove(el); data.setItemGraphicEl(idx, null); } } }; SymbolDraw.prototype.incrementalPrepareUpdate = function(data) { this._seriesScope = makeSeriesScope$2(data); this._data = null; this.group.removeAll(); }; SymbolDraw.prototype.incrementalUpdate = function(taskParams, data, incrementalId, opt) { this._progressiveEls = []; opt = normalizeUpdateOpt(opt); function updateIncrementalAndHover(el) { if (!el.isGroup) { el.incremental = incrementalId; el.ensureState("emphasis").hoverLayer = 2; } } for (var idx = taskParams.start; idx < taskParams.end; idx++) { var point = data.getItemLayout(idx); if (symbolNeedsDraw$1(data, point, idx, opt)) { var el = new this._SymbolCtor(data, idx, this._seriesScope); el.traverse(updateIncrementalAndHover); el.setPosition(point); this.group.add(el); data.setItemGraphicEl(idx, el); this._progressiveEls.push(el); } } }; SymbolDraw.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; SymbolDraw.prototype.remove = function(enableAnimation) { var group = this.group; var data = this._data; if (data && enableAnimation) data.eachItemGraphicEl(function(el) { el.fadeOut(function() { group.remove(el); }, data.hostModel); }); else group.removeAll(); }; return SymbolDraw; }(); //#endregion //#region node_modules/echarts/lib/chart/line/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function prepareDataCoordInfo(coordSys, data, valueOrigin) { var baseAxis = coordSys.getBaseAxis(); var valueAxis = coordSys.getOtherAxis(baseAxis); var valueStart = getValueStart(valueAxis, valueOrigin); var baseAxisDim = baseAxis.dim; var valueAxisDim = valueAxis.dim; var valueDim = data.mapDimension(valueAxisDim); var baseDim = data.mapDimension(baseAxisDim); var baseDataOffset = valueAxisDim === "x" || valueAxisDim === "radius" ? 1 : 0; var dims = map$1(coordSys.dimensions, function(coordDim) { return data.mapDimension(coordDim); }); var stacked = false; var stackResultDim = data.getCalculationInfo("stackResultDimension"); if (isDimensionStacked(data, dims[0])) { stacked = true; dims[0] = stackResultDim; } if (isDimensionStacked(data, dims[1])) { stacked = true; dims[1] = stackResultDim; } return { dataDimsForPoint: dims, valueStart, valueAxisDim, baseAxisDim, stacked: !!stacked, valueDim, baseDim, baseDataOffset, stackedOverDimension: data.getCalculationInfo("stackedOverDimension") }; } function getValueStart(valueAxis, valueOrigin) { var valueStart = 0; var extent = valueAxis.scale.getExtent(); if (valueOrigin === "start") valueStart = extent[0]; else if (valueOrigin === "end") valueStart = extent[1]; else if (isNumber(valueOrigin) && !isNaN(valueOrigin)) valueStart = valueOrigin; else if (extent[0] > 0) valueStart = extent[0]; else if (extent[1] < 0) valueStart = extent[1]; return valueStart; } function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) { var value = NaN; if (dataCoordInfo.stacked) value = data.get(data.getCalculationInfo("stackedOverDimension"), idx); if (isNaN(value)) value = dataCoordInfo.valueStart; var baseDataOffset = dataCoordInfo.baseDataOffset; var stackedData = []; stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx); stackedData[1 - baseDataOffset] = value; return coordSys.dataToPoint(stackedData); } function isPointIllegal(xOrY, yOrX) { return !isFinite(xOrY) || !isFinite(yOrX); } //#endregion //#region node_modules/echarts/lib/util/vendor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Float32ArrayCtor = typeof Float32Array !== "undefined" ? Float32Array : void 0; var Float64ArrayCtor = typeof Float64Array !== "undefined" ? Float64Array : void 0; function createFloat32Array(capacity) { return tryEnsureTypedArray({ ctor: Float32ArrayCtor }, capacity).arr; } function tryEnsureTypedArray(tyArr, capacity) { assert(capacity != null && isFinite(capacity) && capacity >= 0 && tyArr.hasOwnProperty("ctor")); var existingArr = tyArr.arr; var ctor = tyArr.ctor; if (capacity > MAX_SAFE_INTEGER) capacity = MAX_SAFE_INTEGER; if (!existingArr || tyArr.typed && existingArr.length < capacity) { var nextArr = void 0; if (ctor) try { nextArr = new ctor(capacity); tyArr.typed = true; existingArr && nextArr.set(existingArr); } catch (e) { error(e); } if (!nextArr) { nextArr = []; tyArr.typed = false; if (existingArr) for (var i = 0, len = existingArr.length; i < len; i++) nextArr[i] = existingArr[i]; } tyArr.arr = nextArr; } return tyArr; } //#endregion //#region node_modules/echarts/lib/chart/line/lineAnimationDiff.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function diffData(oldData, newData) { var diffResult = []; newData.diff(oldData).add(function(idx) { diffResult.push({ cmd: "+", idx }); }).update(function(newIdx, oldIdx) { diffResult.push({ cmd: "=", idx: oldIdx, idx1: newIdx }); }).remove(function(idx) { diffResult.push({ cmd: "-", idx }); }).execute(); return diffResult; } function lineAnimationDiff(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) { var diff = diffData(oldData, newData); var currPoints = []; var nextPoints = []; var currStackedPoints = []; var nextStackedPoints = []; var status = []; var sortedIndices = []; var rawIndices = []; var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin); var oldPoints = oldData.getLayout("points") || []; var newPoints = newData.getLayout("points") || []; for (var i = 0; i < diff.length; i++) { var diffItem = diff[i]; var pointAdded = true; var oldIdx2 = void 0; var newIdx2 = void 0; switch (diffItem.cmd) { case "=": oldIdx2 = diffItem.idx * 2; newIdx2 = diffItem.idx1 * 2; var currentX = oldPoints[oldIdx2]; var currentY = oldPoints[oldIdx2 + 1]; var nextX = newPoints[newIdx2]; var nextY = newPoints[newIdx2 + 1]; if (isNaN(currentX) || isNaN(currentY)) { currentX = nextX; currentY = nextY; } currPoints.push(currentX, currentY); nextPoints.push(nextX, nextY); currStackedPoints.push(oldStackedOnPoints[oldIdx2], oldStackedOnPoints[oldIdx2 + 1]); nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]); rawIndices.push(newData.getRawIndex(diffItem.idx1)); break; case "+": var newIdx = diffItem.idx; var newDataDimsForPoint = newDataOldCoordInfo.dataDimsForPoint; var oldPt = oldCoordSys.dataToPoint([newData.get(newDataDimsForPoint[0], newIdx), newData.get(newDataDimsForPoint[1], newIdx)]); newIdx2 = newIdx * 2; currPoints.push(oldPt[0], oldPt[1]); nextPoints.push(newPoints[newIdx2], newPoints[newIdx2 + 1]); var stackedOnPoint = getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, newIdx); currStackedPoints.push(stackedOnPoint[0], stackedOnPoint[1]); nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]); rawIndices.push(newData.getRawIndex(newIdx)); break; case "-": pointAdded = false; } if (pointAdded) { status.push(diffItem); sortedIndices.push(sortedIndices.length); } } sortedIndices.sort(function(a, b) { return rawIndices[a] - rawIndices[b]; }); var len = currPoints.length; var sortedCurrPoints = createFloat32Array(len); var sortedNextPoints = createFloat32Array(len); var sortedCurrStackedPoints = createFloat32Array(len); var sortedNextStackedPoints = createFloat32Array(len); var sortedStatus = []; for (var i = 0; i < sortedIndices.length; i++) { var idx = sortedIndices[i]; var i2 = i * 2; var idx2 = idx * 2; sortedCurrPoints[i2] = currPoints[idx2]; sortedCurrPoints[i2 + 1] = currPoints[idx2 + 1]; sortedNextPoints[i2] = nextPoints[idx2]; sortedNextPoints[i2 + 1] = nextPoints[idx2 + 1]; sortedCurrStackedPoints[i2] = currStackedPoints[idx2]; sortedCurrStackedPoints[i2 + 1] = currStackedPoints[idx2 + 1]; sortedNextStackedPoints[i2] = nextStackedPoints[idx2]; sortedNextStackedPoints[i2 + 1] = nextStackedPoints[idx2 + 1]; sortedStatus[i] = status[idx]; } return { current: sortedCurrPoints, next: sortedNextPoints, stackedOnCurrent: sortedCurrStackedPoints, stackedOnNext: sortedNextStackedPoints, status: sortedStatus }; } //#endregion //#region node_modules/echarts/lib/chart/line/poly.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var mathMin$4 = Math.min; var mathMax$4 = Math.max; /** * Draw smoothed line in non-monotone, in may cause undesired curve in extreme * situations. This should be used when points are non-monotone neither in x or * y dimension. */ function drawSegment(ctx, points, start, segLen, allLen, dir, smooth, smoothMonotone, connectNulls) { var prevX; var prevY; var cpx0; var cpy0; var cpx1; var cpy1; var idx = start; var k = 0; for (; k < segLen; k++) { var x = points[idx * 2]; var y = points[idx * 2 + 1]; if (idx >= allLen || idx < 0) break; if (isPointIllegal(x, y)) { if (connectNulls) { idx += dir; continue; } break; } if (idx === start) { ctx[dir > 0 ? "moveTo" : "lineTo"](x, y); cpx0 = x; cpy0 = y; } else { var dx = x - prevX; var dy = y - prevY; if (dx * dx + dy * dy < .5) { idx += dir; continue; } if (smooth > 0) { var nextIdx = idx + dir; var nextX = points[nextIdx * 2]; var nextY = points[nextIdx * 2 + 1]; while (nextX === x && nextY === y && k < segLen) { k++; nextIdx += dir; idx += dir; nextX = points[nextIdx * 2]; nextY = points[nextIdx * 2 + 1]; x = points[idx * 2]; y = points[idx * 2 + 1]; dx = x - prevX; dy = y - prevY; } var tmpK = k + 1; if (connectNulls) while (isPointIllegal(nextX, nextY) && tmpK < segLen) { tmpK++; nextIdx += dir; nextX = points[nextIdx * 2]; nextY = points[nextIdx * 2 + 1]; } var ratioNextSeg = .5; var vx = 0; var vy = 0; var nextCpx0 = void 0; var nextCpy0 = void 0; if (tmpK >= segLen || isPointIllegal(nextX, nextY)) { cpx1 = x; cpy1 = y; } else { vx = nextX - prevX; vy = nextY - prevY; var dx0 = x - prevX; var dx1 = nextX - x; var dy0 = y - prevY; var dy1 = nextY - y; var lenPrevSeg = void 0; var lenNextSeg = void 0; if (smoothMonotone === "x") { lenPrevSeg = Math.abs(dx0); lenNextSeg = Math.abs(dx1); var dir_1 = vx > 0 ? 1 : -1; cpx1 = x - dir_1 * lenPrevSeg * smooth; cpy1 = y; nextCpx0 = x + dir_1 * lenNextSeg * smooth; nextCpy0 = y; } else if (smoothMonotone === "y") { lenPrevSeg = Math.abs(dy0); lenNextSeg = Math.abs(dy1); var dir_2 = vy > 0 ? 1 : -1; cpx1 = x; cpy1 = y - dir_2 * lenPrevSeg * smooth; nextCpx0 = x; nextCpy0 = y + dir_2 * lenNextSeg * smooth; } else { lenPrevSeg = Math.sqrt(dx0 * dx0 + dy0 * dy0); lenNextSeg = Math.sqrt(dx1 * dx1 + dy1 * dy1); ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg); cpx1 = x - vx * smooth * (1 - ratioNextSeg); cpy1 = y - vy * smooth * (1 - ratioNextSeg); nextCpx0 = x + vx * smooth * ratioNextSeg; nextCpy0 = y + vy * smooth * ratioNextSeg; nextCpx0 = mathMin$4(nextCpx0, mathMax$4(nextX, x)); nextCpy0 = mathMin$4(nextCpy0, mathMax$4(nextY, y)); nextCpx0 = mathMax$4(nextCpx0, mathMin$4(nextX, x)); nextCpy0 = mathMax$4(nextCpy0, mathMin$4(nextY, y)); vx = nextCpx0 - x; vy = nextCpy0 - y; cpx1 = x - vx * lenPrevSeg / lenNextSeg; cpy1 = y - vy * lenPrevSeg / lenNextSeg; cpx1 = mathMin$4(cpx1, mathMax$4(prevX, x)); cpy1 = mathMin$4(cpy1, mathMax$4(prevY, y)); cpx1 = mathMax$4(cpx1, mathMin$4(prevX, x)); cpy1 = mathMax$4(cpy1, mathMin$4(prevY, y)); vx = x - cpx1; vy = y - cpy1; nextCpx0 = x + vx * lenNextSeg / lenPrevSeg; nextCpy0 = y + vy * lenNextSeg / lenPrevSeg; } } ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, x, y); cpx0 = nextCpx0; cpy0 = nextCpy0; } else ctx.lineTo(x, y); } prevX = x; prevY = y; idx += dir; } return k; } var ECPolylineShape = function() { function ECPolylineShape() { this.smooth = 0; this.smoothConstraint = true; } return ECPolylineShape; }(); var ECPolyline = function(_super) { __extends(ECPolyline, _super); function ECPolyline(opts) { var _this = _super.call(this, opts) || this; _this.type = "ec-polyline"; return _this; } ECPolyline.prototype.getDefaultStyle = function() { return { stroke: tokens.color.neutral99, fill: null }; }; ECPolyline.prototype.getDefaultShape = function() { return new ECPolylineShape(); }; ECPolyline.prototype.buildPath = function(ctx, shape) { var points = shape.points; var i = 0; var len = points.length / 2; if (shape.connectNulls) { for (; len > 0; len--) if (!isPointIllegal(points[len * 2 - 2], points[len * 2 - 1])) break; for (; i < len; i++) if (!isPointIllegal(points[i * 2], points[i * 2 + 1])) break; } while (i < len) i += drawSegment(ctx, points, i, len, len, 1, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1; }; ECPolyline.prototype.getPointOn = function(xOrY, dim) { if (!this.path) { this.createPathProxy(); this.buildPath(this.path, this.shape); } var data = this.path.data; var CMD = PathProxy.CMD; var x0; var y0; var isDimX = dim === "x"; var roots = []; for (var i = 0; i < data.length;) { var cmd = data[i++]; var x = void 0; var y = void 0; var x2 = void 0; var y2 = void 0; var x3 = void 0; var y3 = void 0; var t = void 0; switch (cmd) { case CMD.M: x0 = data[i++]; y0 = data[i++]; break; case CMD.L: x = data[i++]; y = data[i++]; t = isDimX ? (xOrY - x0) / (x - x0) : (xOrY - y0) / (y - y0); if (t <= 1 && t >= 0) { var val = isDimX ? (y - y0) * t + y0 : (x - x0) * t + x0; return isDimX ? [xOrY, val] : [val, xOrY]; } x0 = x; y0 = y; break; case CMD.C: x = data[i++]; y = data[i++]; x2 = data[i++]; y2 = data[i++]; x3 = data[i++]; y3 = data[i++]; var nRoot = isDimX ? cubicRootAt(x0, x, x2, x3, xOrY, roots) : cubicRootAt(y0, y, y2, y3, xOrY, roots); if (nRoot > 0) for (var i_1 = 0; i_1 < nRoot; i_1++) { var t_1 = roots[i_1]; if (t_1 <= 1 && t_1 >= 0) { var val = isDimX ? cubicAt(y0, y, y2, y3, t_1) : cubicAt(x0, x, x2, x3, t_1); return isDimX ? [xOrY, val] : [val, xOrY]; } } x0 = x3; y0 = y3; } } }; return ECPolyline; }(Path); var ECPolygonShape = function(_super) { __extends(ECPolygonShape, _super); function ECPolygonShape() { return _super !== null && _super.apply(this, arguments) || this; } return ECPolygonShape; }(ECPolylineShape); var ECPolygon = function(_super) { __extends(ECPolygon, _super); function ECPolygon(opts) { var _this = _super.call(this, opts) || this; _this.type = "ec-polygon"; return _this; } ECPolygon.prototype.getDefaultShape = function() { return new ECPolygonShape(); }; ECPolygon.prototype.buildPath = function(ctx, shape) { var points = shape.points; var stackedOnPoints = shape.stackedOnPoints; var i = 0; var len = points.length / 2; var smoothMonotone = shape.smoothMonotone; if (shape.connectNulls) { for (; len > 0; len--) if (!isPointIllegal(points[len * 2 - 2], points[len * 2 - 1])) break; for (; i < len; i++) if (!isPointIllegal(points[i * 2], points[i * 2 + 1])) break; } while (i < len) { var k = drawSegment(ctx, points, i, len, len, 1, shape.smooth, smoothMonotone, shape.connectNulls); drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls); i += k + 1; ctx.closePath(); } }; return ECPolygon; }(Path); //#endregion //#region node_modules/echarts/lib/chart/helper/createClipPathFromCoordSys.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function createGridClipPath(cartesian, hasAnimation, seriesModel, done, during) { var rect = cartesian.getArea(); var x = rect.x; var y = rect.y; var width = rect.width; var height = rect.height; var lineWidth = seriesModel.get(["lineStyle", "width"]) || 0; x -= lineWidth / 2; y -= lineWidth / 2; width += lineWidth; height += lineWidth; width = Math.ceil(width); if (x !== Math.floor(x)) { x = Math.floor(x); width++; } var clipPath = new Rect$2({ shape: { x, y, width, height } }); if (hasAnimation) { var baseAxis = cartesian.getBaseAxis(); var isHorizontal = baseAxis.isHorizontal(); var isAxisInversed = baseAxis.inverse; if (isHorizontal) { if (isAxisInversed) clipPath.shape.x += width; clipPath.shape.width = 0; } else { if (!isAxisInversed) clipPath.shape.y += height; clipPath.shape.height = 0; } var duringCb = isFunction(during) ? function(percent) { during(percent, clipPath); } : null; initProps(clipPath, { shape: { width, height, x, y } }, seriesModel, null, done, duringCb); } return clipPath; } function createPolarClipPath(polar, hasAnimation, seriesModel) { var sectorArea = polar.getArea(); var r0 = round$3(sectorArea.r0, 1); var r = round$3(sectorArea.r, 1); var clipPath = new Sector({ shape: { cx: round$3(polar.cx, 1), cy: round$3(polar.cy, 1), r0, r, startAngle: sectorArea.startAngle, endAngle: sectorArea.endAngle, clockwise: sectorArea.clockwise } }); if (hasAnimation) { if (polar.getBaseAxis().dim === "angle") clipPath.shape.endAngle = sectorArea.startAngle; else clipPath.shape.r = r0; initProps(clipPath, { shape: { endAngle: sectorArea.endAngle, r } }, seriesModel); } return clipPath; } function createClipPath(coordSys, hasAnimation, seriesModel, done, during) { if (!coordSys) return null; else if (coordSys.type === "polar") return createPolarClipPath(coordSys, hasAnimation, seriesModel); else if (coordSys.type === "cartesian2d") return createGridClipPath(coordSys, hasAnimation, seriesModel, done, during); return null; } function updateClipPath(clip, symbolEl, clipPath) { if (clip) { assert(clipPath); symbolEl.setClipPath(clipPath); } else symbolEl.removeClipPath(); } function createCoordSysClipAreaSimply(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (seriesModel.get("clip", true) && coordSys && (!coordSys.shouldClip || coordSys.shouldClip())) return coordSys.getArea && coordSys.getArea(.1); } //#endregion //#region node_modules/echarts/lib/coord/CoordinateSystem.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function isCoordinateSystemType(coordSys, type) { return coordSys.type === type; } function isGeoLikeCoordSys(coordSys) { var dimensions = coordSys.dimensions; return dimensions[0] === "lng" && dimensions[1] === "lat" && !!coordSys.getViewRect; } //#endregion //#region node_modules/echarts/lib/util/styleCompat.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var deprecatedLogs = {}; /** * Whether need to call `convertEC4CompatibleStyle`. */ function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) { return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== "tspan" && (elType === "text" || hasOwn(style, "text"))); } /** * `EC4CompatibleStyle` is style that might be in echarts4 format or echarts5 format. * @param hostStyle The properties might be modified. * @return If be text el, `textContentStyle` and `textConfig` will not be returned. * Otherwise a `textContentStyle` and `textConfig` will be created, whose props area * retried from the `hostStyle`. */ function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) { var srcStyle = hostStyle; var textConfig; var textContent; var textContentStyle; if (elType === "text") textContentStyle = srcStyle; else { textContentStyle = {}; hasOwn(srcStyle, "text") && (textContentStyle.text = srcStyle.text); hasOwn(srcStyle, "rich") && (textContentStyle.rich = srcStyle.rich); hasOwn(srcStyle, "textFill") && (textContentStyle.fill = srcStyle.textFill); hasOwn(srcStyle, "textStroke") && (textContentStyle.stroke = srcStyle.textStroke); hasOwn(srcStyle, "fontFamily") && (textContentStyle.fontFamily = srcStyle.fontFamily); hasOwn(srcStyle, "fontSize") && (textContentStyle.fontSize = srcStyle.fontSize); hasOwn(srcStyle, "fontStyle") && (textContentStyle.fontStyle = srcStyle.fontStyle); hasOwn(srcStyle, "fontWeight") && (textContentStyle.fontWeight = srcStyle.fontWeight); textContent = { type: "text", style: textContentStyle, silent: true }; textConfig = {}; var hasOwnPos = hasOwn(srcStyle, "textPosition"); if (isNormal) textConfig.position = hasOwnPos ? srcStyle.textPosition : "inside"; else hasOwnPos && (textConfig.position = srcStyle.textPosition); hasOwn(srcStyle, "textPosition") && (textConfig.position = srcStyle.textPosition); hasOwn(srcStyle, "textOffset") && (textConfig.offset = srcStyle.textOffset); hasOwn(srcStyle, "textRotation") && (textConfig.rotation = srcStyle.textRotation); hasOwn(srcStyle, "textDistance") && (textConfig.distance = srcStyle.textDistance); } convertEC4CompatibleRichItem(textContentStyle, hostStyle); each$12(textContentStyle.rich, function(richItem) { convertEC4CompatibleRichItem(richItem, richItem); }); return { textConfig, textContent }; } /** * The result will be set to `out`. */ function convertEC4CompatibleRichItem(out, richItem) { if (!richItem) return; richItem.font = richItem.textFont || richItem.font; hasOwn(richItem, "textStrokeWidth") && (out.lineWidth = richItem.textStrokeWidth); hasOwn(richItem, "textAlign") && (out.align = richItem.textAlign); hasOwn(richItem, "textVerticalAlign") && (out.verticalAlign = richItem.textVerticalAlign); hasOwn(richItem, "textLineHeight") && (out.lineHeight = richItem.textLineHeight); hasOwn(richItem, "textWidth") && (out.width = richItem.textWidth); hasOwn(richItem, "textHeight") && (out.height = richItem.textHeight); hasOwn(richItem, "textBackgroundColor") && (out.backgroundColor = richItem.textBackgroundColor); hasOwn(richItem, "textPadding") && (out.padding = richItem.textPadding); hasOwn(richItem, "textBorderColor") && (out.borderColor = richItem.textBorderColor); hasOwn(richItem, "textBorderWidth") && (out.borderWidth = richItem.textBorderWidth); hasOwn(richItem, "textBorderRadius") && (out.borderRadius = richItem.textBorderRadius); hasOwn(richItem, "textBoxShadowColor") && (out.shadowColor = richItem.textBoxShadowColor); hasOwn(richItem, "textBoxShadowBlur") && (out.shadowBlur = richItem.textBoxShadowBlur); hasOwn(richItem, "textBoxShadowOffsetX") && (out.shadowOffsetX = richItem.textBoxShadowOffsetX); hasOwn(richItem, "textBoxShadowOffsetY") && (out.shadowOffsetY = richItem.textBoxShadowOffsetY); } /** * Convert to pure echarts4 format style. * `itemStyle` will be modified, added with ec4 style properties from * `textStyle` and `textConfig`. * * [Caveat]: For simplicity, `insideRollback` in ec4 does not compat, where * `styleEmphasis: {textFill: 'red'}` will remove the normal auto added stroke. */ function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) { var out = itemStl; out.textPosition = out.textPosition || txCfg.position || "inside"; txCfg.offset != null && (out.textOffset = txCfg.offset); txCfg.rotation != null && (out.textRotation = txCfg.rotation); txCfg.distance != null && (out.textDistance = txCfg.distance); var isInside = out.textPosition.indexOf("inside") >= 0; var hostFill = itemStl.fill || tokens.color.neutral99; convertToEC4RichItem(out, txStl); var textFillNotSet = out.textFill == null; if (isInside) { if (textFillNotSet) { out.textFill = txCfg.insideFill || tokens.color.neutral00; !out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke); !out.textStroke && (out.textStroke = hostFill); out.textStrokeWidth ??= 2; } } else { if (textFillNotSet) out.textFill = itemStl.fill || txCfg.outsideFill || tokens.color.neutral00; !out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke); } out.text = txStl.text; out.rich = txStl.rich; each$12(txStl.rich, function(richItem) { convertToEC4RichItem(richItem, richItem); }); return out; } function convertToEC4RichItem(out, richItem) { if (!richItem) return; hasOwn(richItem, "fill") && (out.textFill = richItem.fill); hasOwn(richItem, "stroke") && (out.textStroke = richItem.fill); hasOwn(richItem, "lineWidth") && (out.textStrokeWidth = richItem.lineWidth); hasOwn(richItem, "font") && (out.font = richItem.font); hasOwn(richItem, "fontStyle") && (out.fontStyle = richItem.fontStyle); hasOwn(richItem, "fontWeight") && (out.fontWeight = richItem.fontWeight); hasOwn(richItem, "fontSize") && (out.fontSize = richItem.fontSize); hasOwn(richItem, "fontFamily") && (out.fontFamily = richItem.fontFamily); hasOwn(richItem, "align") && (out.textAlign = richItem.align); hasOwn(richItem, "verticalAlign") && (out.textVerticalAlign = richItem.verticalAlign); hasOwn(richItem, "lineHeight") && (out.textLineHeight = richItem.lineHeight); hasOwn(richItem, "width") && (out.textWidth = richItem.width); hasOwn(richItem, "height") && (out.textHeight = richItem.height); hasOwn(richItem, "backgroundColor") && (out.textBackgroundColor = richItem.backgroundColor); hasOwn(richItem, "padding") && (out.textPadding = richItem.padding); hasOwn(richItem, "borderColor") && (out.textBorderColor = richItem.borderColor); hasOwn(richItem, "borderWidth") && (out.textBorderWidth = richItem.borderWidth); hasOwn(richItem, "borderRadius") && (out.textBorderRadius = richItem.borderRadius); hasOwn(richItem, "shadowColor") && (out.textBoxShadowColor = richItem.shadowColor); hasOwn(richItem, "shadowBlur") && (out.textBoxShadowBlur = richItem.shadowBlur); hasOwn(richItem, "shadowOffsetX") && (out.textBoxShadowOffsetX = richItem.shadowOffsetX); hasOwn(richItem, "shadowOffsetY") && (out.textBoxShadowOffsetY = richItem.shadowOffsetY); hasOwn(richItem, "textShadowColor") && (out.textShadowColor = richItem.textShadowColor); hasOwn(richItem, "textShadowBlur") && (out.textShadowBlur = richItem.textShadowBlur); hasOwn(richItem, "textShadowOffsetX") && (out.textShadowOffsetX = richItem.textShadowOffsetX); hasOwn(richItem, "textShadowOffsetY") && (out.textShadowOffsetY = richItem.textShadowOffsetY); } function warnDeprecated(deprecated, insteadApproach) { var key = deprecated + "^_^" + insteadApproach; if (!deprecatedLogs[key]) { console.warn("[ECharts] DEPRECATED: \"" + deprecated + "\" has been deprecated. " + insteadApproach); deprecatedLogs[key] = true; } } //#endregion //#region node_modules/echarts/lib/chart/line/LineView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function isPointsSame(points1, points2) { if (points1.length !== points2.length) return; for (var i = 0; i < points1.length; i++) if (points1[i] !== points2[i]) return; return true; } function xyExtentFromPoints(points) { var xExtent = initExtentForUnion(); var yExtent = initExtentForUnion(); for (var i = 0; i < points.length;) { var x = points[i++]; var y = points[i++]; if (!isPointIllegal(x, y)) { unionExtentFromNumber(xExtent, x); unionExtentFromNumber(yExtent, y); } } return [xExtent, yExtent]; } function getBoundingDiff(points1, points2) { var _a = xyExtentFromPoints(points1), xExtent1 = _a[0], yExtent1 = _a[1]; var _b = xyExtentFromPoints(points2), xExtent2 = _b[0], yExtent2 = _b[1]; return Math.max(Math.abs(xExtent1[0] - xExtent2[0]), Math.abs(yExtent1[0] - yExtent2[0]), Math.abs(xExtent1[1] - xExtent2[1]), Math.abs(yExtent1[1] - yExtent2[1])); } function getSmooth(smooth) { return isNumber(smooth) ? smooth : smooth ? .5 : 0; } function getStackedOnPoints(coordSys, data, dataCoordInfo) { if (dataCoordInfo.valueDim == null) return []; var len = data.count(); var points = createFloat32Array(len * 2); for (var idx = 0; idx < len; idx++) { var pt = getStackedOnPoint(dataCoordInfo, coordSys, data, idx); points[idx * 2] = pt[0]; points[idx * 2 + 1] = pt[1]; } return points; } /** * Filter the null data and extend data for step considering `stepTurnAt` * * @param points data to convert, that may containing null * @param basePoints base data to reference, used only for areaStyle points * @param coordSys coordinate system * @param stepTurnAt 'start' | 'end' | 'middle' | true * @param connectNulls whether to connect nulls * @returns converted point positions */ function turnPointsIntoStep(points, basePoints, coordSys, stepTurnAt, connectNulls) { var baseAxis = coordSys.getBaseAxis(); var baseIndex = baseAxis.dim === "x" || baseAxis.dim === "radius" ? 0 : 1; var stepPoints = []; var i = 0; var stepPt = []; var pt = []; var nextPt = []; var filteredPoints = []; if (connectNulls) { for (i = 0; i < points.length; i += 2) { /** * For areaStyle of stepped lines, `stackedOnPoints` should be * filtered the same as `points` so that the base axis values * should stay the same as the lines above. See #20021 */ var reference = basePoints || points; if (!isPointIllegal(reference[i], reference[i + 1])) filteredPoints.push(points[i], points[i + 1]); } points = filteredPoints; } for (i = 0; i < points.length - 2; i += 2) { nextPt[0] = points[i + 2]; nextPt[1] = points[i + 3]; pt[0] = points[i]; pt[1] = points[i + 1]; stepPoints.push(pt[0], pt[1]); switch (stepTurnAt) { case "end": stepPt[baseIndex] = nextPt[baseIndex]; stepPt[1 - baseIndex] = pt[1 - baseIndex]; stepPoints.push(stepPt[0], stepPt[1]); break; case "middle": var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2; var stepPt2 = []; stepPt[baseIndex] = stepPt2[baseIndex] = middle; stepPt[1 - baseIndex] = pt[1 - baseIndex]; stepPt2[1 - baseIndex] = nextPt[1 - baseIndex]; stepPoints.push(stepPt[0], stepPt[1]); stepPoints.push(stepPt2[0], stepPt2[1]); break; default: stepPt[baseIndex] = pt[baseIndex]; stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; stepPoints.push(stepPt[0], stepPt[1]); } } stepPoints.push(points[i++], points[i++]); return stepPoints; } /** * Clip color stops to edge. Avoid creating too large gradients. * Which may lead to blurry when GPU acceleration is enabled. See #15680 * * The stops has been sorted from small to large. */ function clipColorStops(colorStops, maxSize) { var newColorStops = []; var len = colorStops.length; var prevOutOfRangeColorStop; var prevInRangeColorStop; function lerpStop(stop0, stop1, clippedCoord) { var coord0 = stop0.coord; return { coord: clippedCoord, color: lerp((clippedCoord - coord0) / (stop1.coord - coord0), [stop0.color, stop1.color]) }; } for (var i = 0; i < len; i++) { var stop_1 = colorStops[i]; var coord = stop_1.coord; if (coord < 0) prevOutOfRangeColorStop = stop_1; else if (coord > maxSize) { if (prevInRangeColorStop) newColorStops.push(lerpStop(prevInRangeColorStop, stop_1, maxSize)); else if (prevOutOfRangeColorStop) newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0), lerpStop(prevOutOfRangeColorStop, stop_1, maxSize)); break; } else { if (prevOutOfRangeColorStop) { newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0)); prevOutOfRangeColorStop = null; } newColorStops.push(stop_1); prevInRangeColorStop = stop_1; } } return newColorStops; } function getVisualGradient(data, coordSys, api) { var visualMetaList = data.getVisual("visualMeta"); if (!visualMetaList || !visualMetaList.length || !data.count()) return; if (coordSys.type !== "cartesian2d") { console.warn("Visual map on line style is only supported on cartesian2d."); return; } var coordDim; var visualMeta; for (var i = visualMetaList.length - 1; i >= 0; i--) { var dimInfo = data.getDimensionInfo(visualMetaList[i].dimension); coordDim = dimInfo && dimInfo.coordDim; if (coordDim === "x" || coordDim === "y") { visualMeta = visualMetaList[i]; break; } } if (!visualMeta) { console.warn("Visual map on line style only support x or y dimension."); return; } var axis = coordSys.getAxis(coordDim); var colorStops = map$1(visualMeta.stops, function(stop) { return { coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)), color: stop.color }; }); var stopLen = colorStops.length; var outerColors = visualMeta.outerColors.slice(); if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) { colorStops.reverse(); outerColors.reverse(); } var colorStopsInRange = clipColorStops(colorStops, coordDim === "x" ? api.getWidth() : api.getHeight()); var inRangeStopLen = colorStopsInRange.length; if (!inRangeStopLen && stopLen) return colorStops[0].coord < 0 ? outerColors[1] ? outerColors[1] : colorStops[stopLen - 1].color : outerColors[0] ? outerColors[0] : colorStops[0].color; var tinyExtent = 10; var minCoord = colorStopsInRange[0].coord - tinyExtent; var maxCoord = colorStopsInRange[inRangeStopLen - 1].coord + tinyExtent; var coordSpan = maxCoord - minCoord; if (coordSpan < .001) return "transparent"; each$12(colorStopsInRange, function(stop) { stop.offset = (stop.coord - minCoord) / coordSpan; }); colorStopsInRange.push({ offset: inRangeStopLen ? colorStopsInRange[inRangeStopLen - 1].offset : .5, color: outerColors[1] || "transparent" }); colorStopsInRange.unshift({ offset: inRangeStopLen ? colorStopsInRange[0].offset : .5, color: outerColors[0] || "transparent" }); var gradient = new LinearGradient(0, 0, 0, 0, colorStopsInRange, true); gradient[coordDim] = minCoord; gradient[coordDim + "2"] = maxCoord; return gradient; } function getIsIgnoreFunc(seriesModel, data, coordSys) { var showAllSymbol = seriesModel.get("showAllSymbol"); var isAuto = showAllSymbol === "auto"; if (showAllSymbol && !isAuto) return; var categoryAxis = coordSys.getAxesByScale("ordinal")[0]; if (!categoryAxis) return; if (isAuto && canShowAllSymbolForCategory(categoryAxis, data)) return; var categoryDataDim = data.mapDimension(categoryAxis.dim); var labelMap = {}; each$12(categoryAxis.getViewLabels(), function(labelItem) { if (!labelItem.tick.offInterval) labelMap[getTickValueOutermost(categoryAxis.scale, labelItem.tick)] = 1; }); return function(dataIndex) { return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex)); }; } function canShowAllSymbolForCategory(categoryAxis, data) { var axisExtent = categoryAxis.getExtent(); var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count(); isNaN(availSize) && (availSize = 0); var dataLen = data.count(); var step = Math.max(1, Math.round(dataLen / 5)); for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) if (Symbol$1.getSymbolSize(data, dataIndex)[categoryAxis.isHorizontal() ? 1 : 0] * 1.5 > availSize) return false; return true; } function getLastIndexNotNull(points) { var len = points.length / 2; for (; len > 0; len--) if (!isPointIllegal(points[len * 2 - 2], points[len * 2 - 1])) break; return len - 1; } function getPointAtIndex(points, idx) { return [points[idx * 2], points[idx * 2 + 1]]; } function getIndexRange(points, xOrY, dim) { var len = points.length / 2; var dimIdx = dim === "x" ? 0 : 1; var a; var b; var prevIndex = 0; var nextIndex = -1; for (var i = 0; i < len; i++) { b = points[i * 2 + dimIdx]; if (isPointIllegal(b, points[i * 2 + 1 - dimIdx])) continue; if (i === 0) { a = b; continue; } if (a <= xOrY && b >= xOrY || a >= xOrY && b <= xOrY) { nextIndex = i; break; } prevIndex = i; a = b; } return { range: [prevIndex, nextIndex], t: (xOrY - a) / (b - a) }; } function anyStateShowEndLabel(seriesModel) { if (seriesModel.get(["endLabel", "show"])) return true; for (var i = 0; i < SPECIAL_STATES.length; i++) if (seriesModel.get([ SPECIAL_STATES[i], "endLabel", "show" ])) return true; return false; } function createLineClipPath(lineView, coordSys, hasAnimation, seriesModel) { if (isCoordinateSystemType(coordSys, "cartesian2d")) { var endLabelModel_1 = seriesModel.getModel("endLabel"); var valueAnimation_1 = endLabelModel_1.get("valueAnimation"); var data_1 = seriesModel.getData(); var labelAnimationRecord_1 = { lastFrameIndex: 0 }; var during = anyStateShowEndLabel(seriesModel) ? function(percent, clipRect) { lineView._endLabelOnDuring(percent, clipRect, data_1, labelAnimationRecord_1, valueAnimation_1, endLabelModel_1, coordSys); } : null; var isHorizontal = coordSys.getBaseAxis().isHorizontal(); var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, function() { var endLabel = lineView._endLabel; if (endLabel && hasAnimation) { if (labelAnimationRecord_1.originalX != null) endLabel.attr({ x: labelAnimationRecord_1.originalX, y: labelAnimationRecord_1.originalY }); } }, during); if (!seriesModel.get("clip", true)) { var rectShape = clipPath.shape; var expandSize = Math.max(rectShape.width, rectShape.height); if (isHorizontal) { rectShape.y -= expandSize; rectShape.height += expandSize * 2; } else { rectShape.x -= expandSize; rectShape.width += expandSize * 2; } } if (during) during(1, clipPath); return clipPath; } else { if (seriesModel.get(["endLabel", "show"])) console.warn("endLabel is not supported for lines in polar systems."); return createPolarClipPath(coordSys, hasAnimation, seriesModel); } } function getEndLabelStateSpecified(endLabelModel, coordSys) { var baseAxis = coordSys.getBaseAxis(); var isHorizontal = baseAxis.isHorizontal(); var isBaseInversed = baseAxis.inverse; var align = isHorizontal ? isBaseInversed ? "right" : "left" : "center"; var verticalAlign = isHorizontal ? "middle" : isBaseInversed ? "top" : "bottom"; return { normal: { align: endLabelModel.get("align") || align, verticalAlign: endLabelModel.get("verticalAlign") || verticalAlign } }; } var LineView = function(_super) { __extends(LineView, _super); function LineView() { return _super !== null && _super.apply(this, arguments) || this; } LineView.prototype.init = function() { var lineGroup = new Group$3(); var symbolDraw = new SymbolDraw(); this.group.add(symbolDraw.group); this._symbolDraw = symbolDraw; this._lineGroup = lineGroup; this._changePolyState = bind$1(this._changePolyState, this); }; LineView.prototype.render = function(seriesModel, ecModel, api) { var coordSys = seriesModel.coordinateSystem; var group = this.group; var data = seriesModel.getData(); var lineStyleModel = seriesModel.getModel("lineStyle"); var areaStyleModel = seriesModel.getModel("areaStyle"); var points = data.getLayout("points") || []; var isCoordSysPolar = coordSys.type === "polar"; var prevCoordSys = this._coordSys; var symbolDraw = this._symbolDraw; var polyline = this._polyline; var polygon = this._polygon; var lineGroup = this._lineGroup; var hasAnimation = !ecModel.ssr && seriesModel.get("animation"); var isAreaChart = !areaStyleModel.isEmpty(); var valueOrigin = areaStyleModel.get("origin"); var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin); var stackedOnPoints = isAreaChart && getStackedOnPoints(coordSys, data, dataCoordInfo); var showSymbol = seriesModel.get("showSymbol"); var connectNulls = seriesModel.get("connectNulls"); var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys); var oldData = this._data; oldData && oldData.eachItemGraphicEl(function(el, idx) { if (el.__temp) { group.remove(el); oldData.setItemGraphicEl(idx, null); } }); if (!showSymbol) symbolDraw.remove(); group.add(lineGroup); var step = !isCoordSysPolar ? seriesModel.get("step") : false; var clipShapeForSymbol; if (coordSys && coordSys.getArea && seriesModel.get("clip", true)) { clipShapeForSymbol = coordSys.getArea(); if (clipShapeForSymbol.width != null) { clipShapeForSymbol.x -= .1; clipShapeForSymbol.y -= .1; clipShapeForSymbol.width += .2; clipShapeForSymbol.height += .2; } else if (clipShapeForSymbol.r0) { clipShapeForSymbol.r0 -= .5; clipShapeForSymbol.r += .5; } } this._clipShapeForSymbol = clipShapeForSymbol; var visualColor = getVisualGradient(data, coordSys, api) || data.getVisual("style")[data.getVisual("drawType")]; if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) { showSymbol && symbolDraw.updateData(data, { isIgnore: isIgnoreFunc, clipShape: clipShapeForSymbol, disableAnimation: true, getSymbolPoint: function(idx) { return [points[idx * 2], points[idx * 2 + 1]]; } }); hasAnimation && this._initSymbolLabelAnimation(data, coordSys, clipShapeForSymbol); if (step) { if (stackedOnPoints) stackedOnPoints = turnPointsIntoStep(stackedOnPoints, points, coordSys, step, connectNulls); points = turnPointsIntoStep(points, null, coordSys, step, connectNulls); } polyline = this._newPolyline(points); if (isAreaChart) polygon = this._newPolygon(points, stackedOnPoints); else if (polygon) { lineGroup.remove(polygon); polygon = this._polygon = null; } if (!isCoordSysPolar) this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor)); lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel)); } else { if (isAreaChart && !polygon) polygon = this._newPolygon(points, stackedOnPoints); else if (polygon && !isAreaChart) { lineGroup.remove(polygon); polygon = this._polygon = null; } if (!isCoordSysPolar) this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor)); var oldClipPath = lineGroup.getClipPath(); if (oldClipPath) initProps(oldClipPath, { shape: createLineClipPath(this, coordSys, false, seriesModel).shape }, seriesModel); else lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel)); showSymbol && symbolDraw.updateData(data, { isIgnore: isIgnoreFunc, clipShape: clipShapeForSymbol, disableAnimation: true, getSymbolPoint: function(idx) { return [points[idx * 2], points[idx * 2 + 1]]; } }); if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) { if (hasAnimation) this._doUpdateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls); else { if (step) { if (stackedOnPoints) stackedOnPoints = turnPointsIntoStep(stackedOnPoints, points, coordSys, step, connectNulls); points = turnPointsIntoStep(points, null, coordSys, step, connectNulls); } polyline.setShape({ points }); polygon && polygon.setShape({ points, stackedOnPoints }); } } } var emphasisModel = seriesModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); var blurScope = emphasisModel.get("blurScope"); var emphasisDisabled = emphasisModel.get("disabled"); polyline.useStyle(defaults(lineStyleModel.getLineStyle(), { fill: "none", stroke: visualColor, lineJoin: "bevel" })); setStatesStylesFromModel(polyline, seriesModel, "lineStyle"); if (polyline.style.lineWidth > 0 && seriesModel.get([ "emphasis", "lineStyle", "width" ]) === "bolder") { var emphasisLineStyle = polyline.getState("emphasis").style; emphasisLineStyle.lineWidth = +polyline.style.lineWidth + 1; } getECData(polyline).seriesIndex = seriesModel.seriesIndex; toggleHoverEmphasis(polyline, focus, blurScope, emphasisDisabled); var smooth = getSmooth(seriesModel.get("smooth")); var smoothMonotone = seriesModel.get("smoothMonotone"); polyline.setShape({ smooth, smoothMonotone, connectNulls }); if (polygon) { var stackedOnSeries = data.getCalculationInfo("stackedOnSeries"); var stackedOnSmooth = 0; polygon.useStyle(defaults(areaStyleModel.getAreaStyle(), { fill: visualColor, opacity: .7, lineJoin: "bevel", decal: data.getVisual("style").decal })); if (stackedOnSeries) stackedOnSmooth = getSmooth(stackedOnSeries.get("smooth")); polygon.setShape({ smooth, stackedOnSmooth, smoothMonotone, connectNulls }); setStatesStylesFromModel(polygon, seriesModel, "areaStyle"); getECData(polygon).seriesIndex = seriesModel.seriesIndex; toggleHoverEmphasis(polygon, focus, blurScope, emphasisDisabled); } var changePolyState = this._changePolyState; data.eachItemGraphicEl(function(el) { el && (el.onHoverStateChange = changePolyState); }); this._polyline.onHoverStateChange = changePolyState; this._data = data; this._coordSys = coordSys; this._stackedOnPoints = stackedOnPoints; this._points = points; this._step = step; this._valueOrigin = valueOrigin; var triggerEvent = seriesModel.get("triggerEvent"); var triggerLineEvent = seriesModel.get("triggerLineEvent"); triggerLineEvent && warnDeprecated("triggerLineEvent", "Use the `triggerEvent` option instead."); var shouldTriggerLineEvent = triggerLineEvent === true || triggerEvent === true || triggerEvent === "line"; var shouldTriggerAreaEvent = triggerLineEvent === true || triggerEvent === true || triggerEvent === "area"; this.packEventData(seriesModel, polyline, shouldTriggerLineEvent); polygon && this.packEventData(seriesModel, polygon, shouldTriggerAreaEvent); }; LineView.prototype.packEventData = function(seriesModel, el, enable) { getECData(el).eventData = enable ? { componentType: "series", componentSubType: "line", componentIndex: seriesModel.componentIndex, seriesIndex: seriesModel.seriesIndex, seriesName: seriesModel.name, seriesType: "line", selfType: el === this._polygon ? "area" : "line" } : null; }; LineView.prototype.highlight = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(); var dataIndex = queryDataIndex(data, payload); this._changePolyState("emphasis"); if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) { var points = data.getLayout("points"); var symbol = data.getItemGraphicEl(dataIndex); if (!symbol) { var x = points[dataIndex * 2]; var y = points[dataIndex * 2 + 1]; if (isPointIllegal(x, y)) return; if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(x, y)) return; var zlevel = seriesModel.get("zlevel") || 0; var z = seriesModel.get("z") || 0; symbol = new Symbol$1(data, dataIndex); symbol.x = x; symbol.y = y; symbol.setZ(zlevel, z); var symbolLabel = symbol.getSymbolPath().getTextContent(); if (symbolLabel) { symbolLabel.zlevel = zlevel; symbolLabel.z = z; symbolLabel.z2 = this._polyline.z2 + 1; } symbol.__temp = true; data.setItemGraphicEl(dataIndex, symbol); symbol.stopSymbolAnimation(true); this.group.add(symbol); } symbol.highlight(); } else ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload); }; LineView.prototype.downplay = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(); var dataIndex = queryDataIndex(data, payload); this._changePolyState("normal"); if (dataIndex != null && dataIndex >= 0) { var symbol = data.getItemGraphicEl(dataIndex); if (symbol) { if (symbol.__temp) { data.setItemGraphicEl(dataIndex, null); this.group.remove(symbol); } else symbol.downplay(); } } else ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload); }; LineView.prototype._changePolyState = function(toState) { var polygon = this._polygon; setStatesFlag(this._polyline, toState); polygon && setStatesFlag(polygon, toState); }; LineView.prototype._newPolyline = function(points) { var polyline = this._polyline; if (polyline) this._lineGroup.remove(polyline); polyline = new ECPolyline({ shape: { points }, segmentIgnoreThreshold: 2, z2: 10 }); this._lineGroup.add(polyline); this._polyline = polyline; return polyline; }; LineView.prototype._newPolygon = function(points, stackedOnPoints) { var polygon = this._polygon; if (polygon) this._lineGroup.remove(polygon); polygon = new ECPolygon({ shape: { points, stackedOnPoints }, segmentIgnoreThreshold: 2 }); this._lineGroup.add(polygon); this._polygon = polygon; return polygon; }; LineView.prototype._initSymbolLabelAnimation = function(data, coordSys, clipShape) { var isHorizontalOrRadial; var isCoordSysPolar; var baseAxis = coordSys.getBaseAxis(); var isAxisInverse = baseAxis.inverse; if (coordSys.type === "cartesian2d") { isHorizontalOrRadial = baseAxis.isHorizontal(); isCoordSysPolar = false; } else if (coordSys.type === "polar") { isHorizontalOrRadial = baseAxis.dim === "angle"; isCoordSysPolar = true; } var seriesModel = data.hostModel; var seriesDuration = seriesModel.get("animationDuration"); if (isFunction(seriesDuration)) seriesDuration = seriesDuration(null); var seriesDelay = seriesModel.get("animationDelay") || 0; var seriesDelayValue = isFunction(seriesDelay) ? seriesDelay(null) : seriesDelay; data.eachItemGraphicEl(function(symbol, idx) { var el = symbol; if (el) { var point = [symbol.x, symbol.y]; var start = void 0; var end = void 0; var current = void 0; if (clipShape) { if (isCoordSysPolar) { var polarClip = clipShape; var coord = coordSys.pointToCoord(point); if (isHorizontalOrRadial) { start = polarClip.startAngle; end = polarClip.endAngle; current = -coord[1] / 180 * Math.PI; } else { start = polarClip.r0; end = polarClip.r; current = coord[0]; } } else { var gridClip = clipShape; if (isHorizontalOrRadial) { start = gridClip.x; end = gridClip.x + gridClip.width; current = symbol.x; } else { start = gridClip.y + gridClip.height; end = gridClip.y; current = symbol.y; } } } var ratio = end === start ? 0 : (current - start) / (end - start); if (isAxisInverse) ratio = 1 - ratio; var delay = isFunction(seriesDelay) ? seriesDelay(idx) : seriesDuration * ratio + seriesDelayValue; var symbolPath = el.getSymbolPath(); var text = symbolPath.getTextContent(); el.attr({ scaleX: 0, scaleY: 0 }); el.animateTo({ scaleX: 1, scaleY: 1 }, { duration: 200, setToFinal: true, delay }); if (text) text.animateFrom({ style: { opacity: 0 } }, { duration: 300, delay }); symbolPath.disableLabelAnimation = true; } }); }; LineView.prototype._initOrUpdateEndLabel = function(seriesModel, coordSys, inheritColor) { var endLabelModel = seriesModel.getModel("endLabel"); if (anyStateShowEndLabel(seriesModel)) { var data_2 = seriesModel.getData(); var polyline = this._polyline; var points = data_2.getLayout("points"); if (!points) { polyline.removeTextContent(); this._endLabel = null; return; } var endLabel = this._endLabel; if (!endLabel) { endLabel = this._endLabel = new ZRText({ z2: 200 }); endLabel.ignoreClip = true; polyline.setTextContent(this._endLabel); polyline.disableLabelAnimation = true; } var dataIndex = getLastIndexNotNull(points); if (dataIndex >= 0) { setLabelStyle(polyline, getLabelStatesModels(seriesModel, "endLabel"), { inheritColor, labelFetcher: seriesModel, labelDataIndex: dataIndex, defaultText: function(dataIndex, opt, interpolatedValue) { return interpolatedValue != null ? getDefaultInterpolatedLabel(data_2, interpolatedValue) : getDefaultLabel(data_2, dataIndex); }, enableTextSetter: true }, getEndLabelStateSpecified(endLabelModel, coordSys)); polyline.textConfig.position = null; } } else if (this._endLabel) { this._polyline.removeTextContent(); this._endLabel = null; } }; LineView.prototype._endLabelOnDuring = function(percent, clipRect, data, animationRecord, valueAnimation, endLabelModel, coordSys) { var endLabel = this._endLabel; var polyline = this._polyline; if (endLabel) { if (percent < 1 && animationRecord.originalX == null) { animationRecord.originalX = endLabel.x; animationRecord.originalY = endLabel.y; } var points = data.getLayout("points"); var seriesModel = data.hostModel; var connectNulls = seriesModel.get("connectNulls"); var precision = endLabelModel.get("precision"); var distance = endLabelModel.get("distance") || 0; var baseAxis = coordSys.getBaseAxis(); var isHorizontal = baseAxis.isHorizontal(); var isBaseInversed = baseAxis.inverse; var clipShape = clipRect.shape; var xOrY = isBaseInversed ? isHorizontal ? clipShape.x : clipShape.y + clipShape.height : isHorizontal ? clipShape.x + clipShape.width : clipShape.y; var distanceX = (isHorizontal ? distance : 0) * (isBaseInversed ? -1 : 1); var distanceY = (isHorizontal ? 0 : -distance) * (isBaseInversed ? -1 : 1); var dim = isHorizontal ? "x" : "y"; var dataIndexRange = getIndexRange(points, xOrY, dim); var indices = dataIndexRange.range; var diff = indices[1] - indices[0]; var value = void 0; if (diff >= 1) { if (diff > 1 && !connectNulls) { var pt = getPointAtIndex(points, indices[0]); endLabel.attr({ x: pt[0] + distanceX, y: pt[1] + distanceY }); valueAnimation && (value = seriesModel.getRawValue(indices[0])); } else { var pt = polyline.getPointOn(xOrY, dim); pt && endLabel.attr({ x: pt[0] + distanceX, y: pt[1] + distanceY }); var startValue = seriesModel.getRawValue(indices[0]); var endValue = seriesModel.getRawValue(indices[1]); valueAnimation && (value = interpolateRawValues(data, precision, startValue, endValue, dataIndexRange.t)); } animationRecord.lastFrameIndex = indices[0]; } else { var idx = percent === 1 || animationRecord.lastFrameIndex > 0 ? indices[0] : 0; var pt = getPointAtIndex(points, idx); valueAnimation && (value = seriesModel.getRawValue(idx)); endLabel.attr({ x: pt[0] + distanceX, y: pt[1] + distanceY }); } if (valueAnimation) { var inner = labelInner(endLabel); if (typeof inner.setLabelText === "function") inner.setLabelText(value); } } }; /** * @private */ LineView.prototype._doUpdateAnimation = function(data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls) { var polyline = this._polyline; var polygon = this._polygon; var seriesModel = data.hostModel; var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin, valueOrigin); var current = diff.current; var stackedOnCurrent = diff.stackedOnCurrent; var next = diff.next; var stackedOnNext = diff.stackedOnNext; if (step) { stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, diff.current, coordSys, step, connectNulls); current = turnPointsIntoStep(diff.current, null, coordSys, step, connectNulls); stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, diff.next, coordSys, step, connectNulls); next = turnPointsIntoStep(diff.next, null, coordSys, step, connectNulls); } if (getBoundingDiff(current, next) > 3e3 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3e3) { polyline.stopAnimation(); polyline.setShape({ points: next }); if (polygon) { polygon.stopAnimation(); polygon.setShape({ points: next, stackedOnPoints: stackedOnNext }); } return; } polyline.shape.__points = diff.current; polyline.shape.points = current; var target = { shape: { points: next } }; if (diff.current !== current) target.shape.__points = diff.next; polyline.stopAnimation(); updateProps$1(polyline, target, seriesModel); if (polygon) { polygon.setShape({ points: current, stackedOnPoints: stackedOnCurrent }); polygon.stopAnimation(); updateProps$1(polygon, { shape: { stackedOnPoints: stackedOnNext } }, seriesModel); if (polyline.shape.points !== polygon.shape.points) polygon.shape.points = polyline.shape.points; } var updatedDataInfo = []; var diffStatus = diff.status; for (var i = 0; i < diffStatus.length; i++) if (diffStatus[i].cmd === "=") { var el = data.getItemGraphicEl(diffStatus[i].idx1); if (el) updatedDataInfo.push({ el, ptIdx: i }); } if (polyline.animators && polyline.animators.length) polyline.animators[0].during(function() { polygon && polygon.dirtyShape(); var points = polyline.shape.__points; for (var i = 0; i < updatedDataInfo.length; i++) { var el = updatedDataInfo[i].el; var offset = updatedDataInfo[i].ptIdx * 2; el.x = points[offset]; el.y = points[offset + 1]; el.markRedraw(); } }); }; LineView.prototype.remove = function(ecModel) { var group = this.group; var oldData = this._data; this._lineGroup.removeAll(); this._symbolDraw.remove(true); oldData && oldData.eachItemGraphicEl(function(el, idx) { if (el.__temp) { group.remove(el); oldData.setItemGraphicEl(idx, null); } }); this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._endLabel = this._data = null; }; LineView.type = "line"; return LineView; }(ChartView); //#endregion //#region node_modules/echarts/lib/layout/points.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function pointsLayout(seriesType, forceStoreInTypedArray) { return { seriesType, plan: createRenderPlanner(), reset: function(seriesModel) { var data = seriesModel.getData(); var coordSys = seriesModel.coordinateSystem; var pipelineContext = seriesModel.pipelineContext; var useTypedArray = forceStoreInTypedArray || pipelineContext.large; if (!coordSys) return; var dims = map$1(coordSys.dimensions, function(dim) { return data.mapDimension(dim); }).slice(0, 2); var dimLen = dims.length; var stackResultDim = data.getCalculationInfo("stackResultDimension"); if (isDimensionStacked(data, dims[0])) dims[0] = stackResultDim; if (isDimensionStacked(data, dims[1])) dims[1] = stackResultDim; var store = data.getStore(); var dimIdx0 = data.getDimensionIndex(dims[0]); var dimIdx1 = data.getDimensionIndex(dims[1]); return dimLen && { progress: function(params, data) { var segCount = params.end - params.start; var points = useTypedArray && createFloat32Array(segCount * dimLen); var tmpIn = []; var tmpOut = []; for (var i = params.start, offset = 0; i < params.end; i++) { var point = void 0; if (dimLen === 1) { var x = store.get(dimIdx0, i); point = coordSys.dataToPoint(x, null, tmpOut); } else { tmpIn[0] = store.get(dimIdx0, i); tmpIn[1] = store.get(dimIdx1, i); point = coordSys.dataToPoint(tmpIn, null, tmpOut); } if (useTypedArray) { points[offset++] = point[0]; points[offset++] = point[1]; } else data.setItemLayout(i, point.slice()); } if (useTypedArray) { data.setLayout("points", points); data.setLayout("pointsRange", { start: params.start, end: params.end }); } } }; } }; } //#endregion //#region node_modules/echarts/lib/processor/dataSample.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var samplers = { average: function(frame) { var sum = 0; var count = 0; for (var i = 0; i < frame.length; i++) if (!isNaN(frame[i])) { sum += frame[i]; count++; } return count === 0 ? NaN : sum / count; }, sum: function(frame) { var sum = 0; for (var i = 0; i < frame.length; i++) sum += frame[i] || 0; return sum; }, max: function(frame) { var max = -Infinity; for (var i = 0; i < frame.length; i++) frame[i] > max && (max = frame[i]); return isFinite(max) ? max : NaN; }, min: function(frame) { var min = Infinity; for (var i = 0; i < frame.length; i++) frame[i] < min && (min = frame[i]); return isFinite(min) ? min : NaN; }, nearest: function(frame) { return frame[0]; } }; var indexSampler = function(frame) { return Math.round(frame.length / 2); }; function dataSample(seriesType) { return { seriesType, reset: function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var sampling = seriesModel.get("sampling"); var coordSys = seriesModel.coordinateSystem; var count = data.count(); if (count > 10 && coordSys.type === "cartesian2d" && sampling) { var baseAxis = coordSys.getBaseAxis(); var valueAxis = coordSys.getOtherAxis(baseAxis); var extent = baseAxis.getExtent(); var dpr = api.getDevicePixelRatio(); var size = Math.abs(extent[1] - extent[0]) * (dpr || 1); var rate = Math.round(count / size); if (isFinite(rate) && rate > 1) { if (sampling === "lttb") seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate)); else if (sampling === "minmax") seriesModel.setData(data.minmaxDownSample(data.mapDimension(valueAxis.dim), 1 / rate)); var sampler = void 0; if (isString(sampling)) sampler = samplers[sampling]; else if (isFunction(sampling)) sampler = sampling; if (sampler) seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler)); } } } }; } //#endregion //#region node_modules/echarts/lib/chart/line/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$55(registers) { registers.registerChartView(LineView); registers.registerSeriesModel(LineSeriesModel); registers.registerLayout(pointsLayout("line", true)); registers.registerVisual({ seriesType: "line", reset: function(seriesModel) { var data = seriesModel.getData(); var lineStyle = seriesModel.getModel("lineStyle").getLineStyle(); if (lineStyle && !lineStyle.stroke) lineStyle.stroke = data.getVisual("style").fill; data.setVisual("legendLineStyle", lineStyle); } }); registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample("line")); } //#endregion //#region node_modules/echarts/lib/coord/cartesian/Axis2D.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Axis2D = function(_super) { __extends(Axis2D, _super); function Axis2D(dim, scale, coordExtent, axisType, position) { var _this = _super.call(this, dim, scale, coordExtent) || this; /** * Index of axis, can be used as key * Injected outside. */ _this.index = 0; _this.type = axisType || "value"; _this.position = position || "bottom"; return _this; } Axis2D.prototype.isHorizontal = function() { var position = this.position; return position === "top" || position === "bottom"; }; /** * Each item cooresponds to this.getExtent(), which * means globalExtent[0] may greater than globalExtent[1], * unless `asc` is input. * * @param {boolean} [asc] * @return {Array.} */ Axis2D.prototype.getGlobalExtent = function(asc) { var ret = this.getExtent(); ret[0] = this.toGlobalCoord(ret[0]); ret[1] = this.toGlobalCoord(ret[1]); asc && ret[0] > ret[1] && ret.reverse(); return ret; }; Axis2D.prototype.pointToData = function(point, clamp) { return this.coordToData(this.toLocalCoord(point[this.dim === "x" ? 0 : 1]), clamp); }; /** * Set ordinalSortInfo * @param info new OrdinalSortInfo */ Axis2D.prototype.setCategorySortInfo = function(info) { if (this.type !== "category") return false; this.model.option.categorySortInfo = info; this.scale.setSortInfo(info); }; return Axis2D; }(Axis); //#endregion //#region node_modules/echarts/lib/component/axis/axisBreakHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var _impl = null; function registerAxisBreakHelperImpl(impl) { if (!_impl) _impl = impl; } function getAxisBreakHelper() { return _impl; } //#endregion //#region node_modules/echarts/lib/component/axis/axisAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var AXIS_BREAK_EXPAND_ACTION_TYPE = "expandAxisBreak"; var AXIS_BREAK_COLLAPSE_ACTION_TYPE = "collapseAxisBreak"; var AXIS_BREAK_TOGGLE_ACTION_TYPE = "toggleAxisBreak"; var AXIS_BREAK_CHANGED_EVENT_TYPE = "axisbreakchanged"; var expandAxisBreakActionInfo = { type: AXIS_BREAK_EXPAND_ACTION_TYPE, event: AXIS_BREAK_CHANGED_EVENT_TYPE, update: "update", refineEvent: refineAxisBreakChangeEvent }; var collapseAxisBreakActionInfo = { type: AXIS_BREAK_COLLAPSE_ACTION_TYPE, event: AXIS_BREAK_CHANGED_EVENT_TYPE, update: "update", refineEvent: refineAxisBreakChangeEvent }; var toggleAxisBreakActionInfo = { type: AXIS_BREAK_TOGGLE_ACTION_TYPE, event: AXIS_BREAK_CHANGED_EVENT_TYPE, update: "update", refineEvent: refineAxisBreakChangeEvent }; function refineAxisBreakChangeEvent(actionResultBatch, payload, ecModel, api) { var breaks = []; each$12(actionResultBatch, function(actionResult) { breaks = breaks.concat(actionResult.eventBreaks); }); return { eventContent: { breaks } }; } function registerAction$1(registers) { registers.registerAction(expandAxisBreakActionInfo, actionHandler); registers.registerAction(collapseAxisBreakActionInfo, actionHandler); registers.registerAction(toggleAxisBreakActionInfo, actionHandler); function actionHandler(payload, ecModel) { var eventBreaks = []; var finderResult = parseFinder$1(ecModel, payload); function dealUpdate(modelProp, indexProp) { each$12(finderResult[modelProp], function(axisModel) { each$12(axisModel.updateAxisBreaks(payload).breaks, function(item) { var _a; eventBreaks.push(defaults((_a = {}, _a[indexProp] = axisModel.componentIndex, _a), item)); }); }); } dealUpdate("xAxisModels", "xAxisIndex"); dealUpdate("yAxisModels", "yAxisIndex"); dealUpdate("singleAxisModels", "singleAxisIndex"); return { eventBreaks }; } } //#endregion //#region node_modules/echarts/lib/component/axis/AxisBuilder.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI$2 = Math.PI; var DEFAULT_CENTER_NAME_MARGIN_LEVELS = [ [ 1, 2, 1, 2 ], [ 5, 3, 5, 3 ], [ 8, 3, 8, 3 ] ]; var DEFAULT_ENDS_NAME_MARGIN_LEVELS = [ [ 0, 1, 0, 1 ], [ 0, 3, 0, 3 ], [ 0, 3, 0, 3 ] ]; var getLabelInner = makeInner(); var getTickInner = makeInner(); /** * A context shared by difference axisBuilder instances. * For cross-axes overlap resolving. * * Lifecycle constraint: should not over a pass of ec main process. * If model is changed, the context must be disposed. * * @see AxisBuilderLocalContext */ var AxisBuilderSharedContext = function() { function AxisBuilderSharedContext(resolveAxisNameOverlap) { /** * [CAUTION] Do not modify this data structure outside this class. */ this.recordMap = {}; this.resolveAxisNameOverlap = resolveAxisNameOverlap; } AxisBuilderSharedContext.prototype.ensureRecord = function(axisModel) { var dim = axisModel.axis.dim; var idx = axisModel.componentIndex; var recordMap = this.recordMap; var records = recordMap[dim] || (recordMap[dim] = []); return records[idx] || (records[idx] = { ready: {} }); }; return AxisBuilderSharedContext; }(); /** * [CAUTION] * 1. The call of this function must be after axisLabel overlap handlings * (such as `hideOverlap`, `fixMinMaxLabelShow`) and after transform calculating. * 2. Can be called multiple times and should be idempotent. */ function resetOverlapRecordToShared(cfg, shared, axisModel, labelLayoutList) { var axis = axisModel.axis; var record = shared.ensureRecord(axisModel); var labelInfoList = []; var stOccupiedRect; var useStOccupiedRect = hasAxisName(cfg.axisName) && isNameLocationCenter(cfg.nameLocation); each$12(labelLayoutList, function(layout) { var layoutInfo = ensureLabelLayoutWithGeometry(layout); if (!layoutInfo || layoutInfo.label.ignore) return; labelInfoList.push(layoutInfo); var transGroup = record.transGroup; if (useStOccupiedRect) { transGroup.transform ? invert(_stTransTmp, transGroup.transform) : identity(_stTransTmp); if (layoutInfo.transform) mul(_stTransTmp, _stTransTmp, layoutInfo.transform); BoundingRect.copy(_stLabelRectTmp, layoutInfo.localRect); _stLabelRectTmp.applyTransform(_stTransTmp); stOccupiedRect ? stOccupiedRect.union(_stLabelRectTmp) : BoundingRect.copy(stOccupiedRect = new BoundingRect(0, 0, 0, 0), _stLabelRectTmp); } }); var sortByDim = Math.abs(record.dirVec.x) > .1 ? "x" : "y"; var sortByValue = record.transGroup[sortByDim]; labelInfoList.sort(function(info1, info2) { return Math.abs(info1.label[sortByDim] - sortByValue) - Math.abs(info2.label[sortByDim] - sortByValue); }); if (useStOccupiedRect && stOccupiedRect) { var extent = axis.getExtent(); var axisLineX = Math.min(extent[0], extent[1]); var axisLineWidth = Math.max(extent[0], extent[1]) - axisLineX; stOccupiedRect.union(new BoundingRect(axisLineX, 0, axisLineWidth, 1)); } record.stOccupiedRect = stOccupiedRect; record.labelInfoList = labelInfoList; } var _stTransTmp = create$1(); var _stLabelRectTmp = new BoundingRect(0, 0, 0, 0); /** * The default resolver does not involve other axes within the same coordinate system. */ var resolveAxisNameOverlapDefault = function(cfg, ctx, axisModel, nameLayoutInfo, nameMoveDirVec, thisRecord) { if (isNameLocationCenter(cfg.nameLocation)) { var stOccupiedRect = thisRecord.stOccupiedRect; if (stOccupiedRect) moveIfOverlap(computeLabelGeometry2({}, stOccupiedRect, thisRecord.transGroup.transform), nameLayoutInfo, nameMoveDirVec); } else moveIfOverlapByLinearLabels(thisRecord.labelInfoList, thisRecord.dirVec, nameLayoutInfo, nameMoveDirVec); }; function moveIfOverlap(basedLayoutInfo, movableLayoutInfo, moveDirVec) { var mtv = new Point(); if (labelIntersect(basedLayoutInfo, movableLayoutInfo, mtv, { direction: Math.atan2(moveDirVec.y, moveDirVec.x), bidirectional: false, touchThreshold: .05 })) labelLayoutApplyTranslation(movableLayoutInfo, mtv); } function moveIfOverlapByLinearLabels(baseLayoutInfoList, baseDirVec, movableLayoutInfo, moveDirVec) { var sameDir = Point.dot(moveDirVec, baseDirVec) >= 0; for (var idx = 0, len = baseLayoutInfoList.length; idx < len; idx++) { var labelInfo = baseLayoutInfoList[sameDir ? idx : len - 1 - idx]; if (!labelInfo.label.ignore) moveIfOverlap(labelInfo, movableLayoutInfo, moveDirVec); } } /** * @caution * - Ensure it is called after the data processing stage finished. * - It might be called before `CahrtView#render`, sush as called at `CoordinateSystem#update`, * thus ensure the result the same whenever it is called. * * A builder for a straight-line axis. * * A final axis is translated and rotated from a "standard axis". * So opt.position and opt.rotation is required. * * A "standard axis" is the axis [0,0]-->[abs(axisExtent[1]-axisExtent[0]),0] * for example: [0,0]-->[50,0] */ var AxisBuilder = function() { /** * [CAUTION]: axisModel.axis.extent/scale must be ready to use. */ function AxisBuilder(axisModel, api, opt, shared) { this.group = new Group$3(); this._axisModel = axisModel; this._api = api; this._local = {}; this._shared = shared || new AxisBuilderSharedContext(resolveAxisNameOverlapDefault); this._resetCfgDetermined(opt); } /** * Regarding axis label related configurations, only the change of label.x/y is supported; other * changes are not necessary and not performant. To be specific, only `axis.position` * (and consequently `labelOffset`) and `axis.extent` can be changed, and assume everything in * `axisModel` are not changed. * Axis line related configurations can be changed since this method can only be called * before they are created. */ AxisBuilder.prototype.updateCfg = function(opt) { var ready = this._shared.ensureRecord(this._axisModel).ready; assert(!ready.axisLine && !ready.axisTickLabelDetermine); ready.axisName = ready.axisTickLabelEstimate = false; var raw = this._cfg.raw; raw.position = opt.position; raw.labelOffset = opt.labelOffset; this._resetCfgDetermined(raw); }; /** * [CAUTION] For debug usage. Never change it outside! */ AxisBuilder.prototype.__getRawCfg = function() { return this._cfg.raw; }; AxisBuilder.prototype._resetCfgDetermined = function(raw) { var axisModel = this._axisModel; var axisModelDefaultOption = axisModel.getDefaultOption ? axisModel.getDefaultOption() : {}; var axisName = retrieve2(raw.axisName, axisModel.get("name")); var nameMoveOverlapOption = axisModel.get("nameMoveOverlap"); if (nameMoveOverlapOption == null || nameMoveOverlapOption === "auto") nameMoveOverlapOption = retrieve2(raw.defaultNameMoveOverlap, true); var cfg = { raw, position: raw.position, rotation: raw.rotation, nameDirection: retrieve2(raw.nameDirection, 1), tickDirection: retrieve2(raw.tickDirection, 1), labelDirection: retrieve2(raw.labelDirection, 1), labelOffset: retrieve2(raw.labelOffset, 0), silent: retrieve2(raw.silent, true), axisName, nameLocation: retrieve3(axisModel.get("nameLocation"), axisModelDefaultOption.nameLocation, "end"), shouldNameMoveOverlap: hasAxisName(axisName) && nameMoveOverlapOption, optionHideOverlap: axisModel.get(["axisLabel", "hideOverlap"]), showMinorTicks: axisModel.get(["minorTick", "show"]) }; assert(cfg.position != null); assert(cfg.rotation != null); this._cfg = cfg; var transformGroup = new Group$3({ x: cfg.position[0], y: cfg.position[1], rotation: cfg.rotation }); transformGroup.updateTransform(); this._transformGroup = transformGroup; var record = this._shared.ensureRecord(axisModel); record.transGroup = this._transformGroup; record.dirVec = new Point(Math.cos(-cfg.rotation), Math.sin(-cfg.rotation)); }; AxisBuilder.prototype.build = function(axisPartNameMap, extraParams) { var _this = this; if (!axisPartNameMap) axisPartNameMap = { axisLine: true, axisTickLabelEstimate: false, axisTickLabelDetermine: true, axisName: true }; each$12(AXIS_BUILDER_AXIS_PART_NAMES, function(partName) { if (axisPartNameMap[partName]) builders[partName](_this._cfg, _this._local, _this._shared, _this._axisModel, _this.group, _this._transformGroup, _this._api, extraParams || {}); }); return this; }; /** * Currently only get text align/verticalAlign by rotation. * NO `position` is involved, otherwise it have to be performed for each `updateAxisLabelChangableProps`. */ AxisBuilder.innerTextLayout = function(axisRotation, textRotation, direction) { var rotationDiff = remRadian(textRotation - axisRotation); var textAlign; var textVerticalAlign; if (isRadianAroundZero(rotationDiff)) { textVerticalAlign = direction > 0 ? "top" : "bottom"; textAlign = "center"; } else if (isRadianAroundZero(rotationDiff - PI$2)) { textVerticalAlign = direction > 0 ? "bottom" : "top"; textAlign = "center"; } else { textVerticalAlign = "middle"; if (rotationDiff > 0 && rotationDiff < PI$2) textAlign = direction > 0 ? "right" : "left"; else textAlign = direction > 0 ? "left" : "right"; } return { rotation: rotationDiff, textAlign, textVerticalAlign }; }; AxisBuilder.makeAxisEventDataBase = function(axisModel) { var eventData = { componentType: axisModel.mainType, componentIndex: axisModel.componentIndex }; eventData[axisModel.mainType + "Index"] = axisModel.componentIndex; return eventData; }; AxisBuilder.isLabelSilent = function(axisModel) { var tooltipOpt = axisModel.get("tooltip"); return axisModel.get("silent") || !(axisModel.get("triggerEvent") || tooltipOpt && tooltipOpt.show); }; return AxisBuilder; }(); var AXIS_BUILDER_AXIS_PART_NAMES = [ "axisLine", "axisTickLabelEstimate", "axisTickLabelDetermine", "axisName" ]; var builders = { axisLine: function(cfg, local, shared, axisModel, group, transformGroup, api) { var ready = shared.ensureRecord(axisModel).ready; assert(!ready.axisLine); ready.axisLine = true; var shown = axisModel.get(["axisLine", "show"]); if (shown === "auto") { shown = true; if (cfg.raw.axisLineAutoShow != null) shown = !!cfg.raw.axisLineAutoShow; } if (!shown) return; var extent = axisModel.axis.getExtent(); var matrix = transformGroup.transform; var pt1 = [extent[0], 0]; var pt2 = [extent[1], 0]; var inverse = pt1[0] > pt2[0]; if (matrix) { applyTransform$1(pt1, pt1, matrix); applyTransform$1(pt2, pt2, matrix); } var lineStyle = extend({ lineCap: "round" }, axisModel.getModel(["axisLine", "lineStyle"]).getLineStyle()); var pathBaseProp = { strokeContainThreshold: cfg.raw.strokeContainThreshold || 5, silent: true, z2: 1, style: lineStyle }; if (axisModel.get(["axisLine", "breakLine"]) && hasBreaks(axisModel.axis.scale)) getAxisBreakHelper().buildAxisBreakLine(axisModel, group, transformGroup, pathBaseProp); else { var line = new Line$1(extend({ shape: { x1: pt1[0], y1: pt1[1], x2: pt2[0], y2: pt2[1] } }, pathBaseProp)); subPixelOptimizeLine(line.shape, line.style.lineWidth); line.anid = "line"; group.add(line); } var arrows = axisModel.get(["axisLine", "symbol"]); if (arrows != null) { var arrowSize = axisModel.get(["axisLine", "symbolSize"]); if (isString(arrows)) arrows = [arrows, arrows]; if (isString(arrowSize) || isNumber(arrowSize)) arrowSize = [arrowSize, arrowSize]; var arrowOffset = normalizeSymbolOffset(axisModel.get(["axisLine", "symbolOffset"]) || 0, arrowSize); var symbolWidth_1 = arrowSize[0]; var symbolHeight_1 = arrowSize[1]; each$12([{ rotate: cfg.rotation + Math.PI / 2, offset: arrowOffset[0], r: 0 }, { rotate: cfg.rotation - Math.PI / 2, offset: arrowOffset[1], r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0]) + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1])) }], function(point, index) { if (arrows[index] !== "none" && arrows[index] != null) { var symbol = createSymbol$1(arrows[index], -symbolWidth_1 / 2, -symbolHeight_1 / 2, symbolWidth_1, symbolHeight_1, lineStyle.stroke, true); var r = point.r + point.offset; var pt = inverse ? pt2 : pt1; symbol.attr({ rotation: point.rotate, x: pt[0] + r * Math.cos(cfg.rotation), y: pt[1] - r * Math.sin(cfg.rotation), silent: true, z2: 11 }); group.add(symbol); } }); } }, /** * [CAUTION] This method can be called multiple times, following the change due to `resetCfg` called * in size measurement. Thus this method should be idempotent, and should be performant. */ axisTickLabelEstimate: function(cfg, local, shared, axisModel, group, transformGroup, api, extraParams) { var ready = shared.ensureRecord(axisModel).ready; assert(!ready.axisTickLabelDetermine); ready.axisTickLabelEstimate = true; if (dealLastTickLabelResultReusable(local, group, extraParams)) layOutAxisTickLabel(cfg, local, shared, axisModel, group, transformGroup, api, AxisTickLabelComputingKind.estimate); }, /** * Finish axis tick label build. * Can be only called once. */ axisTickLabelDetermine: function(cfg, local, shared, axisModel, group, transformGroup, api, extraParams) { var ready = shared.ensureRecord(axisModel).ready; ready.axisTickLabelDetermine = true; if (dealLastTickLabelResultReusable(local, group, extraParams)) layOutAxisTickLabel(cfg, local, shared, axisModel, group, transformGroup, api, AxisTickLabelComputingKind.determine); var ticksEls = buildAxisMajorTicks(cfg, group, transformGroup, axisModel); syncLabelIgnoreToMajorTicks(cfg, local.labelLayoutList, ticksEls); buildAxisMinorTicks(cfg, group, transformGroup, axisModel, cfg.tickDirection); }, /** * [CAUTION] This method can be called multiple times, following the change due to `resetCfg` called * in size measurement. Thus this method should be idempotent, and should be performant. */ axisName: function(cfg, local, shared, axisModel, group, transformGroup, api, extraParams) { var sharedRecord = shared.ensureRecord(axisModel); var ready = sharedRecord.ready; assert(ready.axisTickLabelEstimate || ready.axisTickLabelDetermine); ready.axisName = true; if (local.nameEl) { group.remove(local.nameEl); local.nameEl = sharedRecord.nameLayout = sharedRecord.nameLocation = null; } var name = cfg.axisName; if (!hasAxisName(name)) return; var nameLocation = cfg.nameLocation; var nameDirection = cfg.nameDirection; var textStyleModel = axisModel.getModel("nameTextStyle"); var gap = axisModel.get("nameGap") || 0; var extent = axisModel.axis.getExtent(); var gapStartEndSignal = axisModel.axis.inverse ? -1 : 1; var pos = new Point(0, 0); var nameMoveDirVec = new Point(0, 0); if (nameLocation === "start") { pos.x = extent[0] - gapStartEndSignal * gap; nameMoveDirVec.x = -gapStartEndSignal; } else if (nameLocation === "end") { pos.x = extent[1] + gapStartEndSignal * gap; nameMoveDirVec.x = gapStartEndSignal; } else { pos.x = (extent[0] + extent[1]) / 2; pos.y = cfg.labelOffset + nameDirection * gap; nameMoveDirVec.y = nameDirection; } var mt = create$1(); nameMoveDirVec.transform(rotate(mt, mt, cfg.rotation)); var nameRotation = axisModel.get("nameRotate"); if (nameRotation != null) nameRotation = nameRotation * PI$2 / 180; var labelLayout; var axisNameAvailableWidth; if (isNameLocationCenter(nameLocation)) labelLayout = AxisBuilder.innerTextLayout(cfg.rotation, nameRotation != null ? nameRotation : cfg.rotation, nameDirection); else { labelLayout = endTextLayout(cfg.rotation, nameLocation, nameRotation || 0, extent); axisNameAvailableWidth = cfg.raw.axisNameAvailableWidth; if (axisNameAvailableWidth != null) { axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout.rotation)); !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null); } } var textFont = textStyleModel.getFont(); var truncateOpt = axisModel.get("nameTruncate", true) || {}; var ellipsis = truncateOpt.ellipsis; var maxWidth = retrieve(cfg.raw.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth); var nameMarginLevel = extraParams.nameMarginLevel || 0; var textEl = new ZRText({ x: pos.x, y: pos.y, rotation: labelLayout.rotation, silent: AxisBuilder.isLabelSilent(axisModel), style: createTextStyle$1(textStyleModel, { text: name, font: textFont, overflow: "truncate", width: maxWidth, ellipsis, fill: textStyleModel.getTextColor() || axisModel.get([ "axisLine", "lineStyle", "color" ]), align: textStyleModel.get("align") || labelLayout.textAlign, verticalAlign: textStyleModel.get("verticalAlign") || labelLayout.textVerticalAlign }), z2: 1 }); setTooltipConfig({ el: textEl, componentModel: axisModel, itemName: name }); textEl.__fullText = name; textEl.anid = "name"; if (axisModel.get("triggerEvent")) { var eventData = AxisBuilder.makeAxisEventDataBase(axisModel); eventData.targetType = "axisName"; eventData.name = name; getECData(textEl).eventData = eventData; } transformGroup.add(textEl); textEl.updateTransform(); local.nameEl = textEl; var nameLayout = sharedRecord.nameLayout = ensureLabelLayoutWithGeometry({ label: textEl, priority: textEl.z2, defaultAttr: { ignore: textEl.ignore }, marginDefault: isNameLocationCenter(nameLocation) ? DEFAULT_CENTER_NAME_MARGIN_LEVELS[nameMarginLevel] : DEFAULT_ENDS_NAME_MARGIN_LEVELS[nameMarginLevel] }); sharedRecord.nameLocation = nameLocation; group.add(textEl); textEl.decomposeTransform(); if (cfg.shouldNameMoveOverlap && nameLayout) { var record = shared.ensureRecord(axisModel); assert(record.labelInfoList); shared.resolveAxisNameOverlap(cfg, shared, axisModel, nameLayout, nameMoveDirVec, record); } } }; function layOutAxisTickLabel(cfg, local, shared, axisModel, group, transformGroup, api, kind) { if (!axisLabelBuildResultExists(local)) buildAxisLabel(cfg, local, group, kind, axisModel, api); var labelLayoutList = local.labelLayoutList; updateAxisLabelChangableProps(cfg, axisModel, labelLayoutList, transformGroup); adjustBreakLabels(axisModel, cfg.rotation, labelLayoutList); var optionHideOverlap = cfg.optionHideOverlap; fixMinMaxLabelShow(axisModel, labelLayoutList, optionHideOverlap); if (optionHideOverlap) hideOverlap(filter(labelLayoutList, function(layout) { return layout && !layout.label.ignore; })); resetOverlapRecordToShared(cfg, shared, axisModel, labelLayoutList); } function endTextLayout(rotation, textPosition, textRotate, extent) { var rotationDiff = remRadian(textRotate - rotation); var textAlign; var textVerticalAlign; var inverse = extent[0] > extent[1]; var onLeft = textPosition === "start" && !inverse || textPosition !== "start" && inverse; if (isRadianAroundZero(rotationDiff - PI$2 / 2)) { textVerticalAlign = onLeft ? "bottom" : "top"; textAlign = "center"; } else if (isRadianAroundZero(rotationDiff - PI$2 * 1.5)) { textVerticalAlign = onLeft ? "top" : "bottom"; textAlign = "center"; } else { textVerticalAlign = "middle"; if (rotationDiff < PI$2 * 1.5 && rotationDiff > PI$2 / 2) textAlign = onLeft ? "left" : "right"; else textAlign = onLeft ? "right" : "left"; } return { rotation: rotationDiff, textAlign, textVerticalAlign }; } /** * Assume `labelLayoutList` has no `label.ignore: true`. * Assume `labelLayoutList` have been sorted by value ascending order. */ function fixMinMaxLabelShow(axisModel, labelLayoutList, optionHideOverlap) { var axis = axisModel.axis; var customValuesOption = axisModel.get(["axisLabel", "customValues"]); if (shouldShowAllLabels(axis)) return; function deal(showMinMaxLabelOption, outmostLabelIdx, innerLabelIdx) { var outmostLabelLayout = ensureLabelLayoutWithGeometry(labelLayoutList[outmostLabelIdx]); var innerLabelLayout = ensureLabelLayoutWithGeometry(labelLayoutList[innerLabelIdx]); var scale = axis.scale; if (!outmostLabelLayout || !innerLabelLayout) return; if (showMinMaxLabelOption == null) { if (!optionHideOverlap && customValuesOption) return; var tick = getLabelInner(outmostLabelLayout.label).labelInfo.tick; if (isTimeScale(scale) && tick.notNice || isOrdinalScale(scale) && tick.offInterval) { ignoreEl(outmostLabelLayout.label); return; } } if (showMinMaxLabelOption === false || outmostLabelLayout.suggestIgnore) { ignoreEl(outmostLabelLayout.label); return; } if (innerLabelLayout.suggestIgnore) { ignoreEl(innerLabelLayout.label); return; } var touchThreshold = .1; if (!optionHideOverlap) { var marginForce = [ 0, 0, 0, 0 ]; outmostLabelLayout = newLabelLayoutWithGeometry({ marginForce }, outmostLabelLayout); innerLabelLayout = newLabelLayoutWithGeometry({ marginForce }, innerLabelLayout); } if (labelIntersect(outmostLabelLayout, innerLabelLayout, null, { touchThreshold })) { if (showMinMaxLabelOption) ignoreEl(innerLabelLayout.label); else ignoreEl(outmostLabelLayout.label); } } var showMinLabelOption = axisModel.get(["axisLabel", "showMinLabel"]); var showMaxLabelOption = axisModel.get(["axisLabel", "showMaxLabel"]); var labelsLen = labelLayoutList.length; deal(showMinLabelOption, 0, 1); deal(showMaxLabelOption, labelsLen - 1, labelsLen - 2); } function syncLabelIgnoreToMajorTicks(cfg, labelLayoutList, tickEls) { if (cfg.showMinorTicks) return; each$12(labelLayoutList, function(labelLayout) { if (labelLayout && labelLayout.label.ignore) for (var idx = 0; idx < tickEls.length; idx++) { var tickEl = tickEls[idx]; var tickInner = getTickInner(tickEl); var labelInner = getLabelInner(labelLayout.label); if (tickInner.tickValue != null && !tickInner.onBand && tickInner.tickValue === labelInner.labelInfo.tick.value) { ignoreEl(tickEl); return; } } }); } function ignoreEl(el) { el && (el.ignore = true); } function createTicks(ticksCoords, tickTransform, tickEndCoord, tickLineStyle, anidPrefix) { var tickEls = []; var pt1 = []; var pt2 = []; for (var i = 0; i < ticksCoords.length; i++) { var tickCoord = ticksCoords[i].coord; pt1[0] = tickCoord; pt1[1] = 0; pt2[0] = tickCoord; pt2[1] = tickEndCoord; if (tickTransform) { applyTransform$1(pt1, pt1, tickTransform); applyTransform$1(pt2, pt2, tickTransform); } var tickEl = new Line$1({ shape: { x1: pt1[0], y1: pt1[1], x2: pt2[0], y2: pt2[1] }, style: tickLineStyle, z2: 2, autoBatch: true, silent: true }); subPixelOptimizeLine(tickEl.shape, tickEl.style.lineWidth); tickEl.anid = anidPrefix + "_" + ticksCoords[i].tickValue; tickEls.push(tickEl); var inner = getTickInner(tickEl); inner.onBand = !!ticksCoords[i].onBand; inner.tickValue = ticksCoords[i].tickValue; } return tickEls; } function buildAxisMajorTicks(cfg, group, transformGroup, axisModel) { var axis = axisModel.axis; var tickModel = axisModel.getModel("axisTick"); var shown = tickModel.get("show"); if (shown === "auto") { shown = true; if (cfg.raw.axisTickAutoShow != null) shown = !!cfg.raw.axisTickAutoShow; } if (!shown || axis.scale.isBlank()) return []; var lineStyleModel = tickModel.getModel("lineStyle"); var tickEndCoord = cfg.tickDirection * tickModel.get("length"); var ticksEls = createTicks(axis.getTicksCoords(), transformGroup.transform, tickEndCoord, defaults(lineStyleModel.getLineStyle(), { stroke: axisModel.get([ "axisLine", "lineStyle", "color" ]) }), "ticks"); for (var i = 0; i < ticksEls.length; i++) group.add(ticksEls[i]); return ticksEls; } function buildAxisMinorTicks(cfg, group, transformGroup, axisModel, tickDirection) { var axis = axisModel.axis; var minorTickModel = axisModel.getModel("minorTick"); if (!cfg.showMinorTicks || axis.scale.isBlank()) return; var minorTicksCoords = axis.getMinorTicksCoords(); if (!minorTicksCoords.length) return; var lineStyleModel = minorTickModel.getModel("lineStyle"); var tickEndCoord = tickDirection * minorTickModel.get("length"); var minorTickLineStyle = defaults(lineStyleModel.getLineStyle(), defaults(axisModel.getModel("axisTick").getLineStyle(), { stroke: axisModel.get([ "axisLine", "lineStyle", "color" ]) })); for (var i = 0; i < minorTicksCoords.length; i++) { var minorTicksEls = createTicks(minorTicksCoords[i], transformGroup.transform, tickEndCoord, minorTickLineStyle, "minorticks_" + i); for (var k = 0; k < minorTicksEls.length; k++) group.add(minorTicksEls[k]); } } function dealLastTickLabelResultReusable(local, group, extraParams) { if (axisLabelBuildResultExists(local)) { var axisLabelsCreationContext = local.axisLabelsCreationContext; assert(local.labelGroup && axisLabelsCreationContext); var noPxChangeTryDetermine = axisLabelsCreationContext.out.noPxChangeTryDetermine; if (extraParams.noPxChange) { var canDetermine = true; for (var idx = 0; idx < noPxChangeTryDetermine.length; idx++) canDetermine = canDetermine && noPxChangeTryDetermine[idx](); if (canDetermine) return false; } if (noPxChangeTryDetermine.length) { group.remove(local.labelGroup); axisLabelBuildResultSet(local, null, null, null); } } return true; } function buildAxisLabel(cfg, local, group, kind, axisModel, api) { var axis = axisModel.axis; var show = retrieve(cfg.raw.axisLabelShow, axisModel.get(["axisLabel", "show"])); var labelGroup = new Group$3(); group.add(labelGroup); var axisLabelCreationCtx = createAxisLabelsComputingContext(kind); if (!show || axis.scale.isBlank()) { axisLabelBuildResultSet(local, [], labelGroup, axisLabelCreationCtx); return; } var labelModel = axisModel.getModel("axisLabel"); var labels = axis.getViewLabels(axisLabelCreationCtx); var labelRotation = (retrieve(cfg.raw.labelRotate, labelModel.get("rotate")) || 0) * PI$2 / 180; var labelLayout = AxisBuilder.innerTextLayout(cfg.rotation, labelRotation, cfg.labelDirection); var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true); var labelEls = []; var triggerEvent = axisModel.get("triggerEvent"); var z2Min = Infinity; var z2Max = -Infinity; each$12(labels, function(labelItem, index) { var _a; var labelItemTick = labelItem.tick; var formattedLabel = labelItem.formattedLabel; var rawLabel = labelItem.rawLabel; var itemLabelModel = labelModel; var tickValue = getTickValueOutermost(axis.scale, labelItemTick); if (rawCategoryData && rawCategoryData[tickValue]) { var rawCategoryItem = rawCategoryData[tickValue]; if (isObject$3(rawCategoryItem) && rawCategoryItem.textStyle) itemLabelModel = new Model(rawCategoryItem.textStyle, labelModel, axisModel.ecModel); } var textColor = itemLabelModel.getTextColor() || axisModel.get([ "axisLine", "lineStyle", "color" ]); var align = itemLabelModel.getShallow("align", true) || labelLayout.textAlign; var alignMin = retrieve2(itemLabelModel.getShallow("alignMinLabel", true), align); var alignMax = retrieve2(itemLabelModel.getShallow("alignMaxLabel", true), align); var verticalAlign = itemLabelModel.getShallow("verticalAlign", true) || itemLabelModel.getShallow("baseline", true) || labelLayout.textVerticalAlign; var verticalAlignMin = retrieve2(itemLabelModel.getShallow("verticalAlignMinLabel", true), verticalAlign); var verticalAlignMax = retrieve2(itemLabelModel.getShallow("verticalAlignMaxLabel", true), verticalAlign); var z2 = 10 + (((_a = labelItemTick.time) === null || _a === void 0 ? void 0 : _a.level) || 0); z2Min = Math.min(z2Min, z2); z2Max = Math.max(z2Max, z2); var textEl = new ZRText({ x: 0, y: 0, rotation: 0, silent: AxisBuilder.isLabelSilent(axisModel), z2, style: createTextStyle$1(itemLabelModel, { text: formattedLabel, align: index === 0 ? alignMin : index === labels.length - 1 ? alignMax : align, verticalAlign: index === 0 ? verticalAlignMin : index === labels.length - 1 ? verticalAlignMax : verticalAlign, fill: isFunction(textColor) ? textColor(axis.type === "category" ? rawLabel : axis.type === "value" ? tickValue + "" : tickValue, index) : textColor }) }); textEl.anid = "label_" + tickValue; var inner = getLabelInner(textEl); inner.labelInfo = labelItem; inner.layoutRotation = labelLayout.rotation; setTooltipConfig({ el: textEl, componentModel: axisModel, itemName: formattedLabel, formatterParamsExtra: { isTruncated: function() { return textEl.isTruncated; }, value: rawLabel, tickIndex: index } }); if (triggerEvent) { var eventData = AxisBuilder.makeAxisEventDataBase(axisModel); eventData.targetType = "axisLabel"; eventData.value = rawLabel; eventData.tickIndex = index; var labelItemTickBreak = labelItem.tick["break"]; if (labelItemTickBreak) { var labelItemTickBreakParsedBreak = labelItemTickBreak.parsedBreak; eventData["break"] = { start: labelItemTickBreakParsedBreak.vmin, end: labelItemTickBreakParsedBreak.vmax }; } if (axis.type === "category") eventData.dataIndex = tickValue; getECData(textEl).eventData = eventData; if (labelItemTickBreak) addBreakEventHandler(axisModel, api, textEl, labelItemTickBreak); } labelEls.push(textEl); labelGroup.add(textEl); }); axisLabelBuildResultSet(local, map$1(labelEls, function(label) { return { label, priority: getLabelInner(label).labelInfo.tick["break"] ? label.z2 + (z2Max - z2Min + 1) : label.z2, defaultAttr: { ignore: label.ignore } }; }), labelGroup, axisLabelCreationCtx); } function axisLabelBuildResultExists(local) { return !!local.labelLayoutList; } function axisLabelBuildResultSet(local, labelLayoutList, labelGroup, axisLabelsCreationContext) { local.labelLayoutList = labelLayoutList; local.labelGroup = labelGroup; local.axisLabelsCreationContext = axisLabelsCreationContext; } function updateAxisLabelChangableProps(cfg, axisModel, labelLayoutList, transformGroup) { var labelMargin = axisModel.get(["axisLabel", "margin"]); each$12(labelLayoutList, function(layout, idx) { var geometry = ensureLabelLayoutWithGeometry(layout); if (!geometry) return; var labelEl = geometry.label; var inner = getLabelInner(labelEl); geometry.suggestIgnore = labelEl.ignore; labelEl.ignore = false; copyTransform(_tmpLayoutEl, _tmpLayoutElReset); var axis = axisModel.axis; _tmpLayoutEl.x = axis.dataToCoord(getTickValueOutermost(axis.scale, inner.labelInfo.tick)); _tmpLayoutEl.y = cfg.labelOffset + cfg.labelDirection * labelMargin; _tmpLayoutEl.rotation = inner.layoutRotation; transformGroup.add(_tmpLayoutEl); _tmpLayoutEl.updateTransform(); transformGroup.remove(_tmpLayoutEl); _tmpLayoutEl.decomposeTransform(); copyTransform(labelEl, _tmpLayoutEl); labelEl.markRedraw(); setLabelLayoutDirty(geometry, true); ensureLabelLayoutWithGeometry(geometry); }); } var _tmpLayoutEl = new Rect$2(); var _tmpLayoutElReset = new Rect$2(); function hasAxisName(axisName) { return !!axisName; } function addBreakEventHandler(axisModel, api, textEl, visualBreak) { textEl.on("click", function(params) { var payload = { type: AXIS_BREAK_EXPAND_ACTION_TYPE, breaks: [{ start: visualBreak.parsedBreak.breakOption.start, end: visualBreak.parsedBreak.breakOption.end }] }; payload[axisModel.axis.dim + "AxisIndex"] = axisModel.componentIndex; api.dispatchAction(payload); }); } function adjustBreakLabels(axisModel, axisRotation, labelLayoutList) { var scaleBreakHelper = getScaleBreakHelper(); if (!scaleBreakHelper) return; var breakLabelIndexPairs = scaleBreakHelper.retrieveAxisBreakPairs(labelLayoutList, function(layoutInfo) { return layoutInfo && getLabelInner(layoutInfo.label).labelInfo.tick["break"]; }, true); var moveOverlap = axisModel.get(["breakLabelLayout", "moveOverlap"], true); if (moveOverlap === true || moveOverlap === "auto") each$12(breakLabelIndexPairs, function(idxPair) { getAxisBreakHelper().adjustBreakLabelPair(axisModel.axis.inverse, axisRotation, [ensureLabelLayoutWithGeometry(labelLayoutList[idxPair[0]]), ensureLabelLayoutWithGeometry(labelLayoutList[idxPair[1]])]); }); } //#endregion //#region node_modules/echarts/lib/coord/cartesian/cartesianAxisHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * [__CAUTION__] * MUST guarantee: if only the input `rect` and `axis.extent` changed, * only `layout.position` changes. * This character is replied on `grid.contain` calculation in `AxisBuilder`. * @see updateCartesianAxisViewCommonPartBuilder * * Can only be called after coordinate system creation stage. * (Can be called before coordinate system update stage). */ function layout$1(rect, axisModel, opt) { opt = opt || {}; var axis = axisModel.axis; var layout = {}; var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0]; var rawAxisPosition = axis.position; var axisPosition = otherAxisOnZeroOf ? "onZero" : rawAxisPosition; var axisDim = axis.dim; var rectBound = [ rect.x, rect.x + rect.width, rect.y, rect.y + rect.height ]; var idx = { left: 0, right: 1, top: 0, bottom: 1, onZero: 2 }; var axisOffset = axisModel.get("offset") || 0; var posBound = axisDim === "x" ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [rectBound[0] - axisOffset, rectBound[1] + axisOffset]; if (otherAxisOnZeroOf) { var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0)); posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]); } layout.position = [axisDim === "y" ? posBound[idx[axisPosition]] : rectBound[0], axisDim === "x" ? posBound[idx[axisPosition]] : rectBound[3]]; layout.rotation = Math.PI / 2 * (axisDim === "x" ? 0 : 1); layout.labelDirection = layout.tickDirection = layout.nameDirection = { top: -1, bottom: 1, left: -1, right: 1 }[rawAxisPosition]; layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0; if (axisModel.get(["axisTick", "inside"])) layout.tickDirection = -layout.tickDirection; if (retrieve(opt.labelInside, axisModel.get(["axisLabel", "inside"]))) layout.labelDirection = -layout.labelDirection; var labelRotate = axisModel.get(["axisLabel", "rotate"]); layout.labelRotate = axisPosition === "top" ? -labelRotate : labelRotate; layout.z2 = 1; return layout; } /** * Note: If pie (or other similar series) use cartesian2d, here * option `seriesModel.get('coordinateSystem') === 'cartesian2d'` * and `seriesModel.coordinateSystem !== cartesian2dCoordSysInstance` * and `seriesModel.boxCoordinateSystem === cartesian2dCoordSysInstance`, * the logic below is probably wrong, therefore skip it temporarily. */ function isCartesian2DInjectedAsDataCoordSys(seriesModel) { return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === "cartesian2d"; } function findAxisModels(seriesModel) { var axisModelMap = { xAxisModel: null, yAxisModel: null }; each$12(axisModelMap, function(v, key) { var axisType = key.replace(/Model$/, ""); var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0]; if (!axisModel) throw new Error(axisType + " \"" + retrieve3(seriesModel.get(axisType + "Index"), seriesModel.get(axisType + "Id"), 0) + "\" not found"); axisModelMap[key] = axisModel; }); return axisModelMap; } function createCartesianAxisViewCommonPartBuilder(gridRect, cartesians, axisModel, api, ctx, defaultNameMoveOverlap) { var layoutResult = layout$1(gridRect, axisModel); var axisLineAutoShow = false; var axisTickAutoShow = false; for (var i = 0; i < cartesians.length; i++) if (isIntervalOrLogScale(cartesians[i].getOtherAxis(axisModel.axis).scale)) { axisLineAutoShow = axisTickAutoShow = true; if (axisModel.axis.type === "category" && axisModel.axis.onBand) axisTickAutoShow = false; } layoutResult.axisLineAutoShow = axisLineAutoShow; layoutResult.axisTickAutoShow = axisTickAutoShow; layoutResult.defaultNameMoveOverlap = defaultNameMoveOverlap; return new AxisBuilder(axisModel, api, layoutResult, ctx); } function updateCartesianAxisViewCommonPartBuilder(axisBuilder, gridRect, axisModel) { var newRaw = layout$1(gridRect, axisModel); var oldRaw_1 = axisBuilder.__getRawCfg(); each$12(keys(newRaw), function(prop) { if (prop !== "position" && prop !== "labelOffset") assert(newRaw[prop] === oldRaw_1[prop]); }); axisBuilder.updateCfg(newRaw); } function getCartesianAxisHashKey(axis) { return axis.dim + "_" + axis.index; } //#endregion //#region node_modules/echarts/lib/coord/axisStatisticsMetricsImpl.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function registerMetricImplLiPosMinGap() { registerMetricImpl("liPosMinGap", metricLiPosMinGapImpl); } function metricLiPosMinGapImpl(ecModel, perKeyPerAxis, ecPreparePerKeyPerAxis) { var newSerUids = createHashMap(); var ecPrepareSerUids = ecPreparePerKeyPerAxis.serUids; var ecPrepareLiPosMinGap = ecPreparePerKeyPerAxis.liPosMinGap; var ecPrepareCacheMiss; var axis = perKeyPerAxis.axis; var scale = axis.scale; var needTransform = scale.needTransform(); var filter = scale.getFilter ? scale.getFilter() : null; var filterParsed = parseSanitizationFilter(filter); function eachSeries(cb) { eachSeriesDealForAxisStat(ecModel, perKeyPerAxis.sers, function(seriesModel) { var rawData = seriesModel.getRawData(); var dimStoreIdx = rawData.getDimensionIndex(rawData.mapDimension(axis.dim)); if (dimStoreIdx >= 0) cb(dimStoreIdx, seriesModel, rawData.getStore()); }); } var bufferCapacity = 0; eachSeries(function(dimStoreIdx, seriesModel, rawDataStore) { newSerUids.set(seriesModel.uid, 1); if (!ecPrepareSerUids || !ecPrepareSerUids.hasKey(seriesModel.uid)) ecPrepareCacheMiss = true; bufferCapacity += rawDataStore.count(); }); if (!ecPrepareSerUids || ecPrepareSerUids.keys().length !== newSerUids.keys().length) ecPrepareCacheMiss = true; if (!ecPrepareCacheMiss && ecPrepareLiPosMinGap != null) { perKeyPerAxis.liPosMinGap = ecPrepareLiPosMinGap; return; } tryEnsureTypedArray(tmpValueBuffer, bufferCapacity); var writeIdx = 0; eachSeries(function(dimStoreIdx, seriesModel, store) { for (var i = 0, cnt = store.count(); i < cnt; ++i) { var val = store.get(dimStoreIdx, i); if (isFinite(val) && (!filter || passesSanitizationFilter(filterParsed, val))) { if (needTransform) val = scale.transformIn(val, null); tmpValueBuffer.arr[writeIdx++] = val; } } }); var tmpValueBufferView = tmpValueBuffer.typed ? tmpValueBuffer.arr.subarray(0, writeIdx) : (tmpValueBuffer.arr.length = writeIdx, tmpValueBuffer.arr); if (tmpValueBuffer.typed) tmpValueBufferView.sort(); else asc$1(tmpValueBufferView); var min = Infinity; for (var j = 1; j < writeIdx; ++j) { var delta = tmpValueBufferView[j] - tmpValueBufferView[j - 1]; if (delta > 0 && delta < min) min = delta; } ecPreparePerKeyPerAxis.liPosMinGap = perKeyPerAxis.liPosMinGap = isNullableNumberFinite(min) ? min : writeIdx > 0 ? -2 : -1; ecPreparePerKeyPerAxis.serUids = newSerUids; } var tmpValueBuffer = tryEnsureTypedArray({ ctor: Float64ArrayCtor }, 50); //#endregion //#region node_modules/echarts/lib/chart/helper/axisSnippets.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Require `requireAxisStatistics`. * * Simply expand `Scale` extent by half bandWidth. * Do nothing if an `OrdinalScale` has `boundaryGap: true`. */ function createBandWidthBasedAxisContainShapeHandler(axisStatKey) { return function(axis, ecModel) { var bandWidthResult = calcBandWidth(axis, { fromStat: { key: axisStatKey } }); if (isNullableNumberFinite(bandWidthResult.w2)) return [-bandWidthResult.w2 / 2, bandWidthResult.w2 / 2]; }; } /** * A pre-built `makeAxisStatKey`. * See `makeAxisStatKey2`. Use two functions rather than a optional parameter to impose checking. */ function makeAxisStatKey(seriesType) { return seriesType + "|&"; } function makeAxisStatKey2(seriesType, coordSysType) { return seriesType + "|&" + coordSysType; } /** * A pre-built `getMetrics`. */ function createMetricsNonOrdinalLinearPositiveMinGap(axis) { registerMetricImplLiPosMinGap(); return { liPosMinGap: !isOrdinalScale(axis.scale) }; } //#endregion //#region node_modules/echarts/lib/layout/barCommon.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_PICTORIAL_BAR = "pictorialBar"; function requireAxisStatisticsForBaseBar(registers, axisStatKey, seriesType, coordSysType) { requireAxisStatistics(registers, { key: axisStatKey, seriesType, coordSysType, getMetrics: createMetricsNonOrdinalLinearPositiveMinGap }); } function getStartValue(baseAxis) { var val = baseAxis.scale.rawExtentInfo.makeRenderInfo().startValue; assert(isNullableNumberFinite(val)); return val; } //#endregion //#region node_modules/echarts/lib/coord/cartesian/GridModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var OUTER_BOUNDS_DEFAULT = { left: 0, right: 0, top: 0, bottom: 0 }; var OUTER_BOUNDS_CLAMP_DEFAULT = ["25%", "25%"]; var COORD_SYS_TYPE_CARTESIAN_2D = "cartesian2d"; var GridModel = function(_super) { __extends(GridModel, _super); function GridModel() { return _super !== null && _super.apply(this, arguments) || this; } GridModel.prototype.mergeDefaultAndTheme = function(option, ecModel) { var outerBoundsCp = getLayoutParams(option.outerBounds); _super.prototype.mergeDefaultAndTheme.apply(this, arguments); if (outerBoundsCp && option.outerBounds) mergeLayoutParam(option.outerBounds, outerBoundsCp); }; GridModel.prototype.mergeOption = function(newOption, ecModel) { _super.prototype.mergeOption.apply(this, arguments); if (this.option.outerBounds && newOption.outerBounds) mergeLayoutParam(this.option.outerBounds, newOption.outerBounds); }; GridModel.type = "grid"; GridModel.dependencies = ["xAxis", "yAxis"]; GridModel.layoutMode = "box"; GridModel.defaultOption = { show: false, z: 0, left: "15%", top: 65, right: "10%", bottom: 80, containLabel: false, outerBoundsMode: "auto", outerBounds: OUTER_BOUNDS_DEFAULT, outerBoundsContain: "all", outerBoundsClampWidth: OUTER_BOUNDS_CLAMP_DEFAULT[0], outerBoundsClampHeight: OUTER_BOUNDS_CLAMP_DEFAULT[1], backgroundColor: tokens.color.transparent, borderWidth: 1, borderColor: tokens.color.neutral30 }; return GridModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/layout/barGrid.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce$4 = makeCallOnlyOnce(); var STACK_PREFIX = "__ec_stack_"; function getSeriesStackId$1(seriesModel) { return seriesModel.get("stack") || STACK_PREFIX + seriesModel.seriesIndex; } /** * Return null/undefined if not 'category' axis. * * PENDING: The layout on non-'category' axis relies on `bandWidth`, which is calculated * based on the `linearPositiveMinGap` of series data. This strategy is somewhat heuristic * and will not be public to custom series until required in future. Additionally, more ec * options may be introduced for that, because it requires `requireAxisStatistics` to be * called on custom series that requires this feature. */ function computeBarLayoutForCustomSeries(opt) { if (!isOrdinalScale(opt.axis.scale)) return; var bandWidthResult = calcBandWidth(opt.axis); var params = []; for (var i = 0; i < opt.count || 0; i++) params.push(defaults({ stackId: STACK_PREFIX + i }, opt)); var widthAndOffsets = calcBarWidthAndOffset({ bandWidthResult, seriesInfo: params }); var result = []; for (var i = 0; i < opt.count; i++) { var item = widthAndOffsets[STACK_PREFIX + i]; item.offsetCenter = item.offset + item.width / 2; result.push(item); } return result; } /** * NOTICE: This layout is based on axis pixel extent and scale extent. * It may be used on estimation, where axis pixel extent and scale extent * are approximately set. But the result should not be cached since the * axis pixel extent and scale extent may be changed finally. */ function makeColumnLayoutOnAxisReal(baseAxis, seriesType) { var seriesInfoListOnAxis = createLayoutInfoListOnAxis(baseAxis, seriesType); seriesInfoListOnAxis.columnMap = calcBarWidthAndOffset(seriesInfoListOnAxis); return seriesInfoListOnAxis; } function createLayoutInfoListOnAxis(baseAxis, seriesType) { var axisStatKey = makeAxisStatKey2(seriesType, COORD_SYS_TYPE_CARTESIAN_2D); var seriesInfoOnAxis = []; var bandWidthResult = calcBandWidth(baseAxis, { fromStat: { key: axisStatKey }, min: 1 }); eachSeriesOnAxisOnKey(baseAxis, axisStatKey, function(seriesModel) { seriesInfoOnAxis.push({ barWidth: parsePercent(seriesModel.get("barWidth"), bandWidthResult.w), barMaxWidth: parsePercent(seriesModel.get("barMaxWidth"), bandWidthResult.w), barMinWidth: parsePercent(seriesModel.get("barMinWidth") || (isInLargeMode(seriesModel) ? .5 : 1), bandWidthResult.w), barGap: seriesModel.get("barGap"), barCategoryGap: seriesModel.get("barCategoryGap"), defaultBarGap: seriesModel.get("defaultBarGap"), stackId: getSeriesStackId$1(seriesModel) }); }); return { bandWidthResult, seriesInfo: seriesInfoOnAxis }; } /** * CAUTION: When multiple series are laid out on one axis, relevant ec options effect all series. * But for historical reason, these options are configured on each series option, which may * introduce confliction. The legacy implementation uses some options (e.g., `defaultBarGap`) * from the first declared series, and other options (e.g., `barGap`, `barCategoryGap`) from the last declared * series. Nevertheless, We remain this design to avoid breaking change. */ function calcBarWidthAndOffset(seriesInfoOnAxis) { var bandWidth = seriesInfoOnAxis.bandWidthResult.w; var remainedWidth = bandWidth; var autoWidthCount = 0; var barCategoryGapOption; var barGapOption; var stackIdList = []; var stackMap = {}; each$12(seriesInfoOnAxis.seriesInfo, function(seriesInfo, idx) { if (!idx) barGapOption = seriesInfo.defaultBarGap || 0; var stackId = seriesInfo.stackId; if (!hasOwn(stackMap, stackId)) autoWidthCount++; var stackItem = stackMap[stackId]; if (!stackItem) { stackItem = stackMap[stackId] = { width: 0, maxWidth: 0 }; stackIdList.push(stackId); } var barWidth = seriesInfo.barWidth; if (barWidth && !stackItem.width) { stackItem.width = barWidth; barWidth = mathMin$9(remainedWidth, barWidth); remainedWidth -= barWidth; } var barMaxWidth = seriesInfo.barMaxWidth; barMaxWidth && (stackItem.maxWidth = barMaxWidth); var barMinWidth = seriesInfo.barMinWidth; barMinWidth && (stackItem.minWidth = barMinWidth); var barGap = seriesInfo.barGap; barGap != null && (barGapOption = barGap); var barCategoryGap = seriesInfo.barCategoryGap; barCategoryGap != null && (barCategoryGapOption = barCategoryGap); }); if (barCategoryGapOption == null) barCategoryGapOption = mathMax$9(35 - stackIdList.length * 4, 15) + "%"; var barCategoryGapNum = parsePercent(barCategoryGapOption, bandWidth); var barGapPercent = parsePercent(barGapOption, 1); var autoWidth = (remainedWidth - barCategoryGapNum) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); autoWidth = mathMax$9(autoWidth, 0); each$12(stackIdList, function(stackId) { var column = stackMap[stackId]; var maxWidth = column.maxWidth; var minWidth = column.minWidth; if (!column.width) { var finalWidth = autoWidth; if (maxWidth && maxWidth < finalWidth) finalWidth = mathMin$9(maxWidth, remainedWidth); if (minWidth && minWidth > finalWidth) finalWidth = minWidth; if (finalWidth !== autoWidth) { column.width = finalWidth; remainedWidth -= finalWidth + barGapPercent * finalWidth; autoWidthCount--; } } else { var finalWidth = column.width; if (maxWidth) finalWidth = mathMin$9(finalWidth, maxWidth); if (minWidth) finalWidth = mathMax$9(finalWidth, minWidth); column.width = finalWidth; remainedWidth -= finalWidth + barGapPercent * finalWidth; autoWidthCount--; } }); autoWidth = (remainedWidth - barCategoryGapNum) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); autoWidth = mathMax$9(autoWidth, 0); var widthSum = 0; var lastColumn; each$12(stackIdList, function(stackId) { var column = stackMap[stackId]; if (!column.width) column.width = autoWidth; lastColumn = column; widthSum += column.width * (1 + barGapPercent); }); if (lastColumn) widthSum -= lastColumn.width * barGapPercent; var result = {}; var offset = -widthSum / 2; each$12(stackIdList, function(stackId) { var column = stackMap[stackId]; result[stackId] = result[stackId] || { bandWidth, offset, width: column.width }; offset += column.width * (1 + barGapPercent); }); return result; } function createCrossSeriesLayoutHandler(seriesType) { return { seriesType, overallReset: function(ecModel) { var axisStatKey = makeAxisStatKey2(seriesType, COORD_SYS_TYPE_CARTESIAN_2D); eachAxisOnKey(ecModel, axisStatKey, function(axis) { assert(axis instanceof Axis2D); var columnLayout = makeColumnLayoutOnAxisReal(axis, seriesType); eachSeriesOnAxisOnKey(axis, axisStatKey, function(seriesModel) { var columnLayoutInfo = columnLayout.columnMap[getSeriesStackId$1(seriesModel)]; seriesModel.getData().setLayout({ bandWidth: columnLayoutInfo.bandWidth, offset: columnLayoutInfo.offset, size: columnLayoutInfo.width }); }); }); } }; } function createProgressiveLayout(seriesType) { return { seriesType, plan: createRenderPlanner(), reset: function(seriesModel) { if (!isCartesian2DInjectedAsDataCoordSys(seriesModel)) return; var data = seriesModel.getData(); var cartesian = seriesModel.coordinateSystem; var baseAxis = cartesian.getBaseAxis(); var valueAxis = cartesian.getOtherAxis(baseAxis); var valueDimIdx = data.getDimensionIndex(data.mapDimension(valueAxis.dim)); var baseDimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim)); var drawBackground = seriesModel.get("showBackground", true); var valueDim = data.mapDimension(valueAxis.dim); var stackResultDim = data.getCalculationInfo("stackResultDimension"); var stacked = isDimensionStacked(data, valueDim) && !!data.getCalculationInfo("stackedOnSeries"); var isValueAxisH = valueAxis.isHorizontal(); var valueAxisStart = valueAxis.toGlobalCoord(valueAxis.dataToCoord(getStartValue(valueAxis))); var isLarge = isInLargeMode(seriesModel); var barMinHeight = seriesModel.get("barMinHeight") || 0; var stackedDimIdx = stackResultDim && data.getDimensionIndex(stackResultDim); var columnWidth = data.getLayout("size"); var columnOffset = data.getLayout("offset"); return { progress: function(params, data) { var count = params.count; var largePoints = isLarge && createFloat32Array(count * 3); var largeBackgroundPoints = isLarge && drawBackground && createFloat32Array(count * 3); var largeDataIndices = isLarge && createFloat32Array(count); var coordLayout = cartesian.master.getRect(); var bgSize = isValueAxisH ? coordLayout.width : coordLayout.height; var dataIndex; var store = data.getStore(); var idxOffset = 0; while ((dataIndex = params.next()) != null) { var value = store.get(stacked ? stackedDimIdx : valueDimIdx, dataIndex); var baseValue = store.get(baseDimIdx, dataIndex); var baseCoord = valueAxisStart; var stackStartValue = void 0; if (stacked) stackStartValue = +value - store.get(valueDimIdx, dataIndex); var x = void 0; var y = void 0; var width = void 0; var height = void 0; if (isValueAxisH) { var coord = cartesian.dataToPoint([value, baseValue]); if (stacked) baseCoord = cartesian.dataToPoint([stackStartValue, baseValue])[0]; x = baseCoord; y = coord[1] + columnOffset; width = coord[0] - baseCoord; height = columnWidth; if (mathAbs$4(width) < barMinHeight) width = (width < 0 ? -1 : 1) * barMinHeight; } else { var coord = cartesian.dataToPoint([baseValue, value]); if (stacked) baseCoord = cartesian.dataToPoint([baseValue, stackStartValue])[1]; x = coord[0] + columnOffset; y = baseCoord; width = columnWidth; height = coord[1] - baseCoord; if (mathAbs$4(height) < barMinHeight) height = (height <= 0 ? -1 : 1) * barMinHeight; } if (!isLarge) data.setItemLayout(dataIndex, { x, y, width, height }); else { largePoints[idxOffset] = x; largePoints[idxOffset + 1] = y; largePoints[idxOffset + 2] = isValueAxisH ? width : height; if (largeBackgroundPoints) { largeBackgroundPoints[idxOffset] = isValueAxisH ? coordLayout.x : x; largeBackgroundPoints[idxOffset + 1] = isValueAxisH ? y : coordLayout.y; largeBackgroundPoints[idxOffset + 2] = bgSize; } largeDataIndices[dataIndex] = dataIndex; } idxOffset += 3; } if (isLarge) data.setLayout({ largePoints, largeDataIndices, largeBackgroundPoints, valueAxisHorizontal: isValueAxisH }); } }; } }; } function isInLargeMode(seriesModel) { return seriesModel.pipelineContext && seriesModel.pipelineContext.large; } function barGridCreateAxisContainShapeHandler(seriesType) { return createBandWidthBasedAxisContainShapeHandler(makeAxisStatKey2(seriesType, COORD_SYS_TYPE_CARTESIAN_2D)); } function registerBarGridAxisHandlers(registers) { callOnlyOnce$4(registers, function() { function register(seriesType) { var axisStatKey = makeAxisStatKey2(seriesType, COORD_SYS_TYPE_CARTESIAN_2D); requireAxisStatisticsForBaseBar(registers, axisStatKey, seriesType, COORD_SYS_TYPE_CARTESIAN_2D); registerAxisContainShapeHandler(axisStatKey, barGridCreateAxisContainShapeHandler(seriesType)); } register("bar"); register("pictorialBar"); }); } //#endregion //#region node_modules/echarts/lib/chart/bar/BaseBarSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BaseBarSeriesModel = function(_super) { __extends(BaseBarSeriesModel, _super); function BaseBarSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = BaseBarSeriesModel.type; return _this; } BaseBarSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this, { useEncodeDefaulter: true }); }; BaseBarSeriesModel.prototype.getMarkerPosition = function(value, dims, startingAtTick) { var coordSys = this.coordinateSystem; if (coordSys && coordSys.clampData) { var clampData_1 = coordSys.clampData(value); var pt_1 = coordSys.dataToPoint(clampData_1); if (startingAtTick) each$12(coordSys.getAxes(), function(axis, idx) { if (axis.type === "category" && dims != null) { var tickCoords = axis.getTicksCoords(); var alignTicksWithLabel = axis.getTickModel().get("alignWithLabel"); var targetTickId = clampData_1[idx]; var isEnd = dims[idx] === "x1" || dims[idx] === "y1"; if (isEnd && !alignTicksWithLabel) targetTickId += 1; if (tickCoords.length < 2) return; else if (tickCoords.length === 2) { pt_1[idx] = axis.toGlobalCoord(axis.getExtent()[isEnd ? 1 : 0]); return; } var leftCoord = void 0; var coord = void 0; var stepTickValue = 1; for (var i = 0; i < tickCoords.length; i++) { var tickCoord = tickCoords[i].coord; var tickValue = i === tickCoords.length - 1 ? tickCoords[i - 1].tickValue + stepTickValue : tickCoords[i].tickValue; if (tickValue === targetTickId) { coord = tickCoord; break; } else if (tickValue < targetTickId) leftCoord = tickCoord; else if (leftCoord != null && tickValue > targetTickId) { coord = (tickCoord + leftCoord) / 2; break; } if (i === 1) stepTickValue = tickValue - tickCoords[0].tickValue; } if (coord == null) { if (!leftCoord) coord = tickCoords[0].coord; else if (leftCoord) coord = tickCoords[tickCoords.length - 1].coord; } pt_1[idx] = axis.toGlobalCoord(coord); } }); else { var data = this.getData(); var offset = data.getLayout("offset"); var size = data.getLayout("size"); var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1; pt_1[offsetIndex] += offset + size / 2; } return pt_1; } return [NaN, NaN]; }; /** * @implements */ BaseBarSeriesModel.prototype.__requireStartValue = function(axis) { return this.getBaseAxis() !== axis; }; BaseBarSeriesModel.type = "series.__base_bar__"; BaseBarSeriesModel.defaultOption = { z: 2, coordinateSystem: "cartesian2d", legendHoverLink: true, barMinHeight: 0, barMinAngle: 0, large: false, largeThreshold: 400, progressive: 3e3, progressiveChunkMode: "mod", defaultBarGap: "10%" }; return BaseBarSeriesModel; }(SeriesModel); SeriesModel.registerClass(BaseBarSeriesModel); //#endregion //#region node_modules/echarts/lib/chart/bar/BarSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BarSeriesModel = function(_super) { __extends(BarSeriesModel, _super); function BarSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = BarSeriesModel.type; return _this; } BarSeriesModel.prototype.getInitialData = function() { return createSeriesData(null, this, { useEncodeDefaulter: true, createInvertedIndices: !!this.get("realtimeSort", true) || null }); }; /** * @override */ BarSeriesModel.prototype.getProgressive = function() { return this.get("large") ? this.get("progressive") : false; }; /** * @implement */ BarSeriesModel.prototype.__preparePipelineContext = function(view, pipeline) { var context = preparePipelineContext(this, view, pipeline); if (context.progressiveRender) context.large = true; return context; }; BarSeriesModel.prototype.brushSelector = function(dataIndex, data, selectors) { return selectors.rect(data.getItemLayout(dataIndex)); }; BarSeriesModel.type = "series.bar"; BarSeriesModel.dependencies = ["grid", "polar"]; BarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, { clip: true, roundCap: false, showBackground: false, backgroundStyle: { color: "rgba(180, 180, 180, 0.2)", borderColor: null, borderWidth: 0, borderType: "solid", borderRadius: 0, shadowBlur: 0, shadowColor: null, shadowOffsetX: 0, shadowOffsetY: 0, opacity: 1 }, select: { itemStyle: { borderColor: tokens.color.primary, borderWidth: 2 } }, realtimeSort: false }); return BarSeriesModel; }(BaseBarSeriesModel); //#endregion //#region node_modules/echarts/lib/util/shape/sausage.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Sausage: similar to sector, but have half circle on both sides */ var SausageShape = function() { function SausageShape() { this.cx = 0; this.cy = 0; this.r0 = 0; this.r = 0; this.startAngle = 0; this.endAngle = Math.PI * 2; this.clockwise = true; } return SausageShape; }(); var SausagePath = function(_super) { __extends(SausagePath, _super); function SausagePath(opts) { var _this = _super.call(this, opts) || this; _this.type = "sausage"; return _this; } SausagePath.prototype.getDefaultShape = function() { return new SausageShape(); }; SausagePath.prototype.buildPath = function(ctx, shape) { var cx = shape.cx; var cy = shape.cy; var r0 = Math.max(shape.r0 || 0, 0); var r = Math.max(shape.r, 0); var dr = (r - r0) * .5; var rCenter = r0 + dr; var startAngle = shape.startAngle; var endAngle = shape.endAngle; var clockwise = shape.clockwise; var PI2 = Math.PI * 2; var lessThanCircle = clockwise ? endAngle - startAngle < PI2 : startAngle - endAngle < PI2; if (!lessThanCircle) startAngle = endAngle - (clockwise ? PI2 : -PI2); var unitStartX = Math.cos(startAngle); var unitStartY = Math.sin(startAngle); var unitEndX = Math.cos(endAngle); var unitEndY = Math.sin(endAngle); if (lessThanCircle) { ctx.moveTo(unitStartX * r0 + cx, unitStartY * r0 + cy); ctx.arc(unitStartX * rCenter + cx, unitStartY * rCenter + cy, dr, -Math.PI + startAngle, startAngle, !clockwise); } else ctx.moveTo(unitStartX * r + cx, unitStartY * r + cy); ctx.arc(cx, cy, r, startAngle, endAngle, !clockwise); ctx.arc(unitEndX * rCenter + cx, unitEndY * rCenter + cy, dr, endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise); if (r0 !== 0) ctx.arc(cx, cy, r0, endAngle, startAngle, clockwise); }; return SausagePath; }(Path); //#endregion //#region node_modules/echarts/lib/label/sectorLabel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function createSectorCalculateTextPosition(positionMapping, opts) { opts = opts || {}; var isRoundCap = opts.isRoundCap; return function(out, opts, boundingRect) { var textPosition = opts.position; if (!textPosition || textPosition instanceof Array) return calculateTextPosition(out, opts, boundingRect); var mappedSectorPosition = positionMapping(textPosition); var distance = opts.distance != null ? opts.distance : 5; var sector = this.shape; var cx = sector.cx; var cy = sector.cy; var r = sector.r; var r0 = sector.r0; var middleR = (r + r0) / 2; var startAngle = sector.startAngle; var endAngle = sector.endAngle; var middleAngle = (startAngle + endAngle) / 2; var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0; var mathCos = Math.cos; var mathSin = Math.sin; var x = cx + r * mathCos(startAngle); var y = cy + r * mathSin(startAngle); var textAlign = "left"; var textVerticalAlign = "top"; switch (mappedSectorPosition) { case "startArc": x = cx + (r0 - distance) * mathCos(middleAngle); y = cy + (r0 - distance) * mathSin(middleAngle); textAlign = "center"; textVerticalAlign = "top"; break; case "insideStartArc": x = cx + (r0 + distance) * mathCos(middleAngle); y = cy + (r0 + distance) * mathSin(middleAngle); textAlign = "center"; textVerticalAlign = "bottom"; break; case "startAngle": x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false); y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false); textAlign = "right"; textVerticalAlign = "middle"; break; case "insideStartAngle": x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false); y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false); textAlign = "left"; textVerticalAlign = "middle"; break; case "middle": x = cx + middleR * mathCos(middleAngle); y = cy + middleR * mathSin(middleAngle); textAlign = "center"; textVerticalAlign = "middle"; break; case "endArc": x = cx + (r + distance) * mathCos(middleAngle); y = cy + (r + distance) * mathSin(middleAngle); textAlign = "center"; textVerticalAlign = "bottom"; break; case "insideEndArc": x = cx + (r - distance) * mathCos(middleAngle); y = cy + (r - distance) * mathSin(middleAngle); textAlign = "center"; textVerticalAlign = "top"; break; case "endAngle": x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true); y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true); textAlign = "left"; textVerticalAlign = "middle"; break; case "insideEndAngle": x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true); y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true); textAlign = "right"; textVerticalAlign = "middle"; break; default: return calculateTextPosition(out, opts, boundingRect); } out = out || {}; out.x = x; out.y = y; out.align = textAlign; out.verticalAlign = textVerticalAlign; return out; }; } function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) { if (isNumber(rotateType)) { sector.setTextConfig({ rotation: rotateType }); return; } else if (isArray$1(textPosition)) { sector.setTextConfig({ rotation: 0 }); return; } var shape = sector.shape; var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle; var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle; var middleAngle = (startAngle + endAngle) / 2; var anchorAngle; var mappedSectorPosition = positionMapping(textPosition); switch (mappedSectorPosition) { case "startArc": case "insideStartArc": case "middle": case "insideEndArc": case "endArc": anchorAngle = middleAngle; break; case "startAngle": case "insideStartAngle": anchorAngle = startAngle; break; case "endAngle": case "insideEndAngle": anchorAngle = endAngle; break; default: sector.setTextConfig({ rotation: 0 }); return; } var rotate = Math.PI * 1.5 - anchorAngle; /** * TODO: labels with rotate > Math.PI / 2 should be rotate another * half round flipped to increase readability. However, only middle * position supports this for now, because in other positions, the * anchor point is not at the center of the text, so the positions * after rotating is not as expected. */ if (mappedSectorPosition === "middle" && rotate > Math.PI / 2 && rotate < Math.PI * 1.5) rotate -= Math.PI; sector.setTextConfig({ rotation: rotate }); } function adjustAngleDistanceX(angle, distance, isEnd) { return distance * Math.sin(angle) * (isEnd ? -1 : 1); } function adjustAngleDistanceY(angle, distance, isEnd) { return distance * Math.cos(angle) * (isEnd ? 1 : -1); } //#endregion //#region node_modules/echarts/lib/chart/helper/sectorHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getSectorCornerRadius(model, shape, zeroIfNull) { var cornerRadius = model.get("borderRadius"); if (cornerRadius == null) return zeroIfNull ? { cornerRadius: 0 } : null; if (!isArray$1(cornerRadius)) cornerRadius = [ cornerRadius, cornerRadius, cornerRadius, cornerRadius ]; var dr = Math.abs(shape.r || 0 - shape.r0 || 0); return { cornerRadius: map$1(cornerRadius, function(cr) { return parsePercent$1(cr, dr); }) }; } //#endregion //#region node_modules/echarts/lib/chart/bar/BarView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var mathMax$3 = Math.max; var mathMin$3 = Math.min; var BarView = function(_super) { __extends(BarView, _super); function BarView() { var _this = _super.call(this) || this; _this.type = "bar"; _this._isFirstFrame = true; return _this; } BarView.prototype.render = function(seriesModel, ecModel, api, payload) { this._model = seriesModel; this._removeOnRenderedListener(api); this._updateDrawMode(seriesModel); var coordinateSystemType = seriesModel.get("coordinateSystem"); if (coordinateSystemType === "cartesian2d" || coordinateSystemType === "polar") { this._progressiveEls = null; this._isLargeDraw ? this._renderLarge(seriesModel, ecModel, api) : this._renderNormal(seriesModel, ecModel, api, payload); } else warn("Only cartesian2d and polar supported for bar."); }; BarView.prototype.incrementalPrepareRender = function(seriesModel) { this._clear(); this._updateDrawMode(seriesModel); this._updateLargeClip(seriesModel); }; BarView.prototype.incrementalRender = function(params, seriesModel) { this._progressiveEls = []; this._incrementalRenderLarge(params, seriesModel); }; BarView.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; BarView.prototype._updateDrawMode = function(seriesModel) { var isLargeDraw = seriesModel.pipelineContext.large; if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) { this._isLargeDraw = isLargeDraw; this._clear(); } }; BarView.prototype._renderNormal = function(seriesModel, ecModel, api, payload) { var group = this.group; var data = seriesModel.getData(); var oldData = this._data; var coord = seriesModel.coordinateSystem; var baseAxis = coord.getBaseAxis(); var isHorizontalOrRadial; if (coord.type === "cartesian2d") isHorizontalOrRadial = baseAxis.isHorizontal(); else if (coord.type === "polar") isHorizontalOrRadial = baseAxis.dim === "angle"; var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null; var realtimeSortCfg = shouldRealtimeSort(seriesModel, coord); if (realtimeSortCfg) this._enableRealtimeSort(realtimeSortCfg, data, api); var needsClip = seriesModel.get("clip", true) || realtimeSortCfg; var coordSysClipArea = coord.getArea(); group.removeClipPath(); var roundCap = seriesModel.get("roundCap", true); var drawBackground = seriesModel.get("showBackground", true); var backgroundModel = seriesModel.getModel("backgroundStyle"); var barBorderRadius = backgroundModel.get("borderRadius") || 0; var bgEls = []; var oldBgEls = this._backgroundEls; var isInitSort = payload && payload.isInitSort; var isChangeOrder = payload && payload.type === "changeAxisOrder"; function createBackground(dataIndex) { var bgLayout = getLayout[coord.type](data, dataIndex); if (!bgLayout) return null; var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout); bgEl.useStyle(backgroundModel.getItemStyle()); if (coord.type === "cartesian2d") bgEl.setShape("r", barBorderRadius); else bgEl.setShape("cornerRadius", barBorderRadius); bgEls[dataIndex] = bgEl; return bgEl; } data.diff(oldData).add(function(dataIndex) { var itemModel = data.getItemModel(dataIndex); var layout = getLayout[coord.type](data, dataIndex, itemModel); if (!layout) return; if (drawBackground) createBackground(dataIndex); if (!data.hasValue(dataIndex) || !isValidLayout[coord.type](layout)) return; var isClipped = false; if (needsClip) isClipped = clip[coord.type](coordSysClipArea, layout); var el = elementCreator[coord.type](seriesModel, data, dataIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, false, roundCap); if (realtimeSortCfg) /** * Force label animation because even if the element is * ignored because it's clipped, it may not be clipped after * changing order. Then, if not using forceLabelAnimation, * the label animation was never started, in which case, * the label will be the final value and doesn't have label * animation. */ el.forceLabelAnimation = true; updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === "polar"); if (isInitSort) el.attr({ shape: layout }); else if (realtimeSortCfg) updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, dataIndex, isHorizontalOrRadial, false, false); else initProps(el, { shape: layout }, seriesModel, dataIndex); data.setItemGraphicEl(dataIndex, el); group.add(el); el.ignore = isClipped; }).update(function(newIndex, oldIndex) { var itemModel = data.getItemModel(newIndex); var layout = getLayout[coord.type](data, newIndex, itemModel); if (!layout) return; if (drawBackground) { var bgEl = void 0; if (oldBgEls.length === 0) bgEl = createBackground(oldIndex); else { bgEl = oldBgEls[oldIndex]; bgEl.useStyle(backgroundModel.getItemStyle()); if (coord.type === "cartesian2d") bgEl.setShape("r", barBorderRadius); else bgEl.setShape("cornerRadius", barBorderRadius); bgEls[newIndex] = bgEl; } var bgLayout = getLayout[coord.type](data, newIndex); var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord); updateProps$1(bgEl, { shape }, animationModel, newIndex); } var el = oldData.getItemGraphicEl(oldIndex); if (!data.hasValue(newIndex) || !isValidLayout[coord.type](layout)) { group.remove(el); return; } var isClipped = false; if (needsClip) { isClipped = clip[coord.type](coordSysClipArea, layout); if (isClipped) group.remove(el); } if (el && (el.type === "sector" && roundCap || el.type === "sausage" && !roundCap)) { el && removeElementWithFadeOut(el, seriesModel, oldIndex); el = null; } if (!el) el = elementCreator[coord.type](seriesModel, data, newIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, true, roundCap); else saveOldStyle(el); if (realtimeSortCfg) el.forceLabelAnimation = true; if (isChangeOrder) { var textEl = el.getTextContent(); if (textEl) { var labelInnerStore = labelInner(textEl); if (labelInnerStore.prevValue != null) /** * Set preValue to be value so that no new label * should be started, otherwise, it will take a full * `animationDurationUpdate` time to finish the * animation, which is not expected. */ labelInnerStore.prevValue = labelInnerStore.value; } } else updateStyle(el, data, newIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === "polar"); if (isInitSort) el.attr({ shape: layout }); else if (realtimeSortCfg) updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, newIndex, isHorizontalOrRadial, true, isChangeOrder); else updateProps$1(el, { shape: layout }, seriesModel, newIndex, null); data.setItemGraphicEl(newIndex, el); el.ignore = isClipped; group.add(el); }).remove(function(dataIndex) { var el = oldData.getItemGraphicEl(dataIndex); el && removeElementWithFadeOut(el, seriesModel, dataIndex); }).execute(); var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group$3()); bgGroup.removeAll(); for (var i = 0; i < bgEls.length; ++i) bgGroup.add(bgEls[i]); group.add(bgGroup); this._backgroundEls = bgEls; this._data = data; }; BarView.prototype._renderLarge = function(seriesModel, ecModel, api) { this._clear(); createLarge$1(seriesModel, this.group); this._updateLargeClip(seriesModel); }; BarView.prototype._incrementalRenderLarge = function(params, seriesModel) { this._removeBackground(); createLarge$1(seriesModel, this.group, this._progressiveEls, true); }; BarView.prototype._updateLargeClip = function(seriesModel) { var clipPath = seriesModel.get("clip", true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel); var group = this.group; if (clipPath) group.setClipPath(clipPath); else group.removeClipPath(); }; BarView.prototype._enableRealtimeSort = function(realtimeSortCfg, data, api) { var _this = this; if (!data.count()) return; var baseAxis = realtimeSortCfg.baseAxis; if (this._isFirstFrame) { this._dispatchInitSort(data, realtimeSortCfg, api); this._isFirstFrame = false; } else { var orderMapping_1 = function(idx) { var el = data.getItemGraphicEl(idx); var shape = el && el.shape; return shape && Math.abs(baseAxis.isHorizontal() ? shape.height : shape.width) || 0; }; this._onRendered = function() { _this._updateSortWithinSameData(data, orderMapping_1, baseAxis, api); }; api.getZr().on("rendered", this._onRendered); } }; BarView.prototype._dataSort = function(data, baseAxis, orderMapping) { var info = []; data.each(data.mapDimension(baseAxis.dim), function(ordinalNumber, dataIdx) { var mappedValue = orderMapping(dataIdx); mappedValue = mappedValue == null ? NaN : mappedValue; info.push({ dataIndex: dataIdx, mappedValue, ordinalNumber }); }); info.sort(function(a, b) { return b.mappedValue - a.mappedValue; }); return { ordinalNumbers: map$1(info, function(item) { return item.ordinalNumber; }) }; }; BarView.prototype._isOrderChangedWithinSameData = function(data, orderMapping, baseAxis) { var scale = baseAxis.scale; var ordinalDataDim = data.mapDimension(baseAxis.dim); var lastValue = Number.MAX_VALUE; for (var tickNum = 0, len = scale.getOrdinalMeta().categories.length; tickNum < len; ++tickNum) { var rawIdx = data.rawIndexOf(ordinalDataDim, scale.getRawOrdinalNumber(tickNum)); var value = rawIdx < 0 ? Number.MIN_VALUE : orderMapping(data.indexOfRawIndex(rawIdx)); if (value > lastValue) return true; lastValue = value; } return false; }; BarView.prototype._isOrderDifferentInView = function(orderInfo, baseAxis) { var scale = baseAxis.scale; var extent = scale.getExtent(); var tickNum = Math.max(0, extent[0]); var tickMax = Math.min(extent[1], scale.getOrdinalMeta().categories.length - 1); for (; tickNum <= tickMax; ++tickNum) if (orderInfo.ordinalNumbers[tickNum] !== scale.getRawOrdinalNumber(tickNum)) return true; }; BarView.prototype._updateSortWithinSameData = function(data, orderMapping, baseAxis, api) { if (!this._isOrderChangedWithinSameData(data, orderMapping, baseAxis)) return; var sortInfo = this._dataSort(data, baseAxis, orderMapping); if (this._isOrderDifferentInView(sortInfo, baseAxis)) { this._removeOnRenderedListener(api); api.dispatchAction({ type: "changeAxisOrder", componentType: baseAxis.dim + "Axis", axisId: baseAxis.index, sortInfo }); } }; BarView.prototype._dispatchInitSort = function(data, realtimeSortCfg, api) { var baseAxis = realtimeSortCfg.baseAxis; var sortResult = this._dataSort(data, baseAxis, function(dataIdx) { return data.get(data.mapDimension(realtimeSortCfg.otherAxis.dim), dataIdx); }); api.dispatchAction({ type: "changeAxisOrder", componentType: baseAxis.dim + "Axis", isInitSort: true, axisId: baseAxis.index, sortInfo: sortResult }); }; BarView.prototype.remove = function(ecModel, api) { this._clear(this._model); this._removeOnRenderedListener(api); }; BarView.prototype.dispose = function(ecModel, api) { this._removeOnRenderedListener(api); }; BarView.prototype._removeOnRenderedListener = function(api) { if (this._onRendered) { api.getZr().off("rendered", this._onRendered); this._onRendered = null; } }; BarView.prototype._clear = function(model) { var group = this.group; var data = this._data; if (model && model.isAnimationEnabled() && data && !this._isLargeDraw) { this._removeBackground(); this._backgroundEls = []; data.eachItemGraphicEl(function(el) { removeElementWithFadeOut(el, model, getECData(el).dataIndex); }); } else group.removeAll(); this._data = null; this._isFirstFrame = true; }; BarView.prototype._removeBackground = function() { this.group.remove(this._backgroundGroup); this._backgroundGroup = null; }; BarView.type = "bar"; return BarView; }(ChartView); var clip = { cartesian2d: function(coordSysClipArea, layout) { var signWidth = layout.width < 0 ? -1 : 1; var signHeight = layout.height < 0 ? -1 : 1; if (signWidth < 0) { layout.x += layout.width; layout.width = -layout.width; } if (signHeight < 0) { layout.y += layout.height; layout.height = -layout.height; } var coordSysX2 = coordSysClipArea.x + coordSysClipArea.width; var coordSysY2 = coordSysClipArea.y + coordSysClipArea.height; var x = mathMax$3(layout.x, coordSysClipArea.x); var x2 = mathMin$3(layout.x + layout.width, coordSysX2); var y = mathMax$3(layout.y, coordSysClipArea.y); var y2 = mathMin$3(layout.y + layout.height, coordSysY2); var xClipped = x2 < x; var yClipped = y2 < y; layout.x = xClipped && x > coordSysX2 ? x2 : x; layout.y = yClipped && y > coordSysY2 ? y2 : y; layout.width = xClipped ? 0 : x2 - x; layout.height = yClipped ? 0 : y2 - y; if (signWidth < 0) { layout.x += layout.width; layout.width = -layout.width; } if (signHeight < 0) { layout.y += layout.height; layout.height = -layout.height; } return xClipped || yClipped; }, polar: function(coordSysClipArea, layout) { var signR = layout.r0 <= layout.r ? 1 : -1; if (signR < 0) { var tmp = layout.r; layout.r = layout.r0; layout.r0 = tmp; } var r = mathMin$3(layout.r, coordSysClipArea.r); var r0 = mathMax$3(layout.r0, coordSysClipArea.r0); layout.r = r; layout.r0 = r0; var clipped = r - r0 < 0; if (signR < 0) { var tmp = layout.r; layout.r = layout.r0; layout.r0 = tmp; } return clipped; } }; var elementCreator = { cartesian2d: function(seriesModel, data, newIndex, layout, isHorizontal, animationModel, axisModel, isUpdate, roundCap) { var rect = new Rect$2({ shape: extend({}, layout), z2: 1 }); rect.__dataIndex = newIndex; rect.name = "item"; if (animationModel) { var rectShape = rect.shape; var animateProperty = isHorizontal ? "height" : "width"; rectShape[animateProperty] = 0; } return rect; }, polar: function(seriesModel, data, newIndex, layout, isRadial, animationModel, axisModel, isUpdate, roundCap) { var ShapeClass = !isRadial && roundCap ? SausagePath : Sector; var sector = new ShapeClass({ shape: layout, z2: 1 }); sector.name = "item"; sector.calculateTextPosition = createSectorCalculateTextPosition(createPolarPositionMapping(isRadial), { isRoundCap: ShapeClass === SausagePath }); if (animationModel) { var sectorShape = sector.shape; var animateProperty = isRadial ? "r" : "endAngle"; var animateTarget = {}; sectorShape[animateProperty] = isRadial ? layout.r0 : layout.startAngle; animateTarget[animateProperty] = layout[animateProperty]; (isUpdate ? updateProps$1 : initProps)(sector, { shape: animateTarget }, animationModel); } return sector; } }; function shouldRealtimeSort(seriesModel, coordSys) { var realtimeSortOption = seriesModel.get("realtimeSort", true); var baseAxis = coordSys.getBaseAxis(); if (realtimeSortOption) { if (baseAxis.type !== "category") warn("`realtimeSort` will not work because this bar series is not based on a category axis."); if (coordSys.type !== "cartesian2d") warn("`realtimeSort` will not work because this bar series is not on cartesian2d."); } if (realtimeSortOption && baseAxis.type === "category" && coordSys.type === "cartesian2d") return { baseAxis, otherAxis: coordSys.getOtherAxis(baseAxis) }; } function updateRealtimeAnimation(realtimeSortCfg, seriesAnimationModel, el, layout, newIndex, isHorizontal, isUpdate, isChangeOrder) { var seriesTarget; var axisTarget; if (isHorizontal) { axisTarget = { x: layout.x, width: layout.width }; seriesTarget = { y: layout.y, height: layout.height }; } else { axisTarget = { y: layout.y, height: layout.height }; seriesTarget = { x: layout.x, width: layout.width }; } if (!isChangeOrder) (isUpdate ? updateProps$1 : initProps)(el, { shape: seriesTarget }, seriesAnimationModel, newIndex, null); var axisAnimationModel = seriesAnimationModel ? realtimeSortCfg.baseAxis.model : null; (isUpdate ? updateProps$1 : initProps)(el, { shape: axisTarget }, axisAnimationModel, newIndex); } function checkPropertiesNotValid(obj, props) { for (var i = 0; i < props.length; i++) if (!isFinite(obj[props[i]])) return true; return false; } var rectPropties = [ "x", "y", "width", "height" ]; var polarPropties = [ "cx", "cy", "r", "startAngle", "endAngle" ]; var isValidLayout = { cartesian2d: function(layout) { return !checkPropertiesNotValid(layout, rectPropties); }, polar: function(layout) { return !checkPropertiesNotValid(layout, polarPropties); } }; var getLayout = { cartesian2d: function(data, dataIndex, itemModel) { var layout = data.getItemLayout(dataIndex); if (!layout) return null; var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0; var signX = layout.width > 0 ? 1 : -1; var signY = layout.height > 0 ? 1 : -1; return { x: layout.x + signX * fixedLineWidth / 2, y: layout.y + signY * fixedLineWidth / 2, width: layout.width - signX * fixedLineWidth, height: layout.height - signY * fixedLineWidth }; }, polar: function(data, dataIndex, itemModel) { var layout = data.getItemLayout(dataIndex); return { cx: layout.cx, cy: layout.cy, r0: layout.r0, r: layout.r, startAngle: layout.startAngle, endAngle: layout.endAngle, clockwise: layout.clockwise }; } }; function isZeroOnPolar(layout) { return layout.startAngle != null && layout.endAngle != null && layout.startAngle === layout.endAngle; } function createPolarPositionMapping(isRadial) { return function(isRadial) { var arcOrAngle = isRadial ? "Arc" : "Angle"; return function(position) { switch (position) { case "start": case "insideStart": case "end": case "insideEnd": return position + arcOrAngle; default: return position; } }; }(isRadial); } function updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, isPolar) { var style = data.getItemVisual(dataIndex, "style"); if (!isPolar) { var borderRadius = itemModel.get(["itemStyle", "borderRadius"]) || 0; el.setShape("r", borderRadius); } else if (!seriesModel.get("roundCap")) { var sectorShape = el.shape; extend(sectorShape, getSectorCornerRadius(itemModel.getModel("itemStyle"), sectorShape, true)); el.setShape(sectorShape); } el.useStyle(style); var cursorStyle = itemModel.getShallow("cursor"); cursorStyle && el.attr("cursor", cursorStyle); var labelPositionOutside = isPolar ? isHorizontalOrRadial ? layout.r >= layout.r0 ? "endArc" : "startArc" : layout.endAngle >= layout.startAngle ? "endAngle" : "startAngle" : isHorizontalOrRadial ? getLabelPositionForHorizontal(layout, seriesModel.coordinateSystem) : getLabelPositionForVertical(layout, seriesModel.coordinateSystem); var labelStatesModels = getLabelStatesModels(itemModel); setLabelStyle(el, labelStatesModels, { labelFetcher: seriesModel, labelDataIndex: dataIndex, defaultText: getDefaultLabel(seriesModel.getData(), dataIndex), inheritColor: style.fill, defaultOpacity: style.opacity, defaultOutsidePosition: labelPositionOutside }); var label = el.getTextContent(); if (isPolar && label) { var position = itemModel.get(["label", "position"]); el.textConfig.inside = position === "middle" ? true : null; setSectorTextRotation(el, position === "outside" ? labelPositionOutside : position, createPolarPositionMapping(isHorizontalOrRadial), itemModel.get(["label", "rotate"])); } setLabelValueAnimation(label, labelStatesModels, seriesModel.getRawValue(dataIndex), function(value) { return getDefaultInterpolatedLabel(data, value); }); var emphasisModel = itemModel.getModel(["emphasis"]); toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); setStatesStylesFromModel(el, itemModel); if (isZeroOnPolar(layout)) { el.style.fill = "none"; el.style.stroke = "none"; each$12(el.states, function(state) { if (state.style) state.style.fill = state.style.stroke = "none"; }); } } function getLineWidth(itemModel, rawLayout) { var borderColor = itemModel.get(["itemStyle", "borderColor"]); if (!borderColor || borderColor === "none") return 0; var lineWidth = itemModel.get(["itemStyle", "borderWidth"]) || 0; var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width); var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height); return Math.min(lineWidth, width, height); } var LagePathShape = function() { function LagePathShape() {} return LagePathShape; }(); var LargePath = function(_super) { __extends(LargePath, _super); function LargePath(opts) { var _this = _super.call(this, opts) || this; _this.type = "largeBar"; return _this; } LargePath.prototype.getDefaultShape = function() { return new LagePathShape(); }; LargePath.prototype.buildPath = function(ctx, shape) { var points = shape.points; var baseDimIdx = this.baseDimIdx; var valueDimIdx = 1 - this.baseDimIdx; var startPoint = []; var size = []; var barWidth = this.barWidth; for (var i = 0; i < points.length; i += 3) { size[baseDimIdx] = barWidth; size[valueDimIdx] = points[i + 2]; startPoint[baseDimIdx] = points[i + baseDimIdx]; startPoint[valueDimIdx] = points[i + valueDimIdx]; ctx.rect(startPoint[0], startPoint[1], size[0], size[1]); } }; return LargePath; }(Path); function createLarge$1(seriesModel, group, progressiveEls, incremental) { var data = seriesModel.getData(); var baseDimIdx = data.getLayout("valueAxisHorizontal") ? 1 : 0; var largeDataIndices = data.getLayout("largeDataIndices"); var barWidth = data.getLayout("size"); var backgroundModel = seriesModel.getModel("backgroundStyle"); var bgPoints = data.getLayout("largeBackgroundPoints"); var incrementalId = incremental ? getIncrementalId(seriesModel) : 0; if (bgPoints) { var bgEl = new LargePath({ shape: { points: bgPoints }, incremental: incrementalId, silent: true, z2: 0 }); bgEl.baseDimIdx = baseDimIdx; bgEl.largeDataIndices = largeDataIndices; bgEl.barWidth = barWidth; bgEl.useStyle(backgroundModel.getItemStyle()); group.add(bgEl); progressiveEls && progressiveEls.push(bgEl); } var el = new LargePath({ shape: { points: data.getLayout("largePoints") }, incremental: incrementalId, ignoreCoarsePointer: true, z2: 1 }); el.baseDimIdx = baseDimIdx; el.largeDataIndices = largeDataIndices; el.barWidth = barWidth; group.add(el); el.useStyle(data.getVisual("style")); el.style.stroke = null; getECData(el).seriesIndex = seriesModel.seriesIndex; if (!seriesModel.get("silent")) { el.on("mousedown", largePathUpdateDataIndex); el.on("mousemove", largePathUpdateDataIndex); } progressiveEls && progressiveEls.push(el); } var largePathUpdateDataIndex = throttle(function(event) { var largePath = this; var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY); getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null; }, 30, false); function largePathFindDataIndex(largePath, x, y) { var baseDimIdx = largePath.baseDimIdx; var valueDimIdx = 1 - baseDimIdx; var points = largePath.shape.points; var largeDataIndices = largePath.largeDataIndices; var startPoint = []; var size = []; var barWidth = largePath.barWidth; for (var i = 0, len = points.length / 3; i < len; i++) { var ii = i * 3; size[baseDimIdx] = barWidth; size[valueDimIdx] = points[ii + 2]; startPoint[baseDimIdx] = points[ii + baseDimIdx]; startPoint[valueDimIdx] = points[ii + valueDimIdx]; if (size[valueDimIdx] < 0) { startPoint[valueDimIdx] += size[valueDimIdx]; size[valueDimIdx] = -size[valueDimIdx]; } if (x >= startPoint[0] && x <= startPoint[0] + size[0] && y >= startPoint[1] && y <= startPoint[1] + size[1]) return largeDataIndices[i]; } return -1; } function createBackgroundShape(isHorizontalOrRadial, layout, coord) { if (isCoordinateSystemType(coord, "cartesian2d")) { var rectShape = layout; var coordLayout = coord.getArea(); return { x: isHorizontalOrRadial ? rectShape.x : coordLayout.x, y: isHorizontalOrRadial ? coordLayout.y : rectShape.y, width: isHorizontalOrRadial ? rectShape.width : coordLayout.width, height: isHorizontalOrRadial ? coordLayout.height : rectShape.height }; } else { var coordLayout = coord.getArea(); var sectorShape = layout; return { cx: coordLayout.cx, cy: coordLayout.cy, r0: isHorizontalOrRadial ? coordLayout.r0 : sectorShape.r0, r: isHorizontalOrRadial ? coordLayout.r : sectorShape.r, startAngle: isHorizontalOrRadial ? sectorShape.startAngle : 0, endAngle: isHorizontalOrRadial ? sectorShape.endAngle : Math.PI * 2 }; } } function createBackgroundEl(coord, isHorizontalOrRadial, layout) { return new (coord.type === "polar" ? Sector : Rect$2)({ shape: createBackgroundShape(isHorizontalOrRadial, layout, coord), silent: true, z2: 0 }); } function getLabelPositionForHorizontal(layout, coordSys) { if (layout.height === 0) return coordSys.getOtherAxis(coordSys.getBaseAxis()).inverse ? "bottom" : "top"; return layout.height > 0 ? "bottom" : "top"; } function getLabelPositionForVertical(layout, coordSys) { if (layout.width === 0) return coordSys.getOtherAxis(coordSys.getBaseAxis()).inverse ? "left" : "right"; return layout.width >= 0 ? "right" : "left"; } //#endregion //#region node_modules/echarts/lib/chart/bar/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$54(registers) { registers.registerChartView(BarView); registers.registerSeriesModel(BarSeriesModel); registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, createCrossSeriesLayoutHandler("bar")); registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout("bar")); registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample("bar")); /** * @payload * @property {string} [componentType=series] * @property {number} [dx] * @property {number} [dy] * @property {number} [zoom] * @property {number} [originX] * @property {number} [originY] */ registers.registerAction({ type: "changeAxisOrder", event: "changeAxisOrder", update: "update" }, function(payload, ecModel) { var componentType = payload.componentType || "series"; ecModel.eachComponent({ mainType: componentType, query: payload }, function(componentModel) { if (payload.sortInfo) componentModel.axis.setCategorySortInfo(payload.sortInfo); }); }); registerBarGridAxisHandlers(registers); } //#endregion //#region node_modules/echarts/lib/processor/dataFilter.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataFilter$1(seriesType) { return { seriesType, reset: function(seriesModel, ecModel) { var legendModels = ecModel.findComponents({ mainType: "legend" }); if (!legendModels || !legendModels.length) return; var data = seriesModel.getData(); data.filterSelf(function(idx) { var name = data.getName(idx); for (var i = 0; i < legendModels.length; i++) if (!legendModels[i].isSelected(name)) return false; return true; }); } }; } //#endregion //#region node_modules/echarts/lib/chart/helper/createSeriesDataSimply.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * [Usage]: * (1) * createListSimply(seriesModel, ['value']); * (2) * createListSimply(seriesModel, { * coordDimensions: ['value'], * dimensionsCount: 5 * }); */ function createSeriesDataSimply(seriesModel, opt, nameList) { opt = isArray$1(opt) && { coordDimensions: opt } || extend({ encodeDefine: seriesModel.getEncode() }, opt); var source = seriesModel.getSource(); var dimensions = prepareSeriesDataSchema(source, opt).dimensions; var list = new SeriesData(dimensions, seriesModel); list.initData(source, nameList); return list; } //#endregion //#region node_modules/echarts/lib/visual/LegendVisualProvider.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * LegendVisualProvider is an bridge that pick encoded color from data and * provide to the legend component. */ var LegendVisualProvider = function() { function LegendVisualProvider(getDataWithEncodedVisual, getRawData) { this._getDataWithEncodedVisual = getDataWithEncodedVisual; this._getRawData = getRawData; } LegendVisualProvider.prototype.getAllNames = function() { var rawData = this._getRawData(); return rawData.mapArray(rawData.getName); }; LegendVisualProvider.prototype.containName = function(name) { return this._getRawData().indexOfName(name) >= 0; }; LegendVisualProvider.prototype.indexOfName = function(name) { return this._getDataWithEncodedVisual().indexOfName(name); }; LegendVisualProvider.prototype.getItemVisual = function(dataIndex, key) { return this._getDataWithEncodedVisual().getItemVisual(dataIndex, key); }; return LegendVisualProvider; }(); var innerData = makeInner(); var PieSeriesModel = function(_super) { __extends(PieSeriesModel, _super); function PieSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PieSeriesModel.type; return _this; } /** * @overwrite */ PieSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this)); this._defaultLabelLine(option); }; /** * @overwrite */ PieSeriesModel.prototype.mergeOption = function() { _super.prototype.mergeOption.apply(this, arguments); }; /** * @overwrite */ PieSeriesModel.prototype.getInitialData = function() { return createSeriesDataSimply(this, { coordDimensions: ["value"], encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this) }); }; /** * @overwrite */ PieSeriesModel.prototype.getDataParams = function(dataIndex) { var data = this.getData(); var dataInner = innerData(data); var seats = dataInner.seats; if (!seats) { var valueList_1 = []; data.each(data.mapDimension("value"), function(value) { valueList_1.push(value); }); seats = dataInner.seats = getPercentSeats(valueList_1, data.hostModel.get("percentPrecision")); } var params = _super.prototype.getDataParams.call(this, dataIndex); params.percent = seats[dataIndex] || 0; params.$vars.push("percent"); return params; }; PieSeriesModel.prototype._defaultLabelLine = function(option) { defaultEmphasis(option, "labelLine", ["show"]); var labelLineNormalOpt = option.labelLine; var labelLineEmphasisOpt = option.emphasis.labelLine; labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show; labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show; }; PieSeriesModel.type = "series.pie"; PieSeriesModel.defaultOption = { z: 2, legendHoverLink: true, colorBy: "data", center: ["50%", "50%"], radius: [0, "50%"], clockwise: true, startAngle: 90, endAngle: "auto", padAngle: 0, minAngle: 0, minShowLabelAngle: 0, selectedOffset: 10, percentPrecision: 2, stillShowZeroSum: true, coordinateSystemUsage: "box", left: 0, top: 0, right: 0, bottom: 0, width: null, height: null, label: { rotate: 0, show: true, overflow: "truncate", position: "outer", alignTo: "none", edgeDistance: "25%", distanceToLabelLine: 5 }, labelLine: { show: true, length: 15, length2: 30, smooth: false, minTurnAngle: 90, maxSurfaceAngle: 90, lineStyle: { width: 1, type: "solid" } }, itemStyle: { borderWidth: 1, borderJoin: "round" }, showEmptyCircle: true, emptyCircleStyle: { color: "lightgray", opacity: 1 }, labelLayout: { hideOverlap: true }, emphasis: { scale: true, scaleSize: 5 }, avoidLabelOverlap: true, animationType: "expansion", animationDuration: 1e3, animationTypeUpdate: "transition", animationEasingUpdate: "cubicInOut", animationDurationUpdate: 500, animationEasing: "cubicInOut" }; return PieSeriesModel; }(SeriesModel); registerLayOutOnCoordSysUsage({ fullType: PieSeriesModel.type, getCoord2: function(model) { return model.getShallow("center"); } }); //#endregion //#region node_modules/echarts/lib/chart/pie/labelLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RADIAN$4 = Math.PI / 180; function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) { if (list.length < 2) return; function recalculateXOnSemiToAlignOnEllipseCurve(semi) { var rB = semi.rB; var rB2 = rB * rB; for (var i = 0; i < semi.list.length; i++) { var item = semi.list[i]; var dy = Math.abs(item.label.y - cy); var rA = r + item.len; var rA2 = rA * rA; var newX = cx + (Math.sqrt(Math.abs((1 - dy * dy / rB2) * rA2)) + item.len2) * dir; var deltaX = newX - item.label.x; constrainTextWidth(item, item.targetTextWidth - deltaX * dir, true); item.label.x = newX; } } function recalculateX(items) { var topSemi = { list: [], maxY: 0 }; var bottomSemi = { list: [], maxY: 0 }; for (var i = 0; i < items.length; i++) { if (items[i].labelAlignTo !== "none") continue; var item = items[i]; var semi = item.label.y > cy ? bottomSemi : topSemi; var dy = Math.abs(item.label.y - cy); if (dy >= semi.maxY) { var dx = item.label.x - cx - item.len2 * dir; var rA = r + item.len; semi.rB = Math.abs(dx) < rA ? Math.sqrt(dy * dy / (1 - dx * dx / rA / rA)) : rA; semi.maxY = dy; } semi.list.push(item); } recalculateXOnSemiToAlignOnEllipseCurve(topSemi); recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi); } var len = list.length; for (var i = 0; i < len; i++) if (list[i].position === "outer" && list[i].labelAlignTo === "labelLine") { var dx = list[i].label.x - farthestX; list[i].linePoints[1][0] += dx; list[i].label.x = farthestX; } if (shiftLayoutOnXY(list, 1, viewTop, viewTop + viewHeight)) recalculateX(list); } function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) { var leftList = []; var rightList = []; var leftmostX = Number.MAX_VALUE; var rightmostX = -Number.MAX_VALUE; for (var i = 0; i < labelLayoutList.length; i++) { var label = labelLayoutList[i].label; if (isPositionCenter(labelLayoutList[i])) continue; if (label.x < cx) { leftmostX = Math.min(leftmostX, label.x); leftList.push(labelLayoutList[i]); } else { rightmostX = Math.max(rightmostX, label.x); rightList.push(labelLayoutList[i]); } } for (var i = 0; i < labelLayoutList.length; i++) { var layout = labelLayoutList[i]; if (!isPositionCenter(layout) && layout.linePoints) { if (layout.labelStyleWidth != null) continue; var label = layout.label; var linePoints = layout.linePoints; var targetTextWidth = void 0; if (layout.labelAlignTo === "edge") { if (label.x < cx) targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.edgeDistance; else targetTextWidth = viewLeft + viewWidth - layout.edgeDistance - linePoints[2][0] - layout.labelDistance; } else if (layout.labelAlignTo === "labelLine") { if (label.x < cx) targetTextWidth = leftmostX - viewLeft - layout.bleedMargin; else targetTextWidth = viewLeft + viewWidth - rightmostX - layout.bleedMargin; } else if (label.x < cx) targetTextWidth = label.x - viewLeft - layout.bleedMargin; else targetTextWidth = viewLeft + viewWidth - label.x - layout.bleedMargin; layout.targetTextWidth = targetTextWidth; constrainTextWidth(layout, targetTextWidth, false); } } adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX); adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX); for (var i = 0; i < labelLayoutList.length; i++) { var layout = labelLayoutList[i]; if (!isPositionCenter(layout) && layout.linePoints) { var label = layout.label; var linePoints = layout.linePoints; var isAlignToEdge = layout.labelAlignTo === "edge"; var padding = label.style.padding; var paddingH = padding ? padding[1] + padding[3] : 0; var extraPaddingH = label.style.backgroundColor ? 0 : paddingH; var realTextWidth = layout.rect.width + extraPaddingH; var dist = linePoints[1][0] - linePoints[2][0]; if (isAlignToEdge) { if (label.x < cx) linePoints[2][0] = viewLeft + layout.edgeDistance + realTextWidth + layout.labelDistance; else linePoints[2][0] = viewLeft + viewWidth - layout.edgeDistance - realTextWidth - layout.labelDistance; } else { if (label.x < cx) linePoints[2][0] = label.x + layout.labelDistance; else linePoints[2][0] = label.x - layout.labelDistance; linePoints[1][0] = linePoints[2][0] + dist; } linePoints[1][1] = linePoints[2][1] = label.y; } } } /** * Set max width of each label, and then wrap each label to the max width. * * @param layout label layout * @param availableWidth max width for the label to display * @param forceRecalculate recaculate the text layout even if the current width * is smaller than `availableWidth`. This is useful when the text was previously * wrapped by calling `constrainTextWidth` but now `availableWidth` changed, in * which case, previous wrapping should be redo. */ function constrainTextWidth(layout, availableWidth, forceRecalculate) { if (layout.labelStyleWidth != null) return; var label = layout.label; var style = label.style; var textRect = layout.rect; var bgColor = style.backgroundColor; var padding = style.padding; var paddingH = padding ? padding[1] + padding[3] : 0; var overflow = style.overflow; var oldOuterWidth = textRect.width + (bgColor ? 0 : paddingH); if (availableWidth < oldOuterWidth || forceRecalculate) { if (overflow && overflow.match("break")) { label.setStyle("backgroundColor", null); label.setStyle("width", availableWidth - paddingH); var innerRect = label.getBoundingRect(); label.setStyle("width", Math.ceil(innerRect.width)); label.setStyle("backgroundColor", bgColor); } else { var availableInnerWidth = availableWidth - paddingH; var newWidth = availableWidth < oldOuterWidth ? availableInnerWidth : forceRecalculate ? availableInnerWidth > layout.unconstrainedWidth ? null : availableInnerWidth : null; label.setStyle("width", newWidth); } computeLabelGlobalRect(textRect, label); } } function computeLabelGlobalRect(out, label) { _tmpLabelGeometry.rect = out; computeLabelGeometry(_tmpLabelGeometry, label, _computeLabelGeometryOpt); } var _computeLabelGeometryOpt = { minMarginForce: [ null, 0, null, 0 ], marginDefault: [ 1, 0, 1, 0 ] }; var _tmpLabelGeometry = {}; function isPositionCenter(sectorShape) { return sectorShape.position === "center"; } function pieLabelLayout(seriesModel) { var data = seriesModel.getData(); var labelLayoutList = []; var cx; var cy; var hasLabelRotate = false; var minShowLabelRadian = (seriesModel.get("minShowLabelAngle") || 0) * RADIAN$4; var viewRect = data.getLayout("viewRect"); var r = data.getLayout("r"); var viewWidth = viewRect.width; var viewLeft = viewRect.x; var viewTop = viewRect.y; var viewHeight = viewRect.height; function setNotShow(el) { el.ignore = true; } function isLabelShown(label) { if (!label.ignore) return true; for (var key in label.states) if (label.states[key].ignore === false) return true; return false; } data.each(function(idx) { var sector = data.getItemGraphicEl(idx); var sectorShape = sector.shape; var label = sector.getTextContent(); var labelLine = sector.getTextGuideLine(); var itemModel = data.getItemModel(idx); var labelModel = itemModel.getModel("label"); var labelPosition = labelModel.get("position") || itemModel.get([ "emphasis", "label", "position" ]); var labelDistance = labelModel.get("distanceToLabelLine"); var labelAlignTo = labelModel.get("alignTo"); var edgeDistance = parsePercent(labelModel.get("edgeDistance"), viewWidth); var bleedMargin = labelModel.get("bleedMargin"); if (bleedMargin == null) bleedMargin = Math.min(viewWidth, viewHeight) > 200 ? 10 : 2; var labelLineModel = itemModel.getModel("labelLine"); var labelLineLen = labelLineModel.get("length"); labelLineLen = parsePercent(labelLineLen, viewWidth); var labelLineLen2 = labelLineModel.get("length2"); labelLineLen2 = parsePercent(labelLineLen2, viewWidth); if (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) { each$12(label.states, setNotShow); label.ignore = true; if (labelLine) { each$12(labelLine.states, setNotShow); labelLine.ignore = true; } return; } if (!isLabelShown(label)) return; var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2; var nx = Math.cos(midAngle); var ny = Math.sin(midAngle); var textX; var textY; var linePoints; var textAlign; cx = sectorShape.cx; cy = sectorShape.cy; var isLabelInside = labelPosition === "inside" || labelPosition === "inner"; if (labelPosition === "center") { textX = sectorShape.cx; textY = sectorShape.cy; textAlign = "center"; } else { var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx; var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy; textX = x1 + nx * 3; textY = y1 + ny * 3; if (!isLabelInside) { var x2 = x1 + nx * (labelLineLen + r - sectorShape.r); var y2 = y1 + ny * (labelLineLen + r - sectorShape.r); var x3 = x2 + (nx < 0 ? -1 : 1) * labelLineLen2; var y3 = y2; if (labelAlignTo === "edge") textX = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance; else textX = x3 + (nx < 0 ? -labelDistance : labelDistance); textY = y3; linePoints = [ [x1, y1], [x2, y2], [x3, y3] ]; } textAlign = isLabelInside ? "center" : labelAlignTo === "edge" ? nx > 0 ? "right" : "left" : nx > 0 ? "left" : "right"; } var PI = Math.PI; var labelRotate = 0; var rotate = labelModel.get("rotate"); if (isNumber(rotate)) labelRotate = rotate * (PI / 180); else if (labelPosition === "center") labelRotate = 0; else if (rotate === "radial" || rotate === true) labelRotate = nx < 0 ? -midAngle + PI : -midAngle; else if (rotate === "tangential" || rotate === "tangential-noflip" && labelPosition !== "outside" && labelPosition !== "outer") { var rad = Math.atan2(nx, ny); if (rad < 0) rad = PI * 2 + rad; if (ny > 0 && rotate !== "tangential-noflip") rad = PI + rad; labelRotate = rad - PI; } hasLabelRotate = !!labelRotate; label.x = textX; label.y = textY; label.rotation = labelRotate; label.setStyle({ verticalAlign: "middle" }); if (!isLabelInside) { var textRect = new BoundingRect(0, 0, 0, 0); computeLabelGlobalRect(textRect, label); labelLayoutList.push({ label, labelLine, position: labelPosition, len: labelLineLen, len2: labelLineLen2, minTurnAngle: labelLineModel.get("minTurnAngle"), maxSurfaceAngle: labelLineModel.get("maxSurfaceAngle"), surfaceNormal: new Point(nx, ny), linePoints, textAlign, labelDistance, labelAlignTo, edgeDistance, bleedMargin, rect: textRect, unconstrainedWidth: textRect.width, labelStyleWidth: label.style.width }); } else { label.setStyle({ align: textAlign }); var selectState = label.states.select; if (selectState) { selectState.x += label.x; selectState.y += label.y; } } sector.setTextConfig({ inside: isLabelInside }); }); if (!hasLabelRotate && seriesModel.get("avoidLabelOverlap")) avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop); for (var i = 0; i < labelLayoutList.length; i++) { var layout = labelLayoutList[i]; var label = layout.label; var labelLine = layout.labelLine; var notShowLabel = isNaN(label.x) || isNaN(label.y); if (label) { label.setStyle({ align: layout.textAlign }); if (notShowLabel) { each$12(label.states, setNotShow); label.ignore = true; } var selectState = label.states.select; if (selectState) { selectState.x += label.x; selectState.y += label.y; } } if (labelLine) { var linePoints = layout.linePoints; if (notShowLabel || !linePoints) { each$12(labelLine.states, setNotShow); labelLine.ignore = true; } else { limitTurnAngle(linePoints, layout.minTurnAngle); limitSurfaceAngle(linePoints, layout.surfaceNormal, layout.maxSurfaceAngle); labelLine.setShape({ points: linePoints }); label.__hostTarget.textGuideLineConfig = { anchor: new Point(linePoints[0][0], linePoints[0][1]) }; } } } } //#endregion //#region node_modules/echarts/lib/chart/pie/pieLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI2 = Math.PI * 2; var RADIAN$3 = Math.PI / 180; var pieLayoutStageHandler = createSimpleOverallStageHandler("pie", pieLayout); function pieLayout(ecModel, api) { ecModel.eachSeriesByType("pie", function(seriesModel) { var data = seriesModel.getData(); var valueDim = data.mapDimension("value"); var _a = getCircleLayout(seriesModel, api), cx = _a.cx, cy = _a.cy, r = _a.r, r0 = _a.r0, viewRect = _a.viewRect; var startAngle = -seriesModel.get("startAngle") * RADIAN$3; var endAngle = seriesModel.get("endAngle"); var padAngle = seriesModel.get("padAngle") * RADIAN$3; endAngle = endAngle === "auto" ? startAngle - PI2 : -endAngle * RADIAN$3; var minAndPadAngle = seriesModel.get("minAngle") * RADIAN$3 + padAngle; var validDataCount = 0; data.each(valueDim, function(value) { !isNaN(value) && validDataCount++; }); var sum = data.getSum(valueDim); var unitRadian = Math.PI / (sum || validDataCount) * 2; var clockwise = seriesModel.get("clockwise"); var roseType = seriesModel.get("roseType"); var stillShowZeroSum = seriesModel.get("stillShowZeroSum"); var extent = data.getDataExtent(valueDim); extent[0] = 0; var dir = clockwise ? 1 : -1; var angles = [startAngle, endAngle]; var halfPadAngle = dir * padAngle / 2; normalizeArcAngles(angles, !clockwise); startAngle = angles[0], endAngle = angles[1]; var layoutData = getSeriesLayoutData(seriesModel); layoutData.startAngle = startAngle; layoutData.endAngle = endAngle; layoutData.clockwise = clockwise; layoutData.cx = cx; layoutData.cy = cy; layoutData.r = r; layoutData.r0 = r0; var angleRange = Math.abs(endAngle - startAngle); var restAngle = angleRange; var valueSumLargerThanMinAngle = 0; var currentAngle = startAngle; data.setLayout({ viewRect, r }); data.each(valueDim, function(value, idx) { var angle; if (isNaN(value)) { data.setItemLayout(idx, { angle: NaN, startAngle: NaN, endAngle: NaN, clockwise, cx, cy, r0, r: roseType ? NaN : r }); return; } if (roseType !== "area") angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian; else angle = angleRange / validDataCount; if (angle < minAndPadAngle) { angle = minAndPadAngle; restAngle -= minAndPadAngle; } else valueSumLargerThanMinAngle += value; var endAngle = currentAngle + dir * angle; var actualStartAngle = 0; var actualEndAngle = 0; if (padAngle > angle) { actualStartAngle = currentAngle + dir * angle / 2; actualEndAngle = actualStartAngle; } else { actualStartAngle = currentAngle + halfPadAngle; actualEndAngle = endAngle - halfPadAngle; } data.setItemLayout(idx, { angle, startAngle: actualStartAngle, endAngle: actualEndAngle, clockwise, cx, cy, r0, r: roseType ? linearMap$2(value, extent, [r0, r]) : r }); currentAngle = endAngle; }); if (restAngle < PI2 && validDataCount) { if (restAngle <= .001) { var angle_1 = angleRange / validDataCount; data.each(valueDim, function(value, idx) { if (!isNaN(value)) { var layout = data.getItemLayout(idx); layout.angle = angle_1; var actualStartAngle = 0; var actualEndAngle = 0; if (angle_1 < padAngle) { actualStartAngle = startAngle + dir * (idx + 1 / 2) * angle_1; actualEndAngle = actualStartAngle; } else { actualStartAngle = startAngle + dir * idx * angle_1 + halfPadAngle; actualEndAngle = startAngle + dir * (idx + 1) * angle_1 - halfPadAngle; } layout.startAngle = actualStartAngle; layout.endAngle = actualEndAngle; } }); } else { unitRadian = restAngle / valueSumLargerThanMinAngle; currentAngle = startAngle; data.each(valueDim, function(value, idx) { if (!isNaN(value)) { var layout = data.getItemLayout(idx); var angle = layout.angle === minAndPadAngle ? minAndPadAngle : value * unitRadian; var actualStartAngle = 0; var actualEndAngle = 0; if (angle < padAngle) { actualStartAngle = currentAngle + dir * angle / 2; actualEndAngle = actualStartAngle; } else { actualStartAngle = currentAngle + halfPadAngle; actualEndAngle = currentAngle + dir * angle - halfPadAngle; } layout.startAngle = actualStartAngle; layout.endAngle = actualEndAngle; currentAngle += dir * angle; } }); } } }); } var getSeriesLayoutData = makeInner(); //#endregion //#region node_modules/echarts/lib/chart/pie/PieView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Piece of pie including Sector, Label, LabelLine */ var PiePiece = function(_super) { __extends(PiePiece, _super); function PiePiece(data, idx, startAngle) { var _this = _super.call(this) || this; _this.z2 = 2; var text = new ZRText(); _this.setTextContent(text); _this.updateData(data, idx, startAngle, true); return _this; } PiePiece.prototype.updateData = function(data, idx, startAngle, firstCreate) { var sector = this; var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var emphasisModel = itemModel.getModel("emphasis"); var layout = data.getItemLayout(idx); var sectorShape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout, true), layout); if (isNaN(sectorShape.startAngle)) { sector.setShape(sectorShape); return; } if (firstCreate) { sector.setShape(sectorShape); var animationType = seriesModel.getShallow("animationType"); if (seriesModel.ecModel.ssr) { initProps(sector, { scaleX: 0, scaleY: 0 }, seriesModel, { dataIndex: idx, isFrom: true }); sector.originX = sectorShape.cx; sector.originY = sectorShape.cy; } else if (animationType === "scale") { sector.shape.r = layout.r0; initProps(sector, { shape: { r: layout.r } }, seriesModel, idx); } else if (startAngle != null) { sector.setShape({ startAngle, endAngle: startAngle }); initProps(sector, { shape: { startAngle: layout.startAngle, endAngle: layout.endAngle } }, seriesModel, idx); } else { sector.shape.endAngle = layout.startAngle; updateProps$1(sector, { shape: { endAngle: layout.endAngle } }, seriesModel, idx); } } else { saveOldStyle(sector); updateProps$1(sector, { shape: sectorShape }, seriesModel, idx); } sector.useStyle(data.getItemVisual(idx, "style")); setStatesStylesFromModel(sector, itemModel); var midAngle = (layout.startAngle + layout.endAngle) / 2; var offset = seriesModel.get("selectedOffset"); var dx = Math.cos(midAngle) * offset; var dy = Math.sin(midAngle) * offset; var cursorStyle = itemModel.getShallow("cursor"); cursorStyle && sector.attr("cursor", cursorStyle); this._updateLabel(seriesModel, data, idx); sector.ensureState("emphasis").shape = extend({ r: layout.r + (emphasisModel.get("scale") ? emphasisModel.get("scaleSize") || 0 : 0) }, getSectorCornerRadius(emphasisModel.getModel("itemStyle"), layout)); extend(sector.ensureState("select"), { x: dx, y: dy, shape: getSectorCornerRadius(itemModel.getModel(["select", "itemStyle"]), layout) }); extend(sector.ensureState("blur"), { shape: getSectorCornerRadius(itemModel.getModel(["blur", "itemStyle"]), layout) }); var labelLine = sector.getTextGuideLine(); var labelText = sector.getTextContent(); labelLine && extend(labelLine.ensureState("select"), { x: dx, y: dy }); extend(labelText.ensureState("select"), { x: dx, y: dy }); toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; PiePiece.prototype._updateLabel = function(seriesModel, data, idx) { var sector = this; var itemModel = data.getItemModel(idx); var labelLineModel = itemModel.getModel("labelLine"); var style = data.getItemVisual(idx, "style"); var visualColor = style && style.fill; var visualOpacity = style && style.opacity; setLabelStyle(sector, getLabelStatesModels(itemModel), { labelFetcher: data.hostModel, labelDataIndex: idx, inheritColor: visualColor, defaultOpacity: visualOpacity, defaultText: seriesModel.getFormattedLabel(idx, "normal") || data.getName(idx) }); var labelText = sector.getTextContent(); sector.setTextConfig({ position: null, rotation: null }); labelText.attr({ z2: 10 }); var labelPosition = itemModel.get(["label", "position"]); if (labelPosition !== "outside" && labelPosition !== "outer") sector.removeTextGuideLine(); else { var polyline = this.getTextGuideLine(); if (!polyline) { polyline = new Polyline$1(); this.setTextGuideLine(polyline); } setLabelLineStyle(this, getLabelLineStatesModels(itemModel), { stroke: visualColor, opacity: retrieve3(labelLineModel.get(["lineStyle", "opacity"]), visualOpacity, 1) }); } }; return PiePiece; }(Sector); var PieView = function(_super) { __extends(PieView, _super); function PieView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "pie"; _this.ignoreLabelLineUpdate = true; return _this; } PieView.prototype.render = function(seriesModel, ecModel, api, payload) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; var startAngle; if (!oldData && data.count() > 0) { var shape = data.getItemLayout(0); for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) shape = data.getItemLayout(s); if (shape) startAngle = shape.startAngle; } if (this._emptyCircleSector) group.remove(this._emptyCircleSector); if (data.count() === 0 && seriesModel.get("showEmptyCircle")) { var sector = new Sector({ shape: clone$4(getSeriesLayoutData(seriesModel)) }); sector.useStyle(seriesModel.getModel("emptyCircleStyle").getItemStyle()); this._emptyCircleSector = sector; group.add(sector); } data.diff(oldData).add(function(idx) { var piePiece = new PiePiece(data, idx, startAngle); data.setItemGraphicEl(idx, piePiece); group.add(piePiece); }).update(function(newIdx, oldIdx) { var piePiece = oldData.getItemGraphicEl(oldIdx); piePiece.updateData(data, newIdx, startAngle); piePiece.off("click"); group.add(piePiece); data.setItemGraphicEl(newIdx, piePiece); }).remove(function(idx) { removeElementWithFadeOut(oldData.getItemGraphicEl(idx), seriesModel, idx); }).execute(); pieLabelLayout(seriesModel); if (seriesModel.get("animationTypeUpdate") !== "expansion") this._data = data; }; PieView.prototype.dispose = function() {}; PieView.prototype.containPoint = function(point, seriesModel) { var itemLayout = seriesModel.getData().getItemLayout(0); if (itemLayout) { var dx = point[0] - itemLayout.cx; var dy = point[1] - itemLayout.cy; var radius = Math.sqrt(dx * dx + dy * dy); return radius <= itemLayout.r && radius >= itemLayout.r0; } }; PieView.type = "pie"; return PieView; }(ChartView); //#endregion //#region node_modules/echarts/lib/processor/negativeDataFilter.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function negativeDataFilter(seriesType) { return { seriesType, reset: function(seriesModel, ecModel) { var data = seriesModel.getData(); data.filterSelf(function(idx) { var valueDim = data.mapDimension("value"); var curValue = data.get(valueDim, idx); if (isNumber(curValue) && !isNaN(curValue) && curValue < 0) return false; return true; }); } }; } //#endregion //#region node_modules/echarts/lib/chart/pie/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$53(registers) { registers.registerChartView(PieView); registers.registerSeriesModel(PieSeriesModel); createLegacyDataSelectAction("pie", registers.registerAction); registers.registerLayout(pieLayoutStageHandler); registers.registerProcessor(dataFilter$1("pie")); registers.registerProcessor(negativeDataFilter("pie")); } //#endregion //#region node_modules/echarts/lib/chart/scatter/ScatterSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ScatterSeriesModel = function(_super) { __extends(ScatterSeriesModel, _super); function ScatterSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ScatterSeriesModel.type; _this.hasSymbolVisual = true; return _this; } ScatterSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this, { useEncodeDefaulter: true }); }; ScatterSeriesModel.prototype.getProgressive = function() { var progressive = this.option.progressive; if (progressive == null) return this.option.large ? 5e3 : this.get("progressive"); return progressive; }; ScatterSeriesModel.prototype.getProgressiveThreshold = function() { var progressiveThreshold = this.option.progressiveThreshold; if (progressiveThreshold == null) return this.option.large ? 1e4 : this.get("progressiveThreshold"); return progressiveThreshold; }; ScatterSeriesModel.prototype.brushSelector = function(dataIndex, data, selectors) { return selectors.point(data.getItemLayout(dataIndex)); }; ScatterSeriesModel.prototype.getZLevelKey = function() { return this.getData().count() > this.getProgressiveThreshold() ? this.id : ""; }; ScatterSeriesModel.type = "series.scatter"; ScatterSeriesModel.dependencies = [ "grid", "polar", "geo", "singleAxis", "calendar", "matrix" ]; ScatterSeriesModel.defaultOption = { coordinateSystem: "cartesian2d", z: 2, legendHoverLink: true, symbolSize: 10, large: false, largeThreshold: 2e3, itemStyle: { opacity: .8 }, emphasis: { scale: true }, clip: true, select: { itemStyle: { borderColor: tokens.color.primary } }, universalTransition: { divideShape: "clone" } }; return ScatterSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/helper/LargeSymbolDraw.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BOOST_SIZE_THRESHOLD = 4; var LargeSymbolPathShape = function() { function LargeSymbolPathShape() {} return LargeSymbolPathShape; }(); var LargeSymbolPath = function(_super) { __extends(LargeSymbolPath, _super); function LargeSymbolPath(opts) { var _this = _super.call(this, opts) || this; _this._off = 0; _this.hoverDataIdx = -1; return _this; } LargeSymbolPath.prototype.getDefaultShape = function() { return new LargeSymbolPathShape(); }; LargeSymbolPath.prototype.reset = function() { this.notClear = false; this._off = 0; }; LargeSymbolPath.prototype.beforeBrush = function(param) { if (param && !param.contentRetained) this.reset(); }; LargeSymbolPath.prototype.buildPath = function(path, shape) { var points = shape.points; var size = shape.size; var symbolProxy = this.symbolProxy; var symbolProxyShape = symbolProxy.shape; var ctx = path.getContext ? path.getContext() : path; var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD; var softClipShape = this.softClipShape; var i; if (canBoost) { this._ctx = ctx; return; } this._ctx = null; for (i = this._off; i < points.length;) { var x = points[i++]; var y = points[i++]; if (isNaN(x) || isNaN(y)) continue; if (softClipShape && !softClipShape.contain(x, y)) continue; symbolProxyShape.x = x - size[0] / 2; symbolProxyShape.y = y - size[1] / 2; symbolProxyShape.width = size[0]; symbolProxyShape.height = size[1]; symbolProxy.buildPath(path, symbolProxyShape, true); } if (this.incremental) { this._off = i; this.notClear = true; } }; LargeSymbolPath.prototype.afterBrush = function() { var shape = this.shape; var points = shape.points; var size = shape.size; var ctx = this._ctx; var softClipShape = this.softClipShape; var i; if (!ctx) return; for (i = this._off; i < points.length;) { var x = points[i++]; var y = points[i++]; if (isNaN(x) || isNaN(y)) continue; if (softClipShape && !softClipShape.contain(x, y)) continue; ctx.fillRect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]); } if (this.incremental) { this._off = i; this.notClear = true; } }; LargeSymbolPath.prototype.findDataIndex = function(x, y) { var shape = this.shape; var points = shape.points; var size = shape.size; var w = Math.max(size[0], 4); var h = Math.max(size[1], 4); for (var idx = points.length / 2 - 1; idx >= 0; idx--) { var i = idx * 2; var x0 = points[i] - w / 2; var y0 = points[i + 1] - h / 2; if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) return idx; } return -1; }; LargeSymbolPath.prototype.contain = function(x, y) { var localPos = this.transformCoordToLocal(x, y); var rect = this.getBoundingRect(); x = localPos[0]; y = localPos[1]; if (rect.contain(x, y)) return (this.hoverDataIdx = this.findDataIndex(x, y)) >= 0; this.hoverDataIdx = -1; return false; }; LargeSymbolPath.prototype.getBoundingRect = function() { var rect = this._rect; if (!rect) { var shape = this.shape; var points = shape.points; var size = shape.size; var w = size[0]; var h = size[1]; var minX = Infinity; var minY = Infinity; var maxX = -Infinity; var maxY = -Infinity; for (var i = 0; i < points.length;) { var x = points[i++]; var y = points[i++]; minX = Math.min(x, minX); maxX = Math.max(x, maxX); minY = Math.min(y, minY); maxY = Math.max(y, maxY); } rect = this._rect = new BoundingRect(minX - w / 2, minY - h / 2, maxX - minX + w, maxY - minY + h); } return rect; }; return LargeSymbolPath; }(Path); var LargeSymbolDraw = function() { function LargeSymbolDraw() { this.group = new Group$3(); } /** * Update symbols draw by new data */ LargeSymbolDraw.prototype.updateData = function(data, opt) { this._clear(); this._data = data; var symbolEl = this._create(); symbolEl.setShape({ points: data.getLayout("points") }); this._setCommon(symbolEl, data, opt); }; LargeSymbolDraw.prototype.updateLayout = function(opt) { var data = this._data; if (!data) return; var points = data.getLayout("points"); this.group.eachChild(function(child) { if (child.startIndex != null) { var len = (child.endIndex - child.startIndex) * 2; var byteOffset = child.startIndex * 4 * 2; points = new Float32Array(points.buffer, byteOffset, len); } child.setShape("points", points); child.reset(); child.stopAnimation(); }); }; LargeSymbolDraw.prototype.incrementalPrepareUpdate = function(data) { this._clear(); }; LargeSymbolDraw.prototype.incrementalUpdate = function(taskParams, data, incrementalId, opt) { var lastAdded = this._newAdded[0]; var points = data.getLayout("points"); var oldPoints = lastAdded && lastAdded.shape.points; validateUpstreamOutputRange(data.getLayout("pointsRange"), taskParams); if (oldPoints && oldPoints.length < 2e4) { var oldLen = oldPoints.length; var newPoints = new Float32Array(oldLen + points.length); newPoints.set(oldPoints); newPoints.set(points, oldLen); lastAdded.endIndex = taskParams.end; lastAdded.setShape({ points: newPoints }); } else { this._newAdded = []; var symbolEl = this._create(); symbolEl.startIndex = taskParams.start; symbolEl.endIndex = taskParams.end; symbolEl.incremental = incrementalId; symbolEl.setShape({ points }); this._setCommon(symbolEl, data, opt); } }; LargeSymbolDraw.prototype.eachRendered = function(cb) { this._newAdded[0] && cb(this._newAdded[0]); }; LargeSymbolDraw.prototype._create = function() { var symbolEl = new LargeSymbolPath({ cursor: "default" }); symbolEl.ignoreCoarsePointer = true; this.group.add(symbolEl); this._newAdded.push(symbolEl); return symbolEl; }; LargeSymbolDraw.prototype._setCommon = function(symbolEl, data, opt) { var hostModel = data.hostModel; opt = opt || {}; var size = data.getVisual("symbolSize"); symbolEl.setShape("size", size instanceof Array ? size : [size, size]); symbolEl.softClipShape = opt.clipShape || null; symbolEl.symbolProxy = createSymbol$1(data.getVisual("symbol"), 0, 0, 0, 0); symbolEl.setColor = symbolEl.symbolProxy.setColor; var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD; symbolEl.useStyle(hostModel.getModel("itemStyle").getItemStyle(extrudeShadow ? [ "color", "shadowBlur", "shadowColor" ] : ["color"])); var globalStyle = data.getVisual("style"); var visualColor = globalStyle && globalStyle.fill; if (visualColor) symbolEl.setColor(visualColor); var ecData = getECData(symbolEl); ecData.seriesIndex = hostModel.seriesIndex; symbolEl.on("mousemove", function(e) { ecData.dataIndex = null; var dataIndex = symbolEl.hoverDataIdx; if (dataIndex >= 0) ecData.dataIndex = dataIndex + (symbolEl.startIndex || 0); }); }; LargeSymbolDraw.prototype.remove = function() { this._clear(); }; LargeSymbolDraw.prototype._clear = function() { this._newAdded = []; this.group.removeAll(); }; return LargeSymbolDraw; }(); //#endregion //#region node_modules/echarts/lib/chart/scatter/ScatterView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ScatterView = function(_super) { __extends(ScatterView, _super); function ScatterView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ScatterView.type; return _this; } ScatterView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); this._updateSymbolDraw(data, seriesModel).updateData(data, createSymbolDrawOpt$1(seriesModel)); this._finished = true; }; ScatterView.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); this._updateSymbolDraw(data, seriesModel).incrementalPrepareUpdate(data); this._finished = false; }; ScatterView.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) { this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData(), getIncrementalId(seriesModel), createSymbolDrawOpt$1(seriesModel)); this._finished = taskParams.end === seriesModel.getData().count(); }; /** * See also VIEW_COORD_SYS_ANIMATION */ ScatterView.prototype.updateTransform = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); this.group.dirty(); if (!this._finished) return { update: true }; else { var res = pointsLayout("").reset(seriesModel, ecModel, api); if (res.progress) res.progress({ start: 0, end: data.count(), count: data.count() }, data); this._symbolDraw.updateLayout(createSymbolDrawOpt$1(seriesModel)); } }; ScatterView.prototype.eachRendered = function(cb) { this._symbolDraw && this._symbolDraw.eachRendered(cb); }; ScatterView.prototype._updateSymbolDraw = function(data, seriesModel) { var symbolDraw = this._symbolDraw; var isLargeDraw = seriesModel.pipelineContext.large; if (!symbolDraw || isLargeDraw !== this._isLargeDraw) { symbolDraw && symbolDraw.remove(); symbolDraw = this._symbolDraw = isLargeDraw ? new LargeSymbolDraw() : new SymbolDraw(); this._isLargeDraw = isLargeDraw; this.group.removeAll(); } this.group.add(symbolDraw.group); return symbolDraw; }; ScatterView.prototype.remove = function(ecModel, api) { this._symbolDraw && this._symbolDraw.remove(true); this._symbolDraw = null; }; ScatterView.prototype.dispose = function() {}; ScatterView.type = "scatter"; return ScatterView; }(ChartView); function createSymbolDrawOpt$1(seriesModel) { return { clipShape: createCoordSysClipAreaSimply(seriesModel) }; } //#endregion //#region node_modules/echarts/lib/coord/cartesian/AxisModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CartesianAxisModel = function(_super) { __extends(CartesianAxisModel, _super); function CartesianAxisModel() { return _super !== null && _super.apply(this, arguments) || this; } CartesianAxisModel.prototype.getCoordSysModel = function() { return this.getReferringComponents("grid", SINGLE_REFERRING).models[0]; }; CartesianAxisModel.type = "cartesian2dAxis"; return CartesianAxisModel; }(ComponentModel); mixin(CartesianAxisModel, AxisModelCommonMixin); //#endregion //#region node_modules/echarts/lib/coord/axisDefault.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var defaultOption$1 = { show: true, z: 0, inverse: false, name: "", nameLocation: "end", nameRotate: null, nameTruncate: { maxWidth: null, ellipsis: "...", placeholder: "." }, nameTextStyle: {}, nameGap: 15, silent: false, triggerEvent: false, tooltip: { show: false }, axisPointer: {}, axisLine: { show: true, onZero: "auto", onZeroAxisIndex: null, lineStyle: { color: tokens.color.axisLine, width: 1, type: "solid" }, symbol: ["none", "none"], symbolSize: [10, 15], breakLine: true }, axisTick: { show: true, inside: false, length: 5, lineStyle: { width: 1 } }, axisLabel: { show: true, inside: false, rotate: 0, showMinLabel: null, showMaxLabel: null, margin: 8, fontSize: 12, color: tokens.color.axisLabel, textMargin: [0, 3] }, splitLine: { show: true, showMinLine: true, showMaxLine: true, lineStyle: { color: tokens.color.axisSplitLine, width: 1, type: "solid" } }, splitArea: { show: false, areaStyle: { color: [tokens.color.backgroundTint, tokens.color.backgroundTransparent] } }, breakArea: { show: true, itemStyle: { color: tokens.color.neutral00, borderColor: tokens.color.border, borderWidth: 1, borderType: [3, 3], opacity: .6 }, zigzagAmplitude: 4, zigzagMinSpan: 4, zigzagMaxSpan: 20, zigzagZ: 100, expandOnClick: true }, breakLabelLayout: { moveOverlap: "auto" } }; var categoryAxis = merge({ boundaryGap: true, deduplication: null, jitter: 0, jitterOverlap: true, jitterMargin: 2, splitLine: { show: false }, axisTick: { alignWithLabel: false, interval: "auto", show: "auto" }, axisLabel: { interval: "auto" } }, defaultOption$1); var valueAxis = merge({ boundaryGap: [0, 0], axisLine: { show: "auto" }, axisTick: { show: "auto" }, splitNumber: 5, minorTick: { show: false, splitNumber: 5, length: 3, lineStyle: {} }, minorSplitLine: { show: false, lineStyle: { color: tokens.color.axisMinorSplitLine, width: 1 } } }, defaultOption$1); var axisDefault_default = { category: categoryAxis, value: valueAxis, time: merge({ splitNumber: 6, axisLabel: { rich: { primary: { fontWeight: "bold" } } }, splitLine: { show: false } }, valueAxis), log: defaults({ logBase: 10 }, valueAxis) }; //#endregion //#region node_modules/echarts/lib/coord/axisModelCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Generate sub axis model class * @param axisName 'x' 'y' 'radius' 'angle' 'parallel' ... */ function axisModelCreator(registers, axisName, BaseAxisModelClass, extraDefaultOption) { each$12(AXIS_TYPES, function(v, axisType) { var defaultOption = merge(merge({}, axisDefault_default[axisType], true), extraDefaultOption, true); var AxisModel = function(_super) { __extends(AxisModel, _super); function AxisModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = axisName + "Axis." + axisType; return _this; } AxisModel.prototype.mergeDefaultAndTheme = function(option, ecModel) { var layoutMode = fetchLayoutMode(this); var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; merge(option, ecModel.getTheme().get(axisType + "Axis")); merge(option, this.getDefaultOption()); option.type = getAxisType(option); if (layoutMode) mergeLayoutParam(option, inputPositionParams, layoutMode); }; AxisModel.prototype.optionUpdated = function() { if (this.option.type === "category") this.__ordinalMeta = OrdinalMeta.createByAxisModel(this); }; /** * Should not be called before all of 'getInitailData' finished. * Because categories are collected during initializing data. */ AxisModel.prototype.getCategories = function(rawData) { var option = this.option; if (option.type === "category") { if (rawData) return option.data; return this.__ordinalMeta.categories; } }; AxisModel.prototype.getOrdinalMeta = function() { return this.__ordinalMeta; }; AxisModel.prototype.updateAxisBreaks = function(payload) { var axisBreakHelper = getAxisBreakHelper(); return axisBreakHelper ? axisBreakHelper.updateModelAxisBreak(this, payload) : { breaks: [] }; }; AxisModel.type = axisName + "Axis." + axisType; AxisModel.defaultOption = defaultOption; return AxisModel; }(BaseAxisModelClass); registers.registerComponentModel(AxisModel); }); registers.registerSubTypeDefaulter(axisName + "Axis", getAxisType); } function getAxisType(option) { return option.type || (option.data ? "category" : "value"); } //#endregion //#region node_modules/echarts/lib/coord/cartesian/Cartesian.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Cartesian = function() { function Cartesian(name) { this.type = "cartesian"; this._dimList = []; this._axes = {}; this.name = name || ""; } Cartesian.prototype.getAxis = function(dim) { return this._axes[dim]; }; Cartesian.prototype.getAxes = function() { return map$1(this._dimList, function(dim) { return this._axes[dim]; }, this); }; Cartesian.prototype.getAxesByScale = function(scaleType) { scaleType = scaleType.toLowerCase(); return filter(this.getAxes(), function(axis) { return axis.scale.type === scaleType; }); }; Cartesian.prototype.addAxis = function(axis) { var dim = axis.dim; this._axes[dim] = axis; this._dimList.push(dim); }; return Cartesian; }(); //#endregion //#region node_modules/echarts/lib/coord/cartesian/Cartesian2D.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var cartesian2DDimensions = ["x", "y"]; function canCalculateAffineTransform(scale) { return (scale.type === "interval" || scale.type === "time") && !hasBreaks(scale); } var Cartesian2D = function(_super) { __extends(Cartesian2D, _super); function Cartesian2D() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = COORD_SYS_TYPE_CARTESIAN_2D; _this.dimensions = cartesian2DDimensions; return _this; } /** * Calculate an affine transform matrix if two axes are time or value. * It's mainly for accelartion on the large time series data. */ Cartesian2D.prototype.calcAffineTransform = function() { this._transform = this._invTransform = null; var xAxisScale = this.getAxis("x").scale; var yAxisScale = this.getAxis("y").scale; if (!canCalculateAffineTransform(xAxisScale) || !canCalculateAffineTransform(yAxisScale)) return; var xScaleExtent = getScaleExtentForMappingUnsafe(xAxisScale, null); var yScaleExtent = getScaleExtentForMappingUnsafe(yAxisScale, null); var start = this.dataToPoint([xScaleExtent[0], yScaleExtent[0]]); var end = this.dataToPoint([xScaleExtent[1], yScaleExtent[1]]); var xScaleSpan = xScaleExtent[1] - xScaleExtent[0]; var yScaleSpan = yScaleExtent[1] - yScaleExtent[0]; if (!xScaleSpan || !yScaleSpan) return; var scaleX = (end[0] - start[0]) / xScaleSpan; var scaleY = (end[1] - start[1]) / yScaleSpan; var translateX = start[0] - xScaleExtent[0] * scaleX; var translateY = start[1] - yScaleExtent[0] * scaleY; var m = this._transform = [ scaleX, 0, 0, scaleY, translateX, translateY ]; this._invTransform = invert([], m); }; /** * Base axis will be used on stacking and series such as 'bar', 'pictorialBar', etc. */ Cartesian2D.prototype.getBaseAxis = function() { return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x"); }; Cartesian2D.prototype.containPoint = function(point) { var axisX = this.getAxis("x"); var axisY = this.getAxis("y"); return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1])); }; Cartesian2D.prototype.containData = function(data) { return this.getAxis("x").containData(data[0]) && this.getAxis("y").containData(data[1]); }; Cartesian2D.prototype.containZone = function(data1, data2) { var zoneDiag1 = this.dataToPoint(data1); var zoneDiag2 = this.dataToPoint(data2); var area = this.getArea(); var zone = new BoundingRect(zoneDiag1[0], zoneDiag1[1], zoneDiag2[0] - zoneDiag1[0], zoneDiag2[1] - zoneDiag1[1]); return area.intersect(zone); }; Cartesian2D.prototype.dataToPoint = function(data, clamp, out) { out = out || []; var xVal = data[0]; var yVal = data[1]; if (this._transform && xVal != null && isFinite(xVal) && yVal != null && isFinite(yVal)) return applyTransform$1(out, data, this._transform); var xAxis = this.getAxis("x"); var yAxis = this.getAxis("y"); out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(xVal, clamp)); out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(yVal, clamp)); return out; }; Cartesian2D.prototype.clampData = function(data, out) { var xScale = this.getAxis("x").scale; var yScale = this.getAxis("y").scale; var xAxisExtent = xScale.getExtent(); var yAxisExtent = yScale.getExtent(); var x = xScale.parse(data[0]); var y = yScale.parse(data[1]); out = out || []; out[0] = Math.min(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1])); out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1])); return out; }; Cartesian2D.prototype.pointToData = function(point, clamp, out) { out = out || []; if (this._invTransform) return applyTransform$1(out, point, this._invTransform); var xAxis = this.getAxis("x"); var yAxis = this.getAxis("y"); out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp); out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp); return out; }; Cartesian2D.prototype.getOtherAxis = function(axis) { return this.getAxis(axis.dim === "x" ? "y" : "x"); }; /** * Get rect area of cartesian. * Area will have a contain function to determine if a point is in the coordinate system. */ Cartesian2D.prototype.getArea = function(tolerance) { tolerance = tolerance || 0; var xExtent = this.getAxis("x").getGlobalExtent(); var yExtent = this.getAxis("y").getGlobalExtent(); var x = Math.min(xExtent[0], xExtent[1]) - tolerance; var y = Math.min(yExtent[0], yExtent[1]) - tolerance; return new BoundingRect(x, y, Math.max(xExtent[0], xExtent[1]) - x + tolerance, Math.max(yExtent[0], yExtent[1]) - y + tolerance); }; return Cartesian2D; }(Cartesian); //#endregion //#region node_modules/echarts/lib/coord/axisAlignTicks.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * NOTE: See the summary of the process of extent determination in the comment of `scaleMapper.setExtent`. * * @see SCALE_EXTENT_CONSTRUCTION for the full processing flow. */ function scaleCalcAlign(targetAxis, alignToScale) { var targetScale = targetAxis.scale; var targetAxisModel = targetAxis.model; assert(targetScale && targetAxisModel && (targetScale instanceof IntervalScale || targetScale instanceof LogScale) && (alignToScale instanceof IntervalScale || alignToScale instanceof LogScale)); var targetExtentInfo = adoptScaleRawExtentInfoAndPrepare(targetScale, targetAxisModel, targetAxisModel.ecModel, targetAxis, null); var isTargetLogScale = isLogScale(targetScale); var alignToScaleLinear = isLogScale(alignToScale) ? alignToScale.intervalStub : alignToScale; var targetIntervalStub = isTargetLogScale ? targetScale.intervalStub : targetScale; var targetLogScaleBase = targetScale.base; var alignToTicks = alignToScaleLinear.getTicks(); var alignToExpNiceTicks = alignToScaleLinear.getTicks({ expandToNicedExtent: true }); var alignToSegCount = alignToTicks.length - 1; assert(!hasBreaks(alignToScale) && !hasBreaks(targetScale)); assert(alignToSegCount > 0); assert(alignToExpNiceTicks.length === alignToTicks.length); assert(alignToTicks[0].value <= alignToTicks[alignToSegCount].value); assert(alignToExpNiceTicks[0].value <= alignToTicks[0].value && alignToTicks[alignToSegCount].value <= alignToExpNiceTicks[alignToSegCount].value); if (alignToSegCount >= 2) { assert(alignToExpNiceTicks[1].value === alignToTicks[1].value); assert(alignToExpNiceTicks[alignToSegCount - 1].value === alignToTicks[alignToSegCount - 1].value); } var t0; var t1; var alignToNiceSegCount; if (alignToSegCount === 1) { t0 = t1 = 0; alignToNiceSegCount = 1; } else if (alignToSegCount === 2) { var interval0 = mathAbs$4(alignToTicks[0].value - alignToTicks[1].value); var interval1 = mathAbs$4(alignToTicks[1].value - alignToTicks[2].value); t0 = t1 = 0; if (interval0 === interval1) alignToNiceSegCount = 2; else { alignToNiceSegCount = 1; if (interval0 < interval1) t0 = interval0 / interval1; else t1 = interval1 / interval0; } } else { var alignToInterval = alignToScaleLinear.getConfig().interval; t0 = (1 - (alignToTicks[0].value - alignToExpNiceTicks[0].value) / alignToInterval) % 1; t1 = (1 - (alignToExpNiceTicks[alignToSegCount].value - alignToTicks[alignToSegCount].value) / alignToInterval) % 1; alignToNiceSegCount = alignToSegCount - (t0 ? 1 : 0) - (t1 ? 1 : 0); } assert(alignToNiceSegCount >= 1); var dataZoomFixMinMax = targetExtentInfo.zoomFixMM; var hasDataZoomFixMinMax = dataZoomFixMinMax[0] || dataZoomFixMinMax[1]; var targetMinMaxFixed = [targetExtentInfo.fixMM[0] || hasDataZoomFixMinMax, targetExtentInfo.fixMM[1] || hasDataZoomFixMinMax]; var targetOldOutermostExtent = targetScale.getExtent(); var targetOldIntervalExtent = targetIntervalStub.getExtent(); var targetExtent = intervalScaleEnsureValidExtent(targetOldIntervalExtent, targetMinMaxFixed); var min; var max; var interval; var intervalPrecision; var maxNice; var minNice; function loopIncreaseInterval(cb) { var LOOP_MAX = 50; var loopGuard = 0; for (; loopGuard < LOOP_MAX; loopGuard++) { if (cb()) break; interval = isTargetLogScale ? interval * mathMax$9(targetLogScaleBase, 2) : increaseInterval(interval); intervalPrecision = getIntervalPrecision(interval); } if (loopGuard >= LOOP_MAX) warn("incorrect impl in `scaleCalcAlign`."); } function updateMinFromMinNice() { min = round$3(minNice - interval * t0, intervalPrecision); } function updateMaxFromMaxNice() { max = round$3(maxNice + interval * t1, intervalPrecision); } function updateMinNiceFromMinT0Interval() { minNice = t0 ? round$3(min + interval * t0, intervalPrecision) : min; } function updateMaxNiceFromMaxT1Interval() { maxNice = t1 ? round$3(max - interval * t1, intervalPrecision) : max; } if (targetMinMaxFixed[0] && targetMinMaxFixed[1]) { min = targetExtent[0]; max = targetExtent[1]; interval = (max - min) / (alignToNiceSegCount + t0 + t1); var axisPxExtent = targetAxis.getExtent(); var pxSpan = mathAbs$4(axisPxExtent[1] - axisPxExtent[0]); intervalPrecision = getAcceptableTickPrecision([max, min], pxSpan, .5 / alignToNiceSegCount); updateMinNiceFromMinT0Interval(); updateMaxNiceFromMaxT1Interval(); if (isNullableNumberFinite(intervalPrecision)) interval = round$3(interval, intervalPrecision); } else { var targetSpan = targetExtent[1] - targetExtent[0]; interval = isTargetLogScale ? mathMax$9(quantity(targetSpan), 1) : nice(targetSpan / alignToNiceSegCount, 2); intervalPrecision = getIntervalPrecision(interval); if (targetMinMaxFixed[0]) { min = targetExtent[0]; loopIncreaseInterval(function() { updateMinNiceFromMinT0Interval(); maxNice = round$3(minNice + interval * alignToNiceSegCount, intervalPrecision); updateMaxFromMaxNice(); if (max >= targetExtent[1]) return true; }); } else if (targetMinMaxFixed[1]) { max = targetExtent[1]; loopIncreaseInterval(function() { updateMaxNiceFromMaxT1Interval(); minNice = round$3(maxNice - interval * alignToNiceSegCount, intervalPrecision); updateMinFromMinNice(); if (min <= targetExtent[0]) return true; }); } else loopIncreaseInterval(function() { minNice = round$3(mathCeil(targetExtent[0] / interval) * interval, intervalPrecision); maxNice = round$3(mathFloor(targetExtent[1] / interval) * interval, intervalPrecision); var currIntervalCount = mathRound$1((maxNice - minNice) / interval); if (currIntervalCount <= alignToNiceSegCount) { var moreCount = alignToNiceSegCount - currIntervalCount; var moreCountPair = void 0; var mayEnhanceZero = targetExtentInfo.incl0 || isTargetLogScale; if (mayEnhanceZero && targetExtent[0] === 0) moreCountPair = [0, moreCount]; else if (mayEnhanceZero && targetExtent[1] === 0) moreCountPair = [moreCount, 0]; else { var lessHalfCount = mathFloor(moreCount / 2); moreCountPair = moreCount % 2 === 0 ? [lessHalfCount, lessHalfCount] : min + max < targetExtent[0] + targetExtent[1] ? [lessHalfCount, lessHalfCount + 1] : [lessHalfCount + 1, lessHalfCount]; } minNice = round$3(minNice - interval * moreCountPair[0], intervalPrecision); maxNice = round$3(maxNice + interval * moreCountPair[1], intervalPrecision); updateMinFromMinNice(); updateMaxFromMaxNice(); if (min <= targetExtent[0] && max >= targetExtent[1]) return true; } }); } updateIntervalOrLogScaleForNiceOrAligned(targetScale, targetMinMaxFixed, targetOldIntervalExtent, [min, max], targetOldOutermostExtent, { interval, intervalCount: alignToNiceSegCount, intervalPrecision, niceExtent: [minNice, maxNice] }); targetScale.freeze(); } //#endregion //#region node_modules/echarts/lib/coord/cartesian/Grid.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Grid is a region which contains at most 4 cartesian systems * * TODO Default cartesian */ var XY_TO_MARGIN_IDX = [[3, 1], [0, 2]]; var Grid = function() { function Grid(gridModel, ecModel, api) { this.type = "grid"; this._coordsMap = {}; this._coordsList = []; this._axesMap = {}; this._axesList = []; this.axisPointerEnabled = true; this.dimensions = cartesian2DDimensions; this._initCartesian(gridModel, ecModel, api); this.model = gridModel; } Grid.prototype.getRect = function() { return this._rect; }; Grid.prototype.update = function(ecModel, api) { var axesMap = this._axesMap; each$12(this._axesList, function(axis) { scaleRawExtentInfoCreate(axis, 1); var scale = axis.scale; if (isOrdinalScale(scale)) scale.setSortInfo(axis.model.get("categorySortInfo")); }); function updateAxisTicks(axes) { var axesIndices = keys(axes); var axisNeedsAlign = []; for (var i = axesIndices.length - 1; i >= 0; i--) { var axis = axes[+axesIndices[i]]; if (axis.__alignTo) axisNeedsAlign.push(axis); else scaleCalcNice(axis); } each$12(axisNeedsAlign, function(axis) { if (incapableOfAlignNeedFallback(axis, axis.__alignTo)) scaleCalcNice(axis); else scaleCalcAlign(axis, axis.__alignTo.scale); }); } updateAxisTicks(axesMap.x); updateAxisTicks(axesMap.y); var onZeroRecords = {}; each$12(axesMap.x, function(xAxis) { fixAxisOnZero(axesMap, "y", xAxis, onZeroRecords); }); each$12(axesMap.y, function(yAxis) { fixAxisOnZero(axesMap, "x", yAxis, onZeroRecords); }); this.resize(this.model, api); }; /** * Resize the grid. * * [NOTE] * If both "grid.containLabel/grid.contain" and pixel-required-data-processing (such as, "dataSampling") * exist, circular dependency occurs in logic. * The final compromised sequence is: * 1. Calculate "axis.extent" (pixel extent) and AffineTransform based on only "grid layout options". * Not accurate if "grid.containLabel/grid.contain" is required, but it is a compromise to avoid * circular dependency. * 2. Perform "series data processing" (where "dataSampling" requires "axis.extent"). * 3. Calculate "scale.extent" (data extent) based on "processed series data". * 4. Modify "axis.extent" for "grid.containLabel/grid.contain": * 4.1. Calculate "axis labels" based on "scale.extent". * 4.2. Modify "axis.extent" by the bounding rects of "axis labels and names". */ Grid.prototype.resize = function(gridModel, api, beforeDataProcessing) { var layoutRef = createBoxLayoutReference(gridModel, api); var gridRect = this._rect = getLayoutRect(gridModel.getBoxLayoutParams(), layoutRef.refContainer); var axesMap = this._axesMap; var coordsList = this._coordsList; var optionContainLabel = gridModel.get("containLabel"); updateAllAxisExtentTransByGridRect(axesMap, gridRect); if (!beforeDataProcessing) { var axisBuilderSharedCtx = createAxisBiulders(gridRect, coordsList, axesMap, optionContainLabel, api); var noPxChange = void 0; if (optionContainLabel) { if (legacyLayOutGridByContainLabel) { legacyLayOutGridByContainLabel(this._axesList, gridRect); updateAllAxisExtentTransByGridRect(axesMap, gridRect); } else { log("Specified `grid.containLabel` but no `use(LegacyGridContainLabel)`;use `grid.outerBounds` instead.", true); noPxChange = layOutGridByOuterBounds(gridRect.clone(), "axisLabel", null, gridRect, axesMap, axisBuilderSharedCtx, layoutRef); } } else { var _a = prepareOuterBounds(gridModel, gridRect, layoutRef), outerBoundsRect = _a.outerBoundsRect, parsedOuterBoundsContain = _a.parsedOuterBoundsContain, outerBoundsClamp = _a.outerBoundsClamp; if (outerBoundsRect) noPxChange = layOutGridByOuterBounds(outerBoundsRect, parsedOuterBoundsContain, outerBoundsClamp, gridRect, axesMap, axisBuilderSharedCtx, layoutRef); } createOrUpdateAxesView(gridRect, axesMap, AxisTickLabelComputingKind.determine, null, noPxChange, layoutRef); each$12(this._coordsList, function(coord) { coord.calcAffineTransform(); }); } }; Grid.prototype.getAxis = function(dim, axisIndex) { var axesMapOnDim = this._axesMap[dim]; if (axesMapOnDim != null) return axesMapOnDim[axisIndex || 0]; }; Grid.prototype.getAxes = function() { return this._axesList.slice(); }; Grid.prototype.getCartesian = function(xAxisIndex, yAxisIndex) { if (xAxisIndex != null && yAxisIndex != null) { var key = "x" + xAxisIndex + "y" + yAxisIndex; return this._coordsMap[key]; } if (isObject$3(xAxisIndex)) { yAxisIndex = xAxisIndex.yAxisIndex; xAxisIndex = xAxisIndex.xAxisIndex; } for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) if (coordList[i].getAxis("x").index === xAxisIndex || coordList[i].getAxis("y").index === yAxisIndex) return coordList[i]; }; Grid.prototype.getCartesians = function() { return this._coordsList.slice(); }; /** * @implements */ Grid.prototype.convertToPixel = function(ecModel, finder, value) { var target = this._findConvertTarget(finder); return target.cartesian ? target.cartesian.dataToPoint(value) : target.axis ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) : null; }; /** * @implements */ Grid.prototype.convertFromPixel = function(ecModel, finder, value) { var target = this._findConvertTarget(finder); return target.cartesian ? target.cartesian.pointToData(value) : target.axis ? target.axis.coordToData(target.axis.toLocalCoord(value)) : null; }; Grid.prototype._findConvertTarget = function(finder) { var seriesModel = finder.seriesModel; var xAxisModel = finder.xAxisModel || seriesModel && seriesModel.getReferringComponents("xAxis", SINGLE_REFERRING).models[0]; var yAxisModel = finder.yAxisModel || seriesModel && seriesModel.getReferringComponents("yAxis", SINGLE_REFERRING).models[0]; var gridModel = finder.gridModel; var coordsList = this._coordsList; var cartesian; var axis; if (seriesModel) { cartesian = seriesModel.coordinateSystem; indexOf(coordsList, cartesian) < 0 && (cartesian = null); } else if (xAxisModel && yAxisModel) cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); else if (xAxisModel) axis = this.getAxis("x", xAxisModel.componentIndex); else if (yAxisModel) axis = this.getAxis("y", yAxisModel.componentIndex); else if (gridModel) { if (gridModel.coordinateSystem === this) cartesian = this._coordsList[0]; } return { cartesian, axis }; }; /** * @implements */ Grid.prototype.containPoint = function(point) { var coord = this._coordsList[0]; if (coord) return coord.containPoint(point); }; /** * Initialize cartesian coordinate systems */ Grid.prototype._initCartesian = function(gridModel, ecModel, api) { var _this = this; var grid = this; var axisPositionUsed = { left: false, right: false, top: false, bottom: false }; var axesMap = { x: {}, y: {} }; var axesCount = { x: 0, y: 0 }; ecModel.eachComponent("xAxis", createAxisCreator("x"), this); ecModel.eachComponent("yAxis", createAxisCreator("y"), this); if (!axesCount.x || !axesCount.y) { this._axesMap = {}; this._axesList = []; return; } this._axesMap = axesMap; each$12(axesMap.x, function(xAxis, xAxisIndex) { each$12(axesMap.y, function(yAxis, yAxisIndex) { var key = "x" + xAxisIndex + "y" + yAxisIndex; var cartesian = new Cartesian2D(key); cartesian.master = _this; cartesian.model = gridModel; _this._coordsMap[key] = cartesian; _this._coordsList.push(cartesian); cartesian.addAxis(xAxis); cartesian.addAxis(yAxis); }); }); prepareAlignToInCoordSysCreate(axesMap.x); prepareAlignToInCoordSysCreate(axesMap.y); function createAxisCreator(dimName) { return function(axisModel, idx) { if (!isAxisUsedInTheGrid(axisModel, gridModel)) return; var axisPosition = axisModel.get("position"); if (dimName === "x") { if (axisPosition !== "top" && axisPosition !== "bottom") axisPosition = axisPositionUsed.bottom ? "top" : "bottom"; } else if (axisPosition !== "left" && axisPosition !== "right") axisPosition = axisPositionUsed.left ? "right" : "left"; axisPositionUsed[axisPosition] = true; var axisType = determineAxisType(axisModel); var axis = new Axis2D(dimName, createScaleByModel(axisModel, axisType, true), [0, 0], axisType, axisPosition); axis.onBand = isAxisOnBand(axis.scale, axisModel); axis.inverse = axisModel.get("inverse"); axisModel.axis = axis; axis.model = axisModel; axis.grid = grid; axis.index = idx; grid._axesList.push(axis); axesMap[dimName][idx] = axis; axesCount[dimName]++; }; } }; /** * @param dim 'x' or 'y' or 'auto' or null/undefined */ Grid.prototype.getTooltipAxes = function(dim) { var baseAxes = []; var otherAxes = []; each$12(this.getCartesians(), function(cartesian) { var baseAxis = dim != null && dim !== "auto" ? cartesian.getAxis(dim) : cartesian.getBaseAxis(); var otherAxis = cartesian.getOtherAxis(baseAxis); indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis); indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis); }); return { baseAxes, otherAxes }; }; Grid.create = function(ecModel, api) { var grids = []; ecModel.eachComponent("grid", function(gridModel, idx) { var grid = new Grid(gridModel, ecModel, api); grid.name = "grid_" + idx; grid.resize(gridModel, api, true); gridModel.coordinateSystem = grid; grids.push(grid); each$12(grid._axesList, function(axis) { scaleRawExtentInfoEnableBoxCoordSysUsage(axis, Grid.dimIdxMap); }); }); ecModel.eachSeries(function(seriesModel) { var xAxis; var yAxis; injectCoordSysByOption({ targetModel: seriesModel, coordSysType: COORD_SYS_TYPE_CARTESIAN_2D, coordSysProvider }); function coordSysProvider() { var axesModelMap = findAxisModels(seriesModel); var xAxisModel = axesModelMap.xAxisModel; var yAxisModel = axesModelMap.yAxisModel; xAxis = xAxisModel.axis; yAxis = yAxisModel.axis; var gridModel = xAxisModel.getCoordSysModel(); if (!gridModel) throw new Error("Grid \"" + retrieve3(xAxisModel.get("gridIndex"), xAxisModel.get("gridId"), 0) + "\" not found"); if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) throw new Error("xAxis and yAxis must use the same grid"); return gridModel.coordinateSystem.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); } if (xAxis && yAxis) { associateSeriesWithAxis(xAxis, seriesModel, COORD_SYS_TYPE_CARTESIAN_2D); associateSeriesWithAxis(yAxis, seriesModel, COORD_SYS_TYPE_CARTESIAN_2D); } }, this); return grids; }; Grid.dimensions = cartesian2DDimensions; Grid.dimIdxMap = createDimNameMap(cartesian2DDimensions); return Grid; }(); /** * Check if the axis is used in the specified grid. */ function isAxisUsedInTheGrid(axisModel, gridModel) { return axisModel.getCoordSysModel() === gridModel; } function fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) { axis.getAxesOnZeroOf = function() { return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : []; }; var otherAxes = axesMap[otherAxisDim]; var otherAxisOnZeroOf; var axisModel = axis.model; var onZero = axisModel.get(["axisLine", "onZero"]); var onZeroAxisIndex = axisModel.get(["axisLine", "onZeroAxisIndex"]); if (!onZero) return; if (onZeroAxisIndex != null) { if (canOnZeroToAxis(onZero, otherAxes[onZeroAxisIndex])) otherAxisOnZeroOf = otherAxes[onZeroAxisIndex]; } else for (var idx in otherAxes) if (hasOwn(otherAxes, idx) && canOnZeroToAxis(onZero, otherAxes[idx]) && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]) { otherAxisOnZeroOf = otherAxes[idx]; break; } if (otherAxisOnZeroOf) onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true; function getOnZeroRecordKey(axis) { return axis.dim + "_" + axis.index; } } /** * CAVEAT: Must not be called before `CoordinateSystem#update` due to `__dontOnMyZero`. */ function canOnZeroToAxis(onZeroOption, axis) { if (!axis) return false; var scale = axis.scale; var kindEffective = getScaleValuePositionKind(scale, 0, false); var can = axis && axis.type !== "category" && axis.type !== "time" && kindEffective !== 3; if (can && onZeroOption === "auto" && isOnAxisZeroDiscouraged(axis)) can = false; return can; } /** * [CAVEAT] This method is called before data processing stage. * Do not rely on any info that is determined afterward. */ function prepareAlignToInCoordSysCreate(axes) { var axesIndices = keys(axes); var alignTo; var axisNeedsAlign = []; for (var i = axesIndices.length - 1; i >= 0; i--) { var axis = axes[+axesIndices[i]]; if (isIntervalOrLogScale(axis.scale) && retrieveAxisBreaksOption(axis.model, axis.type, true) == null) { if (axis.model.get("alignTicks") && axis.model.get("interval") == null) axisNeedsAlign.push(axis); else alignTo = axis; } } if (!alignTo) alignTo = axisNeedsAlign.pop(); if (alignTo) each$12(axisNeedsAlign, function(axis) { axis.__alignTo = alignTo; }); } /** * This is just a defence code. They are unlikely to be actually `true`, * since these cases have been addressed in `prepareAlignToInCoordSysCreate`. * * Can not be called BEFORE "nice" performed. */ function incapableOfAlignNeedFallback(targetAxis, alignTo) { return hasBreaks(targetAxis.scale) || hasBreaks(alignTo.scale) || alignTo.scale.getTicks().length < 2; } function updateAxisTransform(axis, coordBase) { var axisExtent = axis.getExtent(); var axisExtentSum = axisExtent[0] + axisExtent[1]; axis.toGlobalCoord = axis.dim === "x" ? function(coord) { return coord + coordBase; } : function(coord) { return axisExtentSum - coord + coordBase; }; axis.toLocalCoord = axis.dim === "x" ? function(coord) { return coord - coordBase; } : function(coord) { return axisExtentSum - coord + coordBase; }; } function updateAllAxisExtentTransByGridRect(axesMap, gridRect) { each$12(axesMap.x, function(axis) { return updateAxisExtentTransByGridRect(axis, gridRect.x, gridRect.width); }); each$12(axesMap.y, function(axis) { return updateAxisExtentTransByGridRect(axis, gridRect.y, gridRect.height); }); } function updateAxisExtentTransByGridRect(axis, gridXY, gridWH) { var extent = [0, gridWH]; var idx = axis.inverse ? 1 : 0; axis.setExtent(extent[idx], extent[1 - idx]); updateAxisTransform(axis, gridXY); } var legacyLayOutGridByContainLabel; function registerLegacyGridContainLabelImpl(impl) { legacyLayOutGridByContainLabel = impl; } function layOutGridByOuterBounds(outerBoundsRect, outerBoundsContain, outerBoundsClamp, gridRect, axesMap, axisBuilderSharedCtx, layoutRef) { assert(outerBoundsContain === "all" || outerBoundsContain === "axisLabel"); createOrUpdateAxesView(gridRect, axesMap, AxisTickLabelComputingKind.estimate, outerBoundsContain, false, layoutRef); var margin = [ 0, 0, 0, 0 ]; fillLabelNameOverflowOnOneDimension(0); fillLabelNameOverflowOnOneDimension(1); fillMarginOnOneDimension(gridRect, 0, NaN); fillMarginOnOneDimension(gridRect, 1, NaN); var noPxChange = find(margin, function(item) { return item > 0; }) == null; expandOrShrinkRect(gridRect, margin, true, true, outerBoundsClamp); updateAllAxisExtentTransByGridRect(axesMap, gridRect); return noPxChange; function fillLabelNameOverflowOnOneDimension(xyIdx) { each$12(axesMap[XY$2[xyIdx]], function(axis) { if (!shouldAxisShow(axis.model)) return; var sharedRecord = axisBuilderSharedCtx.ensureRecord(axis.model); var labelInfoList = sharedRecord.labelInfoList; if (labelInfoList) for (var idx = 0; idx < labelInfoList.length; idx++) { var labelInfo = labelInfoList[idx]; var proportion = axis.scale.normalize(getTickValueOutermost(axis.scale, getLabelInner(labelInfo.label).labelInfo.tick)); proportion = xyIdx === 1 ? 1 - proportion : proportion; fillMarginOnOneDimension(labelInfo.rect, xyIdx, proportion); fillMarginOnOneDimension(labelInfo.rect, 1 - xyIdx, NaN); } var nameLayout = sharedRecord.nameLayout; if (nameLayout) { var proportion = isNameLocationCenter(sharedRecord.nameLocation) ? .5 : NaN; fillMarginOnOneDimension(nameLayout.rect, xyIdx, proportion); fillMarginOnOneDimension(nameLayout.rect, 1 - xyIdx, NaN); } }); } function fillMarginOnOneDimension(itemRect, xyIdx, proportion) { var overflow1 = outerBoundsRect[XY$2[xyIdx]] - itemRect[XY$2[xyIdx]]; var overflow2 = itemRect[WH$2[xyIdx]] + itemRect[XY$2[xyIdx]] - (outerBoundsRect[WH$2[xyIdx]] + outerBoundsRect[XY$2[xyIdx]]); overflow1 = applyProportion(overflow1, 1 - proportion); overflow2 = applyProportion(overflow2, proportion); var minIdx = XY_TO_MARGIN_IDX[xyIdx][0]; var maxIdx = XY_TO_MARGIN_IDX[xyIdx][1]; margin[minIdx] = mathMax$9(margin[minIdx], overflow1); margin[maxIdx] = mathMax$9(margin[maxIdx], overflow2); } function applyProportion(overflow, proportion) { if (overflow > 0 && !eqNaN(proportion) && proportion > 1e-4) overflow /= proportion; return overflow; } } function createAxisBiulders(gridRect, cartesians, axesMap, optionContainLabel, api) { var axisBuilderSharedCtx = new AxisBuilderSharedContext(resolveAxisNameOverlapForGrid); each$12(axesMap, function(axisList) { return each$12(axisList, function(axis) { if (shouldAxisShow(axis.model)) { var defaultNameMoveOverlap = !optionContainLabel; axis.axisBuilder = createCartesianAxisViewCommonPartBuilder(gridRect, cartesians, axis.model, api, axisBuilderSharedCtx, defaultNameMoveOverlap); } }); }); return axisBuilderSharedCtx; } /** * Promote the axis-elements-building from "view render" stage to "coordinate system resize" stage. * This is aimed to resovle overlap across multiple axes, since currently it's hard to reconcile * multiple axes in "view render" stage. * * [CAUTION] But this promotion assumes that the subsequent "visual mapping" stage does not affect * this axis-elements-building; otherwise we have to refactor it again. */ function createOrUpdateAxesView(gridRect, axesMap, kind, outerBoundsContain, noPxChange, layoutRef) { var isDetermine = kind === AxisTickLabelComputingKind.determine; each$12(axesMap, function(axisList) { return each$12(axisList, function(axis) { if (shouldAxisShow(axis.model)) { updateCartesianAxisViewCommonPartBuilder(axis.axisBuilder, gridRect, axis.model); axis.axisBuilder.build(isDetermine ? { axisTickLabelDetermine: true } : { axisTickLabelEstimate: true }, { noPxChange }); } }); }); var nameMarginLevelMap = { x: 0, y: 0 }; calcNameMarginLevel(0); calcNameMarginLevel(1); function calcNameMarginLevel(xyIdx) { nameMarginLevelMap[XY$2[1 - xyIdx]] = gridRect[WH$2[xyIdx]] <= layoutRef.refContainer[WH$2[xyIdx]] * .5 ? 0 : 1 - xyIdx === 1 ? 2 : 1; } each$12(axesMap, function(axisList, xy) { return each$12(axisList, function(axis) { if (shouldAxisShow(axis.model)) { if (outerBoundsContain === "all" || isDetermine) axis.axisBuilder.build({ axisName: true }, { nameMarginLevel: nameMarginLevelMap[xy] }); if (isDetermine) axis.axisBuilder.build({ axisLine: true }); } }); }); } function prepareOuterBounds(gridModel, rawGridRect, layoutRef) { var outerBoundsRect; var optionOuterBoundsMode = gridModel.get("outerBoundsMode", true); if (optionOuterBoundsMode === "same") outerBoundsRect = rawGridRect.clone(); else if (optionOuterBoundsMode == null || optionOuterBoundsMode === "auto") outerBoundsRect = getLayoutRect(gridModel.get("outerBounds", true) || OUTER_BOUNDS_DEFAULT, layoutRef.refContainer); else if (optionOuterBoundsMode !== "none") error("Invalid grid[" + gridModel.componentIndex + "].outerBoundsMode."); var optionOuterBoundsContain = gridModel.get("outerBoundsContain", true); var parsedOuterBoundsContain; if (optionOuterBoundsContain == null || optionOuterBoundsContain === "auto") parsedOuterBoundsContain = "all"; else if (indexOf(["all", "axisLabel"], optionOuterBoundsContain) < 0) { error("Invalid grid[" + gridModel.componentIndex + "].outerBoundsContain."); parsedOuterBoundsContain = "all"; } else parsedOuterBoundsContain = optionOuterBoundsContain; var outerBoundsClamp = [parsePositionSizeOption(retrieve2(gridModel.get("outerBoundsClampWidth", true), OUTER_BOUNDS_CLAMP_DEFAULT[0]), rawGridRect.width), parsePositionSizeOption(retrieve2(gridModel.get("outerBoundsClampHeight", true), OUTER_BOUNDS_CLAMP_DEFAULT[1]), rawGridRect.height)]; return { outerBoundsRect, parsedOuterBoundsContain, outerBoundsClamp }; } var resolveAxisNameOverlapForGrid = function(cfg, ctx, axisModel, nameLayoutInfo, nameMoveDirVec, thisRecord) { var perpendicularDim = axisModel.axis.dim === "x" ? "y" : "x"; resolveAxisNameOverlapDefault(cfg, ctx, axisModel, nameLayoutInfo, nameMoveDirVec, thisRecord); if (!isNameLocationCenter(cfg.nameLocation)) each$12(ctx.recordMap[perpendicularDim], function(perpenRecord) { if (perpenRecord && perpenRecord.labelInfoList && perpenRecord.dirVec) moveIfOverlapByLinearLabels(perpenRecord.labelInfoList, perpenRecord.dirVec, nameLayoutInfo, nameMoveDirVec); }); }; //#endregion //#region node_modules/echarts/lib/component/axisPointer/modelHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function collect(ecModel, api) { var result = { /** * key: makeKey(axis.model) * value: { * axis, * coordSys, * axisPointerModel, * triggerTooltip, * triggerEmphasis, * involveSeries, * snap, * seriesModels, * seriesDataCount * } */ axesInfo: {}, seriesInvolved: false, /** * key: makeKey(coordSys.model) * value: Object: key makeKey(axis.model), value: axisInfo */ coordSysAxesInfo: {}, coordSysMap: {} }; collectAxesInfo(result, ecModel, api); result.seriesInvolved && collectSeriesInfo(result, ecModel); return result; } function collectAxesInfo(result, ecModel, api) { var globalTooltipModel = ecModel.getComponent("tooltip"); var globalAxisPointerModel = ecModel.getComponent("axisPointer"); var linksOption = globalAxisPointerModel.get("link", true) || []; var linkGroups = []; each$12(api.getCoordinateSystems(), function(coordSys) { if (!coordSys.axisPointerEnabled) return; var coordSysKey = makeKey(coordSys.model); var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {}; result.coordSysMap[coordSysKey] = coordSys; var baseTooltipModel = coordSys.model.getModel("tooltip", globalTooltipModel); each$12(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null)); if (coordSys.getTooltipAxes && globalTooltipModel && baseTooltipModel.get("show")) { var triggerAxis = baseTooltipModel.get("trigger") === "axis"; var cross = baseTooltipModel.get(["axisPointer", "type"]) === "cross"; var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get(["axisPointer", "axis"])); if (triggerAxis || cross) each$12(tooltipAxes.baseAxes, curry$1(saveTooltipAxisInfo, cross ? "cross" : true, triggerAxis)); if (cross) each$12(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, "cross", false)); } function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) { var axisPointerModel = axis.model.getModel("axisPointer", globalAxisPointerModel); var axisPointerShow = axisPointerModel.get("show"); if (!axisPointerShow || axisPointerShow === "auto" && !fromTooltip && !isHandleTrigger(axisPointerModel)) return; if (triggerTooltip == null) triggerTooltip = axisPointerModel.get("triggerTooltip"); axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel; var snap = axisPointerModel.get("snap"); var triggerEmphasis = axisPointerModel.get("triggerEmphasis"); var axisKey = makeKey(axis.model); var involveSeries = triggerTooltip || snap || axis.type === "category"; var axisInfo = result.axesInfo[axisKey] = { key: axisKey, axis, coordSys, axisPointerModel, triggerTooltip, triggerEmphasis, involveSeries, snap, useHandle: isHandleTrigger(axisPointerModel), seriesModels: [], linkGroup: null }; axesInfoInCoordSys[axisKey] = axisInfo; result.seriesInvolved = result.seriesInvolved || involveSeries; var groupIndex = getLinkGroupIndex(linksOption, axis); if (groupIndex != null) { var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = { axesInfo: {} }); linkGroup.axesInfo[axisKey] = axisInfo; linkGroup.mapper = linksOption[groupIndex].mapper; axisInfo.linkGroup = linkGroup; } } }); } function makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) { var tooltipAxisPointerModel = baseTooltipModel.getModel("axisPointer"); var fields = [ "type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z" ]; var volatileOption = {}; each$12(fields, function(field) { volatileOption[field] = clone$4(tooltipAxisPointerModel.get(field)); }); volatileOption.snap = axis.type !== "category" && !!triggerTooltip; if (tooltipAxisPointerModel.get("type") === "cross") volatileOption.type = "line"; var labelOption = volatileOption.label || (volatileOption.label = {}); labelOption.show ??= false; if (fromTooltip === "cross") { var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get(["label", "show"]); labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true; if (!triggerTooltip) { var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get("crossStyle"); crossStyle && defaults(labelOption, crossStyle.textStyle); } } return axis.model.getModel("axisPointer", new Model(volatileOption, globalAxisPointerModel, ecModel)); } function collectSeriesInfo(result, ecModel) { ecModel.eachSeries(function(seriesModel) { var coordSys = seriesModel.coordinateSystem; var seriesTooltipTrigger = seriesModel.get(["tooltip", "trigger"], true); var seriesTooltipShow = seriesModel.get(["tooltip", "show"], true); if (!coordSys || !coordSys.model || seriesTooltipTrigger === "none" || seriesTooltipTrigger === false || seriesTooltipTrigger === "item" || seriesTooltipShow === false || seriesModel.get(["axisPointer", "show"], true) === false) return; each$12(result.coordSysAxesInfo[makeKey(coordSys.model)], function(axisInfo) { var axis = axisInfo.axis; if (coordSys.getAxis(axis.dim) === axis) { axisInfo.seriesModels.push(seriesModel); axisInfo.seriesDataCount ??= 0; axisInfo.seriesDataCount += seriesModel.getData().count(); } }); }); } /** * For example: * { * axisPointer: { * links: [{ * xAxisIndex: [2, 4], * yAxisIndex: 'all' * }, { * xAxisId: ['a5', 'a7'], * xAxisName: 'xxx' * }] * } * } */ function getLinkGroupIndex(linksOption, axis) { var axisModel = axis.model; var dim = axis.dim; for (var i = 0; i < linksOption.length; i++) { var linkOption = linksOption[i] || {}; if (checkPropInLink(linkOption[dim + "AxisId"], axisModel.id) || checkPropInLink(linkOption[dim + "AxisIndex"], axisModel.componentIndex) || checkPropInLink(linkOption[dim + "AxisName"], axisModel.name)) return i; } } function checkPropInLink(linkPropValue, axisPropValue) { return linkPropValue === "all" || isArray$1(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue; } function fixValue(axisModel) { var axisInfo = getAxisInfo$1(axisModel); if (!axisInfo) return; var axisPointerModel = axisInfo.axisPointerModel; var scale = axisInfo.axis.scale; var option = axisPointerModel.option; var status = axisPointerModel.get("status"); var value = axisPointerModel.get("value"); if (value != null) value = scale.parse(value); var useHandle = isHandleTrigger(axisPointerModel); if (status == null) option.status = useHandle ? "show" : "hide"; var extent = scale.getExtent(); if (value == null || value > extent[1]) value = extent[1]; if (value < extent[0]) value = extent[0]; option.value = value; if (useHandle) option.status = axisInfo.axis.scale.isBlank() ? "hide" : "show"; } function getAxisInfo$1(axisModel) { var coordSysAxesInfo = (axisModel.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo; return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)]; } function getAxisPointerModel(axisModel) { var axisInfo = getAxisInfo$1(axisModel); return axisInfo && axisInfo.axisPointerModel; } function isHandleTrigger(axisPointerModel) { return !!axisPointerModel.get(["handle", "show"]); } /** * @param {module:echarts/model/Model} model * @return {string} unique key */ function makeKey(model) { return model.type + "||" + model.id; } //#endregion //#region node_modules/echarts/lib/component/axis/AxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var axisPointerClazz = {}; /** * Base class of AxisView. */ var AxisView = function(_super) { __extends(AxisView, _super); function AxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = AxisView.type; return _this; } /** * @override */ AxisView.prototype.render = function(axisModel, ecModel, api, payload) { this.axisPointerClass && fixValue(axisModel); _super.prototype.render.apply(this, arguments); this._doUpdateAxisPointerClass(axisModel, api, true); }; /** * Action handler. */ AxisView.prototype.updateAxisPointer = function(axisModel, ecModel, api, payload) { this._doUpdateAxisPointerClass(axisModel, api, false); }; /** * @override */ AxisView.prototype.remove = function(ecModel, api) { var axisPointer = this._axisPointer; axisPointer && axisPointer.remove(api); }; /** * @override */ AxisView.prototype.dispose = function(ecModel, api) { this._disposeAxisPointer(api); _super.prototype.dispose.apply(this, arguments); }; AxisView.prototype._doUpdateAxisPointerClass = function(axisModel, api, forceRender) { var Clazz = AxisView.getAxisPointerClass(this.axisPointerClass); if (!Clazz) return; var axisPointerModel = getAxisPointerModel(axisModel); axisPointerModel ? (this._axisPointer || (this._axisPointer = new Clazz())).render(axisModel, axisPointerModel, api, forceRender) : this._disposeAxisPointer(api); }; AxisView.prototype._disposeAxisPointer = function(api) { this._axisPointer && this._axisPointer.dispose(api); this._axisPointer = null; }; AxisView.registerAxisPointerClass = function(type, clazz) { if (axisPointerClazz[type]) throw new Error("axisPointer " + type + " exists"); axisPointerClazz[type] = clazz; }; AxisView.getAxisPointerClass = function(type) { return type && axisPointerClazz[type]; }; AxisView.type = "axis"; return AxisView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/axis/axisSplitHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$18 = makeInner(); function rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel) { var axis = axisModel.axis; if (axis.scale.isBlank()) return; var splitAreaModel = axisModel.getModel("splitArea"); var areaStyleModel = splitAreaModel.getModel("areaStyle"); var areaColors = areaStyleModel.get("color"); var gridRect = gridModel.coordinateSystem.getRect(); var ticksCoords = axis.getTicksCoords({ tickModel: splitAreaModel, breakTicks: "none", pruneByBreak: "preserve_extent_bound" }); if (!ticksCoords.length) return; var areaColorsLen = areaColors.length; var lastSplitAreaColors = inner$18(axisView).splitAreaColors; var newSplitAreaColors = createHashMap(); var colorIndex = 0; if (lastSplitAreaColors) for (var i = 0; i < ticksCoords.length; i++) { var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue); if (cIndex != null) { colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen; break; } } var prev = axis.toGlobalCoord(ticksCoords[0].coord); var areaStyle = areaStyleModel.getAreaStyle(); areaColors = isArray$1(areaColors) ? areaColors : [areaColors]; for (var i = 1; i < ticksCoords.length; i++) { var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); var x = void 0; var y = void 0; var width = void 0; var height = void 0; if (axis.isHorizontal()) { x = prev; y = gridRect.y; width = tickCoord - x; height = gridRect.height; prev = x + width; } else { x = gridRect.x; y = prev; width = gridRect.width; height = tickCoord - y; prev = y + height; } var tickValue = ticksCoords[i - 1].tickValue; tickValue != null && newSplitAreaColors.set(tickValue, colorIndex); axisGroup.add(new Rect$2({ anid: tickValue != null ? "area_" + tickValue : null, shape: { x, y, width, height }, style: defaults({ fill: areaColors[colorIndex] }, areaStyle), autoBatch: true, silent: true })); colorIndex = (colorIndex + 1) % areaColorsLen; } inner$18(axisView).splitAreaColors = newSplitAreaColors; } function rectCoordAxisHandleRemove(axisView) { inner$18(axisView).splitAreaColors = null; } //#endregion //#region node_modules/echarts/lib/component/axis/CartesianAxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var selfBuilderAttrs$2 = [ "splitArea", "splitLine", "minorSplitLine", "breakArea" ]; var CartesianAxisView = function(_super) { __extends(CartesianAxisView, _super); function CartesianAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CartesianAxisView.type; _this.axisPointerClass = "CartesianAxisPointer"; return _this; } /** * @override */ CartesianAxisView.prototype.render = function(axisModel, ecModel, api, payload) { this.group.removeAll(); var oldAxisGroup = this._axisGroup; this._axisGroup = new Group$3(); this.group.add(this._axisGroup); if (!shouldAxisShow(axisModel)) return; this._axisGroup.add(axisModel.axis.axisBuilder.group); each$12(selfBuilderAttrs$2, function(name) { if (axisModel.get([name, "show"])) axisElementBuilders$2[name](this, this._axisGroup, axisModel, axisModel.getCoordSysModel(), api); }, this); if (!(payload && payload.type === "changeAxisOrder" && payload.isInitSort)) groupTransition(oldAxisGroup, this._axisGroup, axisModel); _super.prototype.render.call(this, axisModel, ecModel, api, payload); }; CartesianAxisView.prototype.remove = function() { rectCoordAxisHandleRemove(this); }; CartesianAxisView.type = "cartesianAxis"; return CartesianAxisView; }(AxisView); var axisElementBuilders$2 = { splitLine: function(axisView, axisGroup, axisModel, gridModel, api) { var axis = axisModel.axis; if (axis.scale.isBlank()) return; var splitLineModel = axisModel.getModel("splitLine"); var lineStyleModel = splitLineModel.getModel("lineStyle"); var lineColors = lineStyleModel.get("color"); var showMinLine = splitLineModel.get("showMinLine") !== false; var showMaxLine = splitLineModel.get("showMaxLine") !== false; lineColors = isArray$1(lineColors) ? lineColors : [lineColors]; var gridRect = gridModel.coordinateSystem.getRect(); var isHorizontal = axis.isHorizontal(); var lineCount = 0; var ticksCoords = axis.getTicksCoords({ tickModel: splitLineModel, breakTicks: "none", pruneByBreak: "preserve_extent_bound" }); var p1 = []; var p2 = []; var lineStyle = lineStyleModel.getLineStyle(); for (var i = 0; i < ticksCoords.length; i++) { var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); if (i === 0 && !showMinLine || i === ticksCoords.length - 1 && !showMaxLine) continue; var tickValue = ticksCoords[i].tickValue; if (isHorizontal) { p1[0] = tickCoord; p1[1] = gridRect.y; p2[0] = tickCoord; p2[1] = gridRect.y + gridRect.height; } else { p1[0] = gridRect.x; p1[1] = tickCoord; p2[0] = gridRect.x + gridRect.width; p2[1] = tickCoord; } var colorIndex = lineCount++ % lineColors.length; var line = new Line$1({ anid: tickValue != null ? "line_" + tickValue : null, autoBatch: true, shape: { x1: p1[0], y1: p1[1], x2: p2[0], y2: p2[1] }, style: defaults({ stroke: lineColors[colorIndex] }, lineStyle), silent: true }); subPixelOptimizeLine(line.shape, lineStyle.lineWidth); axisGroup.add(line); } }, minorSplitLine: function(axisView, axisGroup, axisModel, gridModel, api) { var axis = axisModel.axis; var lineStyleModel = axisModel.getModel("minorSplitLine").getModel("lineStyle"); var gridRect = gridModel.coordinateSystem.getRect(); var isHorizontal = axis.isHorizontal(); var minorTicksCoords = axis.getMinorTicksCoords(); if (!minorTicksCoords.length) return; var p1 = []; var p2 = []; var lineStyle = lineStyleModel.getLineStyle(); for (var i = 0; i < minorTicksCoords.length; i++) for (var k = 0; k < minorTicksCoords[i].length; k++) { var tickCoord = axis.toGlobalCoord(minorTicksCoords[i][k].coord); if (isHorizontal) { p1[0] = tickCoord; p1[1] = gridRect.y; p2[0] = tickCoord; p2[1] = gridRect.y + gridRect.height; } else { p1[0] = gridRect.x; p1[1] = tickCoord; p2[0] = gridRect.x + gridRect.width; p2[1] = tickCoord; } var line = new Line$1({ anid: "minor_line_" + minorTicksCoords[i][k].tickValue, autoBatch: true, shape: { x1: p1[0], y1: p1[1], x2: p2[0], y2: p2[1] }, style: lineStyle, silent: true }); subPixelOptimizeLine(line.shape, lineStyle.lineWidth); axisGroup.add(line); } }, splitArea: function(axisView, axisGroup, axisModel, gridModel, api) { rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel); }, breakArea: function(axisView, axisGroup, axisModel, gridModel, api) { var axisBreakHelper = getAxisBreakHelper(); var scale = axisModel.axis.scale; if (axisBreakHelper && scale.type !== "ordinal") axisBreakHelper.rectCoordBuildBreakAxis(axisGroup, axisView, axisModel, gridModel.coordinateSystem.getRect(), api); } }; var CartesianXAxisView = function(_super) { __extends(CartesianXAxisView, _super); function CartesianXAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CartesianXAxisView.type; return _this; } CartesianXAxisView.type = "xAxis"; return CartesianXAxisView; }(CartesianAxisView); var CartesianYAxisView = function(_super) { __extends(CartesianYAxisView, _super); function CartesianYAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CartesianXAxisView.type; return _this; } CartesianYAxisView.type = "yAxis"; return CartesianYAxisView; }(CartesianAxisView); //#endregion //#region node_modules/echarts/lib/component/grid/installSimple.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GridView = function(_super) { __extends(GridView, _super); function GridView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "grid"; return _this; } GridView.prototype.render = function(gridModel, ecModel) { this.group.removeAll(); if (gridModel.get("show")) this.group.add(new Rect$2({ shape: gridModel.coordinateSystem.getRect(), style: defaults({ fill: gridModel.get("backgroundColor") }, gridModel.getItemStyle()), silent: true, z2: -1 })); }; GridView.type = "grid"; return GridView; }(ComponentView); var extraOption = { offset: 0 }; function install$52(registers) { registers.registerComponentView(GridView); registers.registerComponentModel(GridModel); registers.registerCoordinateSystem("cartesian2d", Grid); axisModelCreator(registers, "x", CartesianAxisModel, extraOption); axisModelCreator(registers, "y", CartesianAxisModel, extraOption); registers.registerComponentView(CartesianXAxisView); registers.registerComponentView(CartesianYAxisView); registers.registerPreprocessor(function(option) { if (option.xAxis && option.yAxis && !option.grid) option.grid = {}; }); } //#endregion //#region node_modules/echarts/lib/coord/single/AxisModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var COORD_SYS_TYPE_SINGLE = "single"; var COMPONENT_TYPE_SINGLE_AXIS = "singleAxis"; var SingleAxisModel = function(_super) { __extends(SingleAxisModel, _super); function SingleAxisModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SingleAxisModel.type; return _this; } SingleAxisModel.prototype.getCoordSysModel = function() { return this; }; SingleAxisModel.type = COMPONENT_TYPE_SINGLE_AXIS; SingleAxisModel.layoutMode = "box"; SingleAxisModel.defaultOption = { left: "5%", top: "5%", right: "5%", bottom: "5%", type: "value", position: "bottom", orient: "horizontal", axisLine: { show: true, lineStyle: { width: 1, type: "solid" } }, tooltip: { show: true }, axisTick: { show: true, length: 6, lineStyle: { width: 1 } }, axisLabel: { show: true, interval: "auto" }, splitLine: { show: true, lineStyle: { type: "dashed", opacity: .2 } }, jitter: 0, jitterOverlap: true, jitterMargin: 2 }; return SingleAxisModel; }(ComponentModel); mixin(SingleAxisModel, AxisModelCommonMixin.prototype); //#endregion //#region node_modules/echarts/lib/util/jitter.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function needFixJitter(seriesModel, axis) { var coordinateSystem = seriesModel.coordinateSystem; var coordType = coordinateSystem && coordinateSystem.type; var baseAxis = coordinateSystem && coordinateSystem.getBaseAxis && coordinateSystem.getBaseAxis(); var scaleType = baseAxis && baseAxis.scale && baseAxis.scale.type; var seriesValid = coordType === "cartesian2d" && scaleType === "ordinal" || coordType === "single"; var axisValid = axis.model.get("jitter") > 0; return seriesValid && axisValid; } var inner$17 = makeInner(); /** * Fix jitter for overlapping data points. * * @param fixedAxis The axis whose coord doesn't change with jitter. * @param fixedCoord The coord of fixedAxis. * @param floatCoord The coord of the other axis, which should be changed with jittering. * @param radius The radius of the data point, considering the symbol is a circle. * @returns updated floatCoord. */ function fixJitter(fixedAxis, fixedCoord, floatCoord, radius) { if (fixedAxis instanceof Axis2D) { if (fixedAxis.scale.type !== "ordinal") return floatCoord; } var axisModel = fixedAxis.model; var jitter = axisModel.get("jitter"); if (!(jitter > 0)) return floatCoord; var jitterOverlap = axisModel.get("jitterOverlap"); var jitterMargin = axisModel.get("jitterMargin") || 0; var bandWidth = isOrdinalScale(fixedAxis.scale) ? calcBandWidth(fixedAxis).w : null; if (jitterOverlap) return fixJitterIgnoreOverlaps(floatCoord, jitter, bandWidth, radius); return fixJitterAvoidOverlaps(fixedAxis, fixedCoord, floatCoord, radius, jitter, jitterMargin); } function fixJitterIgnoreOverlaps(floatCoord, jitter, bandWidth, radius) { if (bandWidth === null) return floatCoord + (Math.random() - .5) * jitter; var maxJitter = bandWidth - radius * 2; var actualJitter = Math.min(Math.max(0, jitter), maxJitter); return floatCoord + (Math.random() - .5) * actualJitter; } function fixJitterAvoidOverlaps(fixedAxis, fixedCoord, floatCoord, radius, jitter, margin) { var store = inner$17(fixedAxis); if (!store.items) store.items = []; var items = store.items; var overlapA = placeJitterOnDirection(items, fixedCoord, floatCoord, radius, jitter, margin, 1); var overlapB = placeJitterOnDirection(items, fixedCoord, floatCoord, radius, jitter, margin, -1); var minFloat = Math.abs(overlapA - floatCoord) < Math.abs(overlapB - floatCoord) ? overlapA : overlapB; var bandWidth = isOrdinalScale(fixedAxis.scale) ? calcBandWidth(fixedAxis).w : null; var distance = Math.abs(minFloat - floatCoord); if (distance > jitter / 2 || bandWidth && distance > bandWidth / 2 - radius) return fixJitterIgnoreOverlaps(floatCoord, jitter, bandWidth, radius); items.push({ fixedCoord, floatCoord: minFloat, r: radius }); return minFloat; } function placeJitterOnDirection(items, fixedCoord, floatCoord, radius, jitter, margin, direction) { var y = floatCoord; for (var i = 0; i < items.length; i++) { var item = items[i]; var dx = fixedCoord - item.fixedCoord; var dy = y - item.floatCoord; var d2 = dx * dx + dy * dy; var r = radius + item.r + margin; if (d2 < r * r) { var requiredY = item.floatCoord + Math.sqrt(r * r - dx * dx) * direction; if (Math.abs(requiredY - floatCoord) > jitter / 2) return Number.MAX_VALUE; if (direction === 1 && requiredY > y || direction === -1 && requiredY < y) { y = requiredY; i = -1; continue; } } } return y; } //#endregion //#region node_modules/echarts/lib/chart/scatter/jitterLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function jitterLayout() { return { seriesType: "scatter", plan: createRenderPlanner(), reset: function(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (!coordSys || coordSys.type !== "cartesian2d" && coordSys.type !== "single") return; var baseAxis = coordSys.getBaseAxis && coordSys.getBaseAxis(); if (!(baseAxis && needFixJitter(seriesModel, baseAxis))) return; var dim = baseAxis.dim; var orient = baseAxis.orient; var isSingleY = orient === "horizontal" && baseAxis.type !== "category" || orient === "vertical" && baseAxis.type === "category"; var jitterOnY = dim === "y" || dim === "single" && isSingleY; var jitterOnX = dim === "x" || dim === "single" && !isSingleY; if (!jitterOnY && !jitterOnX) return; return { progress: function(params, data) { var points = data.getLayout("points"); var hasPoints = !!points; hasPoints && validateUpstreamOutputRange(data.getLayout("pointsRange"), params); for (var i = params.start; i < params.end; i++) { var offset = hasPoints ? (i - params.start) * 2 : -1; var layout = hasPoints ? [points[offset], points[offset + 1]] : data.getItemLayout(i); if (!layout) continue; var rawSize = data.getItemVisual(i, "symbolSize"); var size = rawSize instanceof Array ? (rawSize[1] + rawSize[0]) / 2 : rawSize; if (jitterOnY) { var jittered = fixJitter(baseAxis, layout[0], layout[1], size / 2); if (hasPoints) points[offset + 1] = jittered; else layout[1] = jittered; } else if (jitterOnX) { var jittered = fixJitter(baseAxis, layout[1], layout[0], size / 2); if (hasPoints) points[offset] = jittered; else layout[0] = jittered; } } } }; } }; } //#endregion //#region node_modules/echarts/lib/chart/scatter/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$51(registers) { use(install$52); registers.registerSeriesModel(ScatterSeriesModel); registers.registerChartView(ScatterView); registers.registerLayout(pointsLayout("scatter")); } function installScatterJitter(registers) { registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, jitterLayout()); } //#endregion //#region node_modules/echarts/lib/chart/radar/backwardCompat.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function radarBackwardCompat(option) { var polarOptArr = option.polar; if (polarOptArr) { if (!isArray$1(polarOptArr)) polarOptArr = [polarOptArr]; var polarNotRadar_1 = []; each$12(polarOptArr, function(polarOpt, idx) { if (polarOpt.indicator) { if (polarOpt.type && !polarOpt.shape) polarOpt.shape = polarOpt.type; option.radar = option.radar || []; if (!isArray$1(option.radar)) option.radar = [option.radar]; option.radar.push(polarOpt); } else polarNotRadar_1.push(polarOpt); }); option.polar = polarNotRadar_1; } each$12(option.series, function(seriesOpt) { if (seriesOpt && seriesOpt.type === "radar" && seriesOpt.polarIndex) seriesOpt.radarIndex = seriesOpt.polarIndex; }); } //#endregion //#region node_modules/echarts/lib/chart/radar/RadarSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_RADAR$1 = "radar"; var RadarSeriesModel = function(_super) { __extends(RadarSeriesModel, _super); function RadarSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = RadarSeriesModel.type; _this.hasSymbolVisual = true; return _this; } RadarSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this)); }; RadarSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesDataSimply(this, { generateCoord: "indicator_", generateCoordCount: Infinity }); }; RadarSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); var indicatorAxes = this.coordinateSystem.getIndicatorAxes(); var name = this.getData().getName(dataIndex); var nameToDisplay = name === "" ? this.name : name; var markerColor = retrieveVisualColorForTooltipMarker(this, dataIndex); return createTooltipMarkup("section", { header: nameToDisplay, sortBlocks: true, blocks: map$1(indicatorAxes, function(axis) { var val = data.get(data.mapDimension(axis.dim), dataIndex); return createTooltipMarkup("nameValue", { markerType: "subItem", markerColor, name: axis.name, value: val, sortParam: val }); }) }); }; RadarSeriesModel.prototype.getTooltipPosition = function(dataIndex) { if (dataIndex != null) { var data_1 = this.getData(); var coordSys = this.coordinateSystem; var values = data_1.getValues(map$1(coordSys.dimensions, function(dim) { return data_1.mapDimension(dim); }), dataIndex); for (var i = 0, len = values.length; i < len; i++) if (!isNaN(values[i])) { var indicatorAxes = coordSys.getIndicatorAxes(); return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i); } } }; RadarSeriesModel.type = "series." + SERIES_TYPE_RADAR$1; RadarSeriesModel.dependencies = ["radar"]; RadarSeriesModel.defaultOption = { z: 2, colorBy: "data", coordinateSystem: "radar", legendHoverLink: true, radarIndex: 0, lineStyle: { width: 2, type: "solid", join: "round" }, label: { position: "top" }, symbolSize: 8 }; return RadarSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/radar/RadarView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RadarView$1 = function(_super) { __extends(RadarView, _super); function RadarView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_RADAR$1; return _this; } RadarView.prototype.render = function(seriesModel, ecModel, api) { var polar = seriesModel.coordinateSystem; var group = this.group; var data = seriesModel.getData(); var oldData = this._data; function createSymbol(data, idx) { var symbolType = data.getItemVisual(idx, "symbol") || "circle"; if (symbolType === "none") return; var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, "symbolSize")); var symbolPath = createSymbol$1(symbolType, -1, -1, 2, 2); var symbolRotate = data.getItemVisual(idx, "symbolRotate") || 0; symbolPath.attr({ style: { strokeNoScale: true }, z2: 100, scaleX: symbolSize[0] / 2, scaleY: symbolSize[1] / 2, rotation: symbolRotate * Math.PI / 180 || 0 }); return symbolPath; } function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) { symbolGroup.removeAll(); for (var i = 0; i < newPoints.length - 1; i++) { var symbolPath = createSymbol(data, idx); if (symbolPath) { symbolPath.__dimIdx = i; if (oldPoints[i]) { symbolPath.setPosition(oldPoints[i]); graphic_exports$1[isInit ? "initProps" : "updateProps"](symbolPath, { x: newPoints[i][0], y: newPoints[i][1] }, seriesModel, idx); } else symbolPath.setPosition(newPoints[i]); symbolGroup.add(symbolPath); } } } function getInitialPoints(points) { return map$1(points, function(pt) { return [polar.cx, polar.cy]; }); } data.diff(oldData).add(function(idx) { var points = data.getItemLayout(idx); if (!points) return; var polygon = new Polygon(); var polyline = new Polyline$1(); var target = { shape: { points } }; polygon.shape.points = getInitialPoints(points); polyline.shape.points = getInitialPoints(points); initProps(polygon, target, seriesModel, idx); initProps(polyline, target, seriesModel, idx); var itemGroup = new Group$3(); var symbolGroup = new Group$3(); itemGroup.add(polyline); itemGroup.add(polygon); itemGroup.add(symbolGroup); updateSymbols(polyline.shape.points, points, symbolGroup, data, idx, true); data.setItemGraphicEl(idx, itemGroup); }).update(function(newIdx, oldIdx) { var itemGroup = oldData.getItemGraphicEl(oldIdx); var polyline = itemGroup.childAt(0); var polygon = itemGroup.childAt(1); var symbolGroup = itemGroup.childAt(2); var target = { shape: { points: data.getItemLayout(newIdx) } }; if (!target.shape.points) return; updateSymbols(polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false); saveOldStyle(polygon); saveOldStyle(polyline); updateProps$1(polyline, target, seriesModel); updateProps$1(polygon, target, seriesModel); data.setItemGraphicEl(newIdx, itemGroup); }).remove(function(idx) { group.remove(oldData.getItemGraphicEl(idx)); }).execute(); data.eachItemGraphicEl(function(itemGroup, idx) { var itemModel = data.getItemModel(idx); var polyline = itemGroup.childAt(0); var polygon = itemGroup.childAt(1); var symbolGroup = itemGroup.childAt(2); var itemStyle = data.getItemVisual(idx, "style"); var color = itemStyle.fill; group.add(itemGroup); polyline.useStyle(defaults(itemModel.getModel("lineStyle").getLineStyle(), { fill: "none", stroke: color })); setStatesStylesFromModel(polyline, itemModel, "lineStyle"); setStatesStylesFromModel(polygon, itemModel, "areaStyle"); var areaStyleModel = itemModel.getModel("areaStyle"); var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty(); polygon.ignore = polygonIgnore; each$12([ "emphasis", "select", "blur" ], function(stateName) { var stateModel = itemModel.getModel([stateName, "areaStyle"]); var stateIgnore = stateModel.isEmpty() && stateModel.parentModel.isEmpty(); polygon.ensureState(stateName).ignore = stateIgnore && polygonIgnore; var lineStyle = itemModel.getModel([stateName, "lineStyle"]).getLineStyle(); polyline.ensureState(stateName).style = lineStyle; var areaStyle = stateModel.getAreaStyle(); polygon.ensureState(stateName).style = areaStyle; var itemStateStyle = itemModel.getModel([stateName, "itemStyle"]).getItemStyle(); symbolGroup.eachChild(function(symbolPath) { symbolPath.ensureState(stateName).style = clone$4(itemStateStyle); }); }); polygon.useStyle(defaults(itemModel.getModel("areaStyle").getAreaStyle(), { fill: color, opacity: .7, decal: itemStyle.decal })); var emphasisModel = itemModel.getModel("emphasis"); symbolGroup.eachChild(function(symbolPath) { if (symbolPath instanceof ZRImage) { var pathStyle = symbolPath.style; symbolPath.useStyle(extend({ image: pathStyle.image, x: pathStyle.x, y: pathStyle.y, width: pathStyle.width, height: pathStyle.height }, itemStyle)); } else { symbolPath.useStyle(itemStyle); symbolPath.setColor(color); symbolPath.style.strokeNoScale = true; } var defaultText = data.getStore().get(data.getDimensionIndex(symbolPath.__dimIdx), idx); (defaultText == null || isNaN(defaultText)) && (defaultText = ""); setLabelStyle(symbolPath, getLabelStatesModels(itemModel), { labelFetcher: data.hostModel, labelDataIndex: idx, labelDimIndex: symbolPath.__dimIdx, defaultText, inheritColor: color, defaultOpacity: itemStyle.opacity }); }); toggleHoverEmphasis(itemGroup, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }); this._data = data; }; RadarView.prototype.remove = function() { this.group.removeAll(); this._data = null; }; RadarView.type = SERIES_TYPE_RADAR$1; return RadarView; }(ChartView); //#endregion //#region node_modules/echarts/lib/coord/radar/RadarModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var valueAxisDefault = axisDefault_default.value; var COORD_SYS_TYPE_RADAR = "radar"; var COMPONENT_TYPE_RADAR = COORD_SYS_TYPE_RADAR; var SERIES_TYPE_RADAR = COORD_SYS_TYPE_RADAR; function defaultsShow(opt, show) { return defaults({ show }, opt); } var RadarModel = function(_super) { __extends(RadarModel, _super); function RadarModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = RadarModel.type; return _this; } RadarModel.prototype.optionUpdated = function() { var boundaryGap = this.get("boundaryGap"); var splitNumber = this.get("splitNumber"); var clockwise = this.get("clockwise"); var scale = this.get("scale"); var axisLine = this.get("axisLine"); var axisTick = this.get("axisTick"); var axisLabel = this.get("axisLabel"); var nameTextStyle = this.get("axisName"); var showName = this.get(["axisName", "show"]); var nameFormatter = this.get(["axisName", "formatter"]); var nameGap = this.get("axisNameGap"); var triggerEvent = this.get("triggerEvent"); var indicatorModels = map$1(this.get("indicator") || [], function(indicatorOpt) { if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) indicatorOpt.min = 0; else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) indicatorOpt.max = 0; var iNameTextStyle = nameTextStyle; if (indicatorOpt.color != null) iNameTextStyle = defaults({ color: indicatorOpt.color }, nameTextStyle); var innerIndicatorOpt = merge(clone$4(indicatorOpt), { boundaryGap, splitNumber, clockwise, scale, axisLine, axisTick, axisLabel, name: indicatorOpt.text, showName, nameLocation: "end", nameGap, nameTextStyle: iNameTextStyle, triggerEvent }, false); if (isString(nameFormatter)) { var indName = innerIndicatorOpt.name; innerIndicatorOpt.name = nameFormatter.replace("{value}", indName != null ? indName : ""); } else if (isFunction(nameFormatter)) innerIndicatorOpt.name = nameFormatter(innerIndicatorOpt.name, innerIndicatorOpt); var model = new Model(innerIndicatorOpt, null, this.ecModel); mixin(model, AxisModelCommonMixin.prototype); model.mainType = "radar"; model.componentIndex = this.componentIndex; model.uid = getUID("ec_radar"); return model; }, this); this._indicatorModels = indicatorModels; }; RadarModel.prototype.getIndicatorModels = function() { return this._indicatorModels; }; RadarModel.type = COMPONENT_TYPE_RADAR; RadarModel.defaultOption = { z: 0, center: ["50%", "50%"], radius: "50%", startAngle: 90, clockwise: false, axisName: { show: true, color: tokens.color.axisLabel }, boundaryGap: [0, 0], splitNumber: 5, axisNameGap: 15, scale: false, shape: "polygon", axisLine: merge({ lineStyle: { color: tokens.color.neutral20 } }, valueAxisDefault.axisLine), axisLabel: defaultsShow(valueAxisDefault.axisLabel, false), axisTick: defaultsShow(valueAxisDefault.axisTick, false), splitLine: defaultsShow(valueAxisDefault.splitLine, true), splitArea: defaultsShow(valueAxisDefault.splitArea, true), indicator: [] }; return RadarModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/radar/RadarView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RadarView = function(_super) { __extends(RadarView, _super); function RadarView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = RadarView.type; return _this; } RadarView.prototype.render = function(radarModel, ecModel, api) { this.group.removeAll(); this._buildAxes(radarModel, api); this._buildSplitLineAndArea(radarModel); }; RadarView.prototype._buildAxes = function(radarModel, api) { var radar = radarModel.coordinateSystem; each$12(map$1(radar.getIndicatorAxes(), function(indicatorAxis) { var axisName = indicatorAxis.model.get("showName") ? indicatorAxis.name : ""; return new AxisBuilder(indicatorAxis.model, api, { axisName, position: [radar.cx, radar.cy], rotation: indicatorAxis.angle, labelDirection: -1, tickDirection: -1, nameDirection: 1 }); }), function(axisBuilder) { axisBuilder.build(); this.group.add(axisBuilder.group); }, this); }; RadarView.prototype._buildSplitLineAndArea = function(radarModel) { var radar = radarModel.coordinateSystem; var indicatorAxes = radar.getIndicatorAxes(); if (!indicatorAxes.length) return; var shape = radarModel.get("shape"); var splitLineModel = radarModel.getModel("splitLine"); var splitAreaModel = radarModel.getModel("splitArea"); var lineStyleModel = splitLineModel.getModel("lineStyle"); var areaStyleModel = splitAreaModel.getModel("areaStyle"); var showSplitLine = splitLineModel.get("show"); var showSplitArea = splitAreaModel.get("show"); var splitLineColors = lineStyleModel.get("color"); var splitAreaColors = areaStyleModel.get("color"); var splitLineColorsArr = isArray$1(splitLineColors) ? splitLineColors : [splitLineColors]; var splitAreaColorsArr = isArray$1(splitAreaColors) ? splitAreaColors : [splitAreaColors]; var splitLines = []; var splitAreas = []; function getColorIndex(areaOrLine, areaOrLineColorList, idx) { var colorIndex = idx % areaOrLineColorList.length; areaOrLine[colorIndex] = areaOrLine[colorIndex] || []; return colorIndex; } if (shape === "circle") { var ticksRadius = indicatorAxes[0].getTicksCoords(); var cx = radar.cx; var cy = radar.cy; for (var i = 0; i < ticksRadius.length; i++) { if (showSplitLine) { var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i); splitLines[colorIndex].push(new Circle({ shape: { cx, cy, r: ticksRadius[i].coord } })); } if (showSplitArea && i < ticksRadius.length - 1) { var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i); splitAreas[colorIndex].push(new Ring({ shape: { cx, cy, r0: ticksRadius[i].coord, r: ticksRadius[i + 1].coord } })); } } } else { var realSplitNumber_1; var axesTicksPoints = map$1(indicatorAxes, function(indicatorAxis, idx) { var ticksCoords = indicatorAxis.getTicksCoords(); realSplitNumber_1 = realSplitNumber_1 == null ? ticksCoords.length - 1 : Math.min(ticksCoords.length - 1, realSplitNumber_1); return map$1(ticksCoords, function(tickCoord) { return radar.coordToPoint(tickCoord.coord, idx); }); }); var prevPoints = []; for (var i = 0; i <= realSplitNumber_1; i++) { var points = []; for (var j = 0; j < indicatorAxes.length; j++) points.push(axesTicksPoints[j][i]); if (points[0]) points.push(points[0].slice()); else console.error("Can't draw value axis " + i); if (showSplitLine) { var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i); splitLines[colorIndex].push(new Polyline$1({ shape: { points } })); } if (showSplitArea && prevPoints) { var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i - 1); splitAreas[colorIndex].push(new Polygon({ shape: { points: points.concat(prevPoints) } })); } prevPoints = points.slice().reverse(); } } var lineStyle = lineStyleModel.getLineStyle(); var areaStyle = areaStyleModel.getAreaStyle(); each$12(splitAreas, function(splitAreas, idx) { this.group.add(mergePath(splitAreas, { style: defaults({ stroke: "none", fill: splitAreaColorsArr[idx % splitAreaColorsArr.length] }, areaStyle), silent: true })); }, this); each$12(splitLines, function(splitLines, idx) { this.group.add(mergePath(splitLines, { style: defaults({ fill: "none", stroke: splitLineColorsArr[idx % splitLineColorsArr.length] }, lineStyle), silent: true })); }, this); }; RadarView.type = "radar"; return RadarView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/coord/radar/IndicatorAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var IndicatorAxis = function(_super) { __extends(IndicatorAxis, _super); function IndicatorAxis(dim, scale, radiusExtent) { var _this = _super.call(this, dim, scale, radiusExtent) || this; _this.type = "value"; _this.angle = 0; _this.name = ""; return _this; } return IndicatorAxis; }(Axis); //#endregion //#region node_modules/echarts/lib/coord/radar/Radar.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Radar = function() { function Radar(radarModel, ecModel, api) { this.type = COORD_SYS_TYPE_RADAR; /** * * Radar dimensions */ this.dimensions = []; this._model = radarModel; this._indicatorAxes = map$1(radarModel.getIndicatorModels(), function(indicatorModel, idx) { var dim = "indicator_" + idx; var indicatorAxis = new IndicatorAxis(dim, new IntervalScale()); indicatorAxis.name = indicatorModel.get("name"); indicatorAxis.model = indicatorModel; indicatorModel.axis = indicatorAxis; this.dimensions.push(dim); return indicatorAxis; }, this); this.resize(radarModel, api); } Radar.prototype.getIndicatorAxes = function() { return this._indicatorAxes; }; Radar.prototype.dataToPoint = function(value, indicatorIndex) { var indicatorAxis = this._indicatorAxes[indicatorIndex]; return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex); }; Radar.prototype.coordToPoint = function(coord, indicatorIndex) { var angle = this._indicatorAxes[indicatorIndex].angle; return [this.cx + coord * Math.cos(angle), this.cy - coord * Math.sin(angle)]; }; Radar.prototype.pointToData = function(pt) { var dx = pt[0] - this.cx; var dy = pt[1] - this.cy; var radius = Math.sqrt(dx * dx + dy * dy); dx /= radius; dy /= radius; var radian = Math.atan2(-dy, dx); var minRadianDiff = Infinity; var closestAxis; var closestAxisIdx = -1; for (var i = 0; i < this._indicatorAxes.length; i++) { var indicatorAxis = this._indicatorAxes[i]; var diff = Math.abs(radian - indicatorAxis.angle); if (diff < minRadianDiff) { closestAxis = indicatorAxis; closestAxisIdx = i; minRadianDiff = diff; } } return [closestAxisIdx, +(closestAxis && closestAxis.coordToData(radius))]; }; Radar.prototype.resize = function(radarModel, api) { var refContainer = createBoxLayoutReference(radarModel, api).refContainer; var center = radarModel.get("center"); var clockwise = radarModel.get("clockwise") || false; var viewSize = Math.min(refContainer.width, refContainer.height) / 2; this.cx = parsePercent(center[0], refContainer.width) + refContainer.x; this.cy = parsePercent(center[1], refContainer.height) + refContainer.y; this.startAngle = radarModel.get("startAngle") * Math.PI / 180; var radius = radarModel.get("radius"); if (isString(radius) || isNumber(radius)) radius = [0, radius]; this.r0 = parsePercent(radius[0], viewSize); this.r = parsePercent(radius[1], viewSize); var sign = clockwise ? -1 : 1; each$12(this._indicatorAxes, function(indicatorAxis, idx) { indicatorAxis.setExtent(this.r0, this.r); var angle = this.startAngle + sign * idx * Math.PI * 2 / this._indicatorAxes.length; angle = Math.atan2(Math.sin(angle), Math.cos(angle)); indicatorAxis.angle = angle; }, this); }; Radar.prototype.update = function(ecModel, api) { var indicatorAxes = this._indicatorAxes; var radarModel = this._model; var splitNumber = ensureValidSplitNumber(radarModel.get("splitNumber"), 5); var dummyScale = new IntervalScale(); dummyScale.setExtent(0, splitNumber); dummyScale.setConfig({ interval: 1 }); each$12(indicatorAxes, function(indicatorAxis) { scaleRawExtentInfoCreate(indicatorAxis, 1); scaleCalcAlign(indicatorAxis, dummyScale); }); }; Radar.prototype.convertToPixel = function(ecModel, finder, value) { console.warn("Not implemented."); return null; }; Radar.prototype.convertFromPixel = function(ecModel, finder, pixel) { console.warn("Not implemented."); return null; }; Radar.prototype.containPoint = function(point) { console.warn("Not implemented."); return false; }; Radar.create = function(ecModel, api) { var radarList = []; ecModel.eachComponent(COMPONENT_TYPE_RADAR, function(radarModel) { var radar = new Radar(radarModel, ecModel, api); radarList.push(radar); radarModel.coordinateSystem = radar; }); ecModel.eachSeriesByType(SERIES_TYPE_RADAR, function(radarSeries) { if (radarSeries.get("coordinateSystem") === "radar") { var radar = radarSeries.coordinateSystem = radarList[radarSeries.get("radarIndex") || 0]; if (radar) each$12(radar.getIndicatorAxes(), function(indicatorAxis) { associateSeriesWithAxis(indicatorAxis, radarSeries, COORD_SYS_TYPE_RADAR); }); } }); return radarList; }; /** * Radar dimensions is based on the data */ Radar.dimensions = []; return Radar; }(); //#endregion //#region node_modules/echarts/lib/component/radar/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$50(registers) { registers.registerCoordinateSystem("radar", Radar); registers.registerComponentModel(RadarModel); registers.registerComponentView(RadarView); registers.registerVisual({ seriesType: "radar", reset: function(seriesModel) { var data = seriesModel.getData(); data.each(function(idx) { data.setItemVisual(idx, "legendIcon", "roundRect"); }); data.setVisual("legendIcon", "roundRect"); } }); } //#endregion //#region node_modules/echarts/lib/chart/radar/radarLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var radarLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_RADAR$1, radarLayout); function radarLayout(ecModel) { ecModel.eachSeriesByType(SERIES_TYPE_RADAR$1, function(seriesModel) { var data = seriesModel.getData(); var points = []; var coordSys = seriesModel.coordinateSystem; if (!coordSys) return; var axes = coordSys.getIndicatorAxes(); each$12(axes, function(axis, axisIndex) { data.each(data.mapDimension(axes[axisIndex].dim), function(val, dataIndex) { points[dataIndex] = points[dataIndex] || []; var point = coordSys.dataToPoint(val, axisIndex); points[dataIndex][axisIndex] = isValidPoint(point) ? point : getValueMissingPoint(coordSys); }); }); data.each(function(idx) { var firstPoint = find(points[idx], function(point) { return isValidPoint(point); }) || getValueMissingPoint(coordSys); points[idx].push(firstPoint.slice()); data.setItemLayout(idx, points[idx]); }); }); } function isValidPoint(point) { return !isNaN(point[0]) && !isNaN(point[1]); } function getValueMissingPoint(coordSys) { return [coordSys.cx, coordSys.cy]; } //#endregion //#region node_modules/echarts/lib/chart/radar/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$49(registers) { use(install$50); registers.registerChartView(RadarView$1); registers.registerSeriesModel(RadarSeriesModel); registers.registerLayout(radarLayoutStageHandler); registers.registerProcessor(dataFilter$1("radar")); registers.registerPreprocessor(radarBackwardCompat); } //#endregion //#region node_modules/echarts/lib/component/helper/interactionMutex.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$16 = makeInner(); function take(zr, resourceKey, userKey) { inner$16(zr)[resourceKey] = userKey; } function release(zr, resourceKey, userKey) { var store = inner$16(zr); if (store[resourceKey] === userKey) store[resourceKey] = null; } function isTaken(zr, resourceKey) { return !!inner$16(zr)[resourceKey]; } /** * payload: { * type: 'takeGlobalCursor', * key: 'dataZoomSelect', or 'brush', or ..., * If no userKey, release global cursor. * } */ registerAction({ type: "takeGlobalCursor", event: "globalCursorTaken", update: "update" }, noop); //#endregion //#region node_modules/echarts/lib/component/helper/cursorHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var IRRELEVANT_EXCLUDES = { "axisPointer": 1, "tooltip": 1, "brush": 1 }; /** * Used on roam/brush triggering determination. * This is to avoid that: mouse clicking on an elements that is over geo or graph, * but roam is triggered unexpectedly. */ function onIrrelevantElement(e, api, targetComponent) { var eventElComponent = api.getComponentByElement(e.topTarget); if (!eventElComponent || eventElComponent === targetComponent || IRRELEVANT_EXCLUDES.hasOwnProperty(eventElComponent.mainType)) return false; var eventElCoordSys = eventElComponent.coordinateSystem; if (!eventElCoordSys || eventElCoordSys.model === targetComponent) return false; var eventElCmptZInfo = retrieveZInfo(eventElComponent); var targetCmptZInfo = retrieveZInfo(targetComponent); if ((eventElCmptZInfo.zlevel - targetCmptZInfo.zlevel || eventElCmptZInfo.z - targetCmptZInfo.z) <= 0) return false; return true; } //#endregion //#region node_modules/echarts/lib/component/helper/RoamController.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * An manager of zoom and pan(darg) hehavior. * But it is not responsible for updating the view, since view updates vary and can * not be handled in a uniform way. * * Note: regarding view updates: * - Transformabe views typically use `coord/View` (e.g., geo and series.graph roaming). * Some commonly used view update logic has been organized into `roamHelper.ts`. * - Non-transformable views handle updates themselves, possibly involving re-layout, * (e.g., treemap). * - Some scenarios do not require transformation (e.g., dataZoom roaming for cartesian, * brush component). */ var RoamController = function(_super) { __extends(RoamController, _super); function RoamController(zr) { var _this = _super.call(this) || this; _this._zr = zr; var mousedownHandler = bind$1(_this._mousedownHandler, _this); var mousemoveHandler = bind$1(_this._mousemoveHandler, _this); var mouseupHandler = bind$1(_this._mouseupHandler, _this); var mousewheelHandler = bind$1(_this._mousewheelHandler, _this); var pinchHandler = bind$1(_this._pinchHandler, _this); /** * Notice: * - only enable needed types. For example, if 'zoom' * is not needed, 'zoom' should not be enabled, otherwise * default mousewheel behaviour (scroll page) will be disabled. * - This method is idempotent. */ _this.enable = function(controlType, rawOpt) { var zInfo = rawOpt.zInfo; var _a = retrieveZInfo(zInfo.component), z = _a.z, zlevel = _a.zlevel; var zInfoParsed = { component: zInfo.component, z, zlevel, z2: retrieve2(zInfo.z2, -Infinity) }; var triggerInfo = extend({}, rawOpt.triggerInfo); this._opt = defaults(extend({}, rawOpt), { zoomOnMouseWheel: true, moveOnMouseMove: true, moveOnMouseWheel: false, preventDefaultMouseMove: true, zInfoParsed, triggerInfo, cursorGrab: "grab", cursorGrabbing: "grabbing" }); if (controlType == null) controlType = true; if (!this._enabled || this._controlType !== controlType) { this.disable(); this._enabled = true; if (controlType === true || controlType === "move" || controlType === "pan") { addRoamZrListener(zr, "mousedown", mousedownHandler, zInfoParsed); addRoamZrListener(zr, "mousemove", mousemoveHandler, zInfoParsed); addRoamZrListener(zr, "mouseup", mouseupHandler, zInfoParsed); } if (controlType === true || controlType === "scale" || controlType === "zoom") { addRoamZrListener(zr, "mousewheel", mousewheelHandler, zInfoParsed); addRoamZrListener(zr, "pinch", pinchHandler, zInfoParsed); } } }; _this.disable = function() { if (this._enabled) { this._enabled = false; removeRoamZrListener(zr, "mousedown", mousedownHandler); removeRoamZrListener(zr, "mousemove", mousemoveHandler); removeRoamZrListener(zr, "mouseup", mouseupHandler); removeRoamZrListener(zr, "mousewheel", mousewheelHandler); removeRoamZrListener(zr, "pinch", pinchHandler); } }; return _this; } RoamController.prototype.isDragging = function() { return this._dragging; }; RoamController.prototype.isPinching = function() { return this._pinching; }; RoamController.prototype._checkPointer = function(e, x, y) { var opt = this._opt; var zInfoParsed = opt.zInfoParsed; if (onIrrelevantElement(e, opt.api, zInfoParsed.component)) return false; var triggerInfo = opt.triggerInfo; var roamTrigger = triggerInfo.roamTrigger; var inArea = false; if (roamTrigger === "global") inArea = true; if (!inArea) inArea = triggerInfo.isInSelf(e, x, y); if (inArea && triggerInfo.isInClip && !triggerInfo.isInClip(e, x, y)) inArea = false; return inArea; }; RoamController.prototype._decideCursorStyle = function(e, x, y, forReverse) { var target = e.target; if (!target && this._checkPointer(e, x, y)) return this._opt.cursorGrab; if (forReverse) return target && target.cursor || "default"; }; RoamController.prototype.dispose = function() { this.disable(); }; RoamController.prototype._mousedownHandler = function(e) { if (isMiddleOrRightButtonOnMouseUpDown(e) || eventConsumed(e)) return; var el = e.target; while (el) { if (el.draggable) return; el = el.__hostTarget || el.parent; } var x = e.offsetX; var y = e.offsetY; if (this._checkPointer(e, x, y)) { this._x = x; this._y = y; this._dragging = true; } }; RoamController.prototype._mousemoveHandler = function(e) { var zr = this._zr; if (e.gestureEvent === "pinch" || isTaken(zr, "globalPan") || eventConsumed(e)) return; var x = e.offsetX; var y = e.offsetY; if (!this._dragging || !isAvailableBehavior("moveOnMouseMove", e, this._opt)) { var cursorStyle = this._decideCursorStyle(e, x, y, false); if (cursorStyle) zr.setCursorStyle(cursorStyle); return; } zr.setCursorStyle(this._opt.cursorGrabbing); var oldX = this._x; var oldY = this._y; var dx = x - oldX; var dy = y - oldY; this._x = x; this._y = y; if (this._opt.preventDefaultMouseMove) stop(e.event); e.__ecRoamConsumed = true; trigger$1(this, "pan", "moveOnMouseMove", e, { dx, dy, oldX, oldY, newX: x, newY: y, isAvailableBehavior: null }); }; RoamController.prototype._mouseupHandler = function(e) { if (eventConsumed(e)) return; var zr = this._zr; if (!isMiddleOrRightButtonOnMouseUpDown(e)) { this._dragging = false; var cursorStyle = this._decideCursorStyle(e, e.offsetX, e.offsetY, true); if (cursorStyle) zr.setCursorStyle(cursorStyle); } }; RoamController.prototype._mousewheelHandler = function(e) { if (eventConsumed(e)) return; var shouldZoom = isAvailableBehavior("zoomOnMouseWheel", e, this._opt); var shouldMove = isAvailableBehavior("moveOnMouseWheel", e, this._opt); var wheelDelta = e.wheelDelta; var absWheelDeltaDelta = Math.abs(wheelDelta); var originX = e.offsetX; var originY = e.offsetY; if (wheelDelta === 0 || !shouldZoom && !shouldMove) return; if (shouldZoom) { var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1; var scale = wheelDelta > 0 ? factor : 1 / factor; this._checkTriggerMoveZoom(this, "zoom", "zoomOnMouseWheel", e, { scale, originX, originY, isAvailableBehavior: null }); } if (shouldMove) { var absDelta = Math.abs(wheelDelta); var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? .4 : absDelta > 1 ? .15 : .05); this._checkTriggerMoveZoom(this, "scrollMove", "moveOnMouseWheel", e, { scrollDelta, originX, originY, isAvailableBehavior: null }); } }; RoamController.prototype._pinchHandler = function(e) { if (isTaken(this._zr, "globalPan") || eventConsumed(e)) return; var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1; this._checkTriggerMoveZoom(this, "zoom", null, e, { scale, originX: e.pinchX, originY: e.pinchY, isAvailableBehavior: null }); }; RoamController.prototype._checkTriggerMoveZoom = function(controller, eventName, behaviorToCheck, e, contollerEvent) { if (controller._checkPointer(e, contollerEvent.originX, contollerEvent.originY)) { stop(e.event); e.__ecRoamConsumed = true; trigger$1(controller, eventName, behaviorToCheck, e, contollerEvent); } }; return RoamController; }(Eventful); function eventConsumed(e) { return e.__ecRoamConsumed; } var innerZrStore = makeInner(); function ensureZrStore(zr) { var store = innerZrStore(zr); store.roam = store.roam || {}; store.uniform = store.uniform || {}; return store; } /** * Listeners are sorted by z2/z/zlevel in descending order. * This decides the precedence between different roam controllers if they are overlapped. * * [MEMO]: It's not easy to perfectly reconcile the conflicts caused by overlap. * - Consider cases: * - Multiple roam controllers overlapped. * - Usually only the topmost can trigger roam. * - Roam controllers overlap with other zr elements: * - zr elements are relevant or irrelevent to the host of the roam controller. e.g., axis split line * or series elements is relevant to a cartesian and should trigger roam. * - zr elements is above or below the roam controller host, which affects the precedence of interaction. * - zr elements may not silent only for triggering tooltip by hovering, which is available to roam; * or may not silent for click, where roam is not preferable. * - Approach - `addRoamZrListener+pointerChecker+onIrrelevantElement` (currently used): * - Resolve the precedence between different roam controllers * - But cannot prevent the handling on other zr elements that under the roam controller in z-order. * - Approach - "use an invisible zr elements to receive the zr events to trigger roam": * - More complicated in impl. * - May cause bad cases where zr event cannot be receive due to other non-silient zr elements covering it. */ function addRoamZrListener(zr, eventType, listener, zInfoParsed) { var roam = ensureZrStore(zr).roam; var listenerList = roam[eventType] = roam[eventType] || []; var idx = 0; for (; idx < listenerList.length; idx++) { var currZInfo = listenerList[idx].zInfoParsed; if ((currZInfo.zlevel - zInfoParsed.zlevel || currZInfo.z - zInfoParsed.z || currZInfo.z2 - zInfoParsed.z2) <= 0) break; } listenerList.splice(idx, 0, { listener, zInfoParsed }); ensureUniformListener(zr, eventType); } function removeRoamZrListener(zr, eventType, listener) { var listenerList = ensureZrStore(zr).roam[eventType] || []; for (var idx = 0; idx < listenerList.length; idx++) if (listenerList[idx].listener === listener) { listenerList.splice(idx, 1); if (!listenerList.length) removeUniformListener(zr, eventType); return; } } function ensureUniformListener(zr, eventType) { var store = ensureZrStore(zr); if (!store.uniform[eventType]) zr.on(eventType, store.uniform[eventType] = function(event) { var listenerList = store.roam[eventType]; if (listenerList) for (var i = 0; i < listenerList.length; i++) listenerList[i].listener(event); }); } function removeUniformListener(zr, eventType) { var uniform = ensureZrStore(zr).uniform; if (uniform[eventType]) { zr.off(eventType, uniform[eventType]); uniform[eventType] = null; } } function trigger$1(controller, eventName, behaviorToCheck, e, contollerEvent) { contollerEvent.isAvailableBehavior = bind$1(isAvailableBehavior, null, behaviorToCheck, e); controller.trigger(eventName, contollerEvent); } function isAvailableBehavior(behaviorToCheck, e, settings) { var setting = settings[behaviorToCheck]; return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + "Key"]); } //#endregion //#region node_modules/zrender/lib/tool/parseXML.js function parseXML(svg) { if (isString(svg)) svg = new DOMParser().parseFromString(svg, "text/xml"); var svgNode = svg; if (svgNode.nodeType === 9) svgNode = svgNode.firstChild; while (svgNode.nodeName.toLowerCase() !== "svg" || svgNode.nodeType !== 1) svgNode = svgNode.nextSibling; return svgNode; } //#endregion //#region node_modules/zrender/lib/tool/parseSVG.js var nodeParsers; var INHERITABLE_STYLE_ATTRIBUTES_MAP = { "fill": "fill", "stroke": "stroke", "stroke-width": "lineWidth", "opacity": "opacity", "fill-opacity": "fillOpacity", "stroke-opacity": "strokeOpacity", "stroke-dasharray": "lineDash", "stroke-dashoffset": "lineDashOffset", "stroke-linecap": "lineCap", "stroke-linejoin": "lineJoin", "stroke-miterlimit": "miterLimit", "font-family": "fontFamily", "font-size": "fontSize", "font-style": "fontStyle", "font-weight": "fontWeight", "text-anchor": "textAlign", "visibility": "visibility", "display": "display" }; var INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP); var SELF_STYLE_ATTRIBUTES_MAP = { "alignment-baseline": "textBaseline", "stop-color": "stopColor" }; var SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP); var SVGParser = function() { function SVGParser() { this._defs = {}; this._root = null; } SVGParser.prototype.parse = function(xml, opt) { opt = opt || {}; var svg = parseXML(xml); if (!svg) throw new Error("Illegal svg"); this._defsUsePending = []; var root = new Group$3(); this._root = root; var named = []; var viewBox = svg.getAttribute("viewBox") || ""; var width = parseFloat(svg.getAttribute("width") || opt.width); var height = parseFloat(svg.getAttribute("height") || opt.height); isNaN(width) && (width = null); isNaN(height) && (height = null); parseAttributes(svg, root, null, true, false); var child = svg.firstChild; while (child) { this._parseNode(child, root, named, null, false, false); child = child.nextSibling; } applyDefs(this._defs, this._defsUsePending); this._defsUsePending = []; var viewBoxRect; var viewBoxTransform; if (viewBox) { var viewBoxArr = splitNumberSequence(viewBox); if (viewBoxArr.length >= 4) viewBoxRect = { x: parseFloat(viewBoxArr[0] || 0), y: parseFloat(viewBoxArr[1] || 0), width: parseFloat(viewBoxArr[2]), height: parseFloat(viewBoxArr[3]) }; } if (viewBoxRect && width != null && height != null) { viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width, height }); if (!opt.ignoreViewBox) { var elRoot = root; root = new Group$3(); root.add(elRoot); elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale; elRoot.x = viewBoxTransform.x; elRoot.y = viewBoxTransform.y; } } if (!opt.ignoreRootClip && width != null && height != null) root.setClipPath(new Rect$2({ shape: { x: 0, y: 0, width, height } })); return { root, width, height, viewBoxRect, viewBoxTransform, named }; }; SVGParser.prototype._parseNode = function(xmlNode, parentGroup, named, namedFrom, isInDefs, isInText) { var nodeName = xmlNode.nodeName.toLowerCase(); var el; var namedFromForSub = namedFrom; if (nodeName === "defs") isInDefs = true; if (nodeName === "text") isInText = true; if (nodeName === "defs" || nodeName === "switch") el = parentGroup; else { if (!isInDefs) { var parser_1 = nodeParsers[nodeName]; if (parser_1 && hasOwn(nodeParsers, nodeName)) { el = parser_1.call(this, xmlNode, parentGroup); var nameAttr = xmlNode.getAttribute("name"); if (nameAttr) { var newNamed = { name: nameAttr, namedFrom: null, svgNodeTagLower: nodeName, el }; named.push(newNamed); if (nodeName === "g") namedFromForSub = newNamed; } else if (namedFrom) named.push({ name: namedFrom.name, namedFrom, svgNodeTagLower: nodeName, el }); parentGroup.add(el); } } var parser = paintServerParsers[nodeName]; if (parser && hasOwn(paintServerParsers, nodeName)) { var def = parser.call(this, xmlNode); var id = xmlNode.getAttribute("id"); if (id) this._defs[id] = def; } } if (el && el.isGroup) { var child = xmlNode.firstChild; while (child) { if (child.nodeType === 1) this._parseNode(child, el, named, namedFromForSub, isInDefs, isInText); else if (child.nodeType === 3 && isInText) this._parseText(child, el); child = child.nextSibling; } } }; SVGParser.prototype._parseText = function(xmlNode, parentGroup) { var text = new TSpan({ style: { text: xmlNode.textContent }, silent: true, x: this._textX || 0, y: this._textY || 0 }); inheritStyle(parentGroup, text); parseAttributes(xmlNode, text, this._defsUsePending, false, false); applyTextAlignment(text, parentGroup); var textStyle = text.style; var fontSize = textStyle.fontSize; if (fontSize && fontSize < 9) { textStyle.fontSize = 9; text.scaleX *= fontSize / 9; text.scaleY *= fontSize / 9; } textStyle.font = (textStyle.fontSize || textStyle.fontFamily) && [ textStyle.fontStyle, textStyle.fontWeight, (textStyle.fontSize || 12) + "px", textStyle.fontFamily || "sans-serif" ].join(" "); var rect = text.getBoundingRect(); this._textX += rect.width; parentGroup.add(text); return text; }; SVGParser.internalField = (function() { nodeParsers = { "g": function(xmlNode, parentGroup) { var g = new Group$3(); inheritStyle(parentGroup, g); parseAttributes(xmlNode, g, this._defsUsePending, false, false); return g; }, "rect": function(xmlNode, parentGroup) { var rect = new Rect$2(); inheritStyle(parentGroup, rect); parseAttributes(xmlNode, rect, this._defsUsePending, false, false); rect.setShape({ x: parseFloat(xmlNode.getAttribute("x") || "0"), y: parseFloat(xmlNode.getAttribute("y") || "0"), width: parseFloat(xmlNode.getAttribute("width") || "0"), height: parseFloat(xmlNode.getAttribute("height") || "0") }); rect.silent = true; return rect; }, "circle": function(xmlNode, parentGroup) { var circle = new Circle(); inheritStyle(parentGroup, circle); parseAttributes(xmlNode, circle, this._defsUsePending, false, false); circle.setShape({ cx: parseFloat(xmlNode.getAttribute("cx") || "0"), cy: parseFloat(xmlNode.getAttribute("cy") || "0"), r: parseFloat(xmlNode.getAttribute("r") || "0") }); circle.silent = true; return circle; }, "line": function(xmlNode, parentGroup) { var line = new Line$1(); inheritStyle(parentGroup, line); parseAttributes(xmlNode, line, this._defsUsePending, false, false); line.setShape({ x1: parseFloat(xmlNode.getAttribute("x1") || "0"), y1: parseFloat(xmlNode.getAttribute("y1") || "0"), x2: parseFloat(xmlNode.getAttribute("x2") || "0"), y2: parseFloat(xmlNode.getAttribute("y2") || "0") }); line.silent = true; return line; }, "ellipse": function(xmlNode, parentGroup) { var ellipse = new Ellipse(); inheritStyle(parentGroup, ellipse); parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false); ellipse.setShape({ cx: parseFloat(xmlNode.getAttribute("cx") || "0"), cy: parseFloat(xmlNode.getAttribute("cy") || "0"), rx: parseFloat(xmlNode.getAttribute("rx") || "0"), ry: parseFloat(xmlNode.getAttribute("ry") || "0") }); ellipse.silent = true; return ellipse; }, "polygon": function(xmlNode, parentGroup) { var pointsStr = xmlNode.getAttribute("points"); var pointsArr; if (pointsStr) pointsArr = parsePoints(pointsStr); var polygon = new Polygon({ shape: { points: pointsArr || [] }, silent: true }); inheritStyle(parentGroup, polygon); parseAttributes(xmlNode, polygon, this._defsUsePending, false, false); return polygon; }, "polyline": function(xmlNode, parentGroup) { var pointsStr = xmlNode.getAttribute("points"); var pointsArr; if (pointsStr) pointsArr = parsePoints(pointsStr); var polyline = new Polyline$1({ shape: { points: pointsArr || [] }, silent: true }); inheritStyle(parentGroup, polyline); parseAttributes(xmlNode, polyline, this._defsUsePending, false, false); return polyline; }, "image": function(xmlNode, parentGroup) { var img = new ZRImage(); inheritStyle(parentGroup, img); parseAttributes(xmlNode, img, this._defsUsePending, false, false); img.setStyle({ image: xmlNode.getAttribute("xlink:href") || xmlNode.getAttribute("href"), x: +xmlNode.getAttribute("x"), y: +xmlNode.getAttribute("y"), width: +xmlNode.getAttribute("width"), height: +xmlNode.getAttribute("height") }); img.silent = true; return img; }, "text": function(xmlNode, parentGroup) { var x = xmlNode.getAttribute("x") || "0"; var y = xmlNode.getAttribute("y") || "0"; var dx = xmlNode.getAttribute("dx") || "0"; var dy = xmlNode.getAttribute("dy") || "0"; this._textX = parseFloat(x) + parseFloat(dx); this._textY = parseFloat(y) + parseFloat(dy); var g = new Group$3(); inheritStyle(parentGroup, g); parseAttributes(xmlNode, g, this._defsUsePending, false, true); return g; }, "tspan": function(xmlNode, parentGroup) { var x = xmlNode.getAttribute("x"); var y = xmlNode.getAttribute("y"); if (x != null) this._textX = parseFloat(x); if (y != null) this._textY = parseFloat(y); var dx = xmlNode.getAttribute("dx") || "0"; var dy = xmlNode.getAttribute("dy") || "0"; var g = new Group$3(); inheritStyle(parentGroup, g); parseAttributes(xmlNode, g, this._defsUsePending, false, true); this._textX += parseFloat(dx); this._textY += parseFloat(dy); return g; }, "path": function(xmlNode, parentGroup) { var path = createFromString(xmlNode.getAttribute("d") || ""); inheritStyle(parentGroup, path); parseAttributes(xmlNode, path, this._defsUsePending, false, false); path.silent = true; return path; } }; })(); return SVGParser; }(); var paintServerParsers = { "lineargradient": function(xmlNode) { var gradient = new LinearGradient(parseInt(xmlNode.getAttribute("x1") || "0", 10), parseInt(xmlNode.getAttribute("y1") || "0", 10), parseInt(xmlNode.getAttribute("x2") || "10", 10), parseInt(xmlNode.getAttribute("y2") || "0", 10)); parsePaintServerUnit(xmlNode, gradient); parseGradientColorStops(xmlNode, gradient); return gradient; }, "radialgradient": function(xmlNode) { var gradient = new RadialGradient(parseInt(xmlNode.getAttribute("cx") || "0", 10), parseInt(xmlNode.getAttribute("cy") || "0", 10), parseInt(xmlNode.getAttribute("r") || "0", 10)); parsePaintServerUnit(xmlNode, gradient); parseGradientColorStops(xmlNode, gradient); return gradient; } }; function parsePaintServerUnit(xmlNode, gradient) { if (xmlNode.getAttribute("gradientUnits") === "userSpaceOnUse") gradient.global = true; } function parseGradientColorStops(xmlNode, gradient) { var stop = xmlNode.firstChild; while (stop) { if (stop.nodeType === 1 && stop.nodeName.toLocaleLowerCase() === "stop") { var offsetStr = stop.getAttribute("offset"); var offset = void 0; if (offsetStr && offsetStr.indexOf("%") > 0) offset = parseInt(offsetStr, 10) / 100; else if (offsetStr) offset = parseFloat(offsetStr); else offset = 0; var styleVals = {}; parseInlineStyle(stop, styleVals, styleVals); var stopColor = styleVals.stopColor || stop.getAttribute("stop-color") || "#000000"; var stopOpacity = styleVals.stopOpacity || stop.getAttribute("stop-opacity"); if (stopOpacity) { var rgba = parse(stopColor); if (rgba && rgba[3]) { rgba[3] *= parseCssFloat(stopOpacity); stopColor = stringify(rgba, "rgba"); } } gradient.colorStops.push({ offset, color: stopColor }); } stop = stop.nextSibling; } } function inheritStyle(parent, child) { if (parent && parent.__inheritedStyle) { if (!child.__inheritedStyle) child.__inheritedStyle = {}; defaults(child.__inheritedStyle, parent.__inheritedStyle); } } function parsePoints(pointsString) { var list = splitNumberSequence(pointsString); var points = []; for (var i = 0; i < list.length; i += 2) { var x = parseFloat(list[i]); var y = parseFloat(list[i + 1]); points.push([x, y]); } return points; } function parseAttributes(xmlNode, el, defsUsePending, onlyInlineStyle, isTextGroup) { var disp = el; var inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {}; var selfStyle = {}; if (xmlNode.nodeType === 1) { parseTransformAttribute(xmlNode, el); parseInlineStyle(xmlNode, inheritedStyle, selfStyle); if (!onlyInlineStyle) parseAttributeStyle(xmlNode, inheritedStyle, selfStyle); } disp.style = disp.style || {}; if (inheritedStyle.fill != null) disp.style.fill = getFillStrokeStyle(disp, "fill", inheritedStyle.fill, defsUsePending); if (inheritedStyle.stroke != null) disp.style.stroke = getFillStrokeStyle(disp, "stroke", inheritedStyle.stroke, defsUsePending); each$12([ "lineWidth", "opacity", "fillOpacity", "strokeOpacity", "miterLimit", "fontSize" ], function(propName) { if (inheritedStyle[propName] != null) disp.style[propName] = parseFloat(inheritedStyle[propName]); }); each$12([ "lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign" ], function(propName) { if (inheritedStyle[propName] != null) disp.style[propName] = inheritedStyle[propName]; }); if (isTextGroup) disp.__selfStyle = selfStyle; if (inheritedStyle.lineDash) disp.style.lineDash = map$1(splitNumberSequence(inheritedStyle.lineDash), function(str) { return parseFloat(str); }); if (inheritedStyle.visibility === "hidden" || inheritedStyle.visibility === "collapse") disp.invisible = true; if (inheritedStyle.display === "none") disp.ignore = true; } function applyTextAlignment(text, parentGroup) { var parentSelfStyle = parentGroup.__selfStyle; if (parentSelfStyle) { var textBaseline = parentSelfStyle.textBaseline; var zrTextBaseline = textBaseline; if (!textBaseline || textBaseline === "auto") zrTextBaseline = "alphabetic"; else if (textBaseline === "baseline") zrTextBaseline = "alphabetic"; else if (textBaseline === "before-edge" || textBaseline === "text-before-edge") zrTextBaseline = "top"; else if (textBaseline === "after-edge" || textBaseline === "text-after-edge") zrTextBaseline = "bottom"; else if (textBaseline === "central" || textBaseline === "mathematical") zrTextBaseline = "middle"; text.style.textBaseline = zrTextBaseline; } var parentInheritedStyle = parentGroup.__inheritedStyle; if (parentInheritedStyle) { var textAlign = parentInheritedStyle.textAlign; var zrTextAlign = textAlign; if (textAlign) { if (textAlign === "middle") zrTextAlign = "center"; text.style.textAlign = zrTextAlign; } } } var urlRegex = /^url\(\s*#(.*?)\)/; function getFillStrokeStyle(el, method, str, defsUsePending) { var urlMatch = str && str.match(urlRegex); if (urlMatch) { var url = trim$1(urlMatch[1]); defsUsePending.push([ el, method, url ]); return; } if (str === "none") str = null; return str; } function applyDefs(defs, defsUsePending) { for (var i = 0; i < defsUsePending.length; i++) { var item = defsUsePending[i]; item[0].style[item[1]] = defs[item[2]]; } } var numberReg = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; function splitNumberSequence(rawStr) { return rawStr.match(numberReg) || []; } var transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.eE,]*)\)/g; var DEGREE_TO_ANGLE = Math.PI / 180; function parseTransformAttribute(xmlNode, node) { var transform = xmlNode.getAttribute("transform"); if (transform) { transform = transform.replace(/,/g, " "); var transformOps_1 = []; var mt = null; transform.replace(transformRegex, function(str, type, value) { transformOps_1.push(type, value); return ""; }); for (var i = transformOps_1.length - 1; i > 0; i -= 2) { var value = transformOps_1[i]; var type = transformOps_1[i - 1]; var valueArr = splitNumberSequence(value); mt = mt || create$1(); switch (type) { case "translate": translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || "0")]); break; case "scale": scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]); break; case "rotate": rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE, [parseFloat(valueArr[1] || "0"), parseFloat(valueArr[2] || "0")]); break; case "skewX": var sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE); mul(mt, [ 1, 0, sx, 1, 0, 0 ], mt); break; case "skewY": var sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE); mul(mt, [ 1, sy, 0, 1, 0, 0 ], mt); break; case "matrix": mt[0] = parseFloat(valueArr[0]); mt[1] = parseFloat(valueArr[1]); mt[2] = parseFloat(valueArr[2]); mt[3] = parseFloat(valueArr[3]); mt[4] = parseFloat(valueArr[4]); mt[5] = parseFloat(valueArr[5]); } } node.setLocalTransform(mt); } } var styleRegex = /([^\s:;]+)\s*:\s*([^:;]+)/g; function parseInlineStyle(xmlNode, inheritableStyleResult, selfStyleResult) { var style = xmlNode.getAttribute("style"); if (!style) return; styleRegex.lastIndex = 0; var styleRegResult; while ((styleRegResult = styleRegex.exec(style)) != null) { var svgStlAttr = styleRegResult[1]; var zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr) ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr] : null; if (zrInheritableStlAttr) inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2]; var zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr) ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr] : null; if (zrSelfStlAttr) selfStyleResult[zrSelfStlAttr] = styleRegResult[2]; } } function parseAttributeStyle(xmlNode, inheritableStyleResult, selfStyleResult) { for (var i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) { var svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i]; var attrValue = xmlNode.getAttribute(svgAttrName); if (attrValue != null) inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue; } for (var i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) { var svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i]; var attrValue = xmlNode.getAttribute(svgAttrName); if (attrValue != null) selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue; } } function makeViewBoxTransform(viewBoxRect, boundingRect) { var scaleX = boundingRect.width / viewBoxRect.width; var scaleY = boundingRect.height / viewBoxRect.height; var scale = Math.min(scaleX, scaleY); return { scale, x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2), y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2) }; } function parseSVG(xml, opt) { return new SVGParser().parse(xml, opt); } //#endregion //#region node_modules/echarts/lib/coord/geo/GeoSVGResource.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * "region available" means that: enable users to set attribute `name="xxx"` on those tags * to make it be a region. * 1. region styles and its label styles can be defined in echarts opton: * ```js * geo: { * regions: [{ * name: 'xxx', * itemStyle: { ... }, * label: { ... } * }, { * ... * }, * ...] * }; * ``` * 2. name can be duplicated in different SVG tag. All of the tags with the same name share * a region option. For exampel if there are two representing two lung lobes. They have * no common parents but both of them need to display label "lung" inside. */ var REGION_AVAILABLE_SVG_TAG_MAP = createHashMap([ "rect", "circle", "line", "ellipse", "polygon", "polyline", "path", "text", "tspan", "g" ]); var GeoSVGResource = function() { function GeoSVGResource(mapName, svg) { this.type = "geoSVG"; this._usedGraphicMap = createHashMap(); this._freedGraphics = []; this._mapName = mapName; this._parsedXML = parseXML(svg); } GeoSVGResource.prototype.load = function() { var firstGraphic = this._firstGraphic; if (!firstGraphic) { firstGraphic = this._firstGraphic = this._buildGraphic(this._parsedXML); this._freedGraphics.push(firstGraphic); this._boundingRect = this._firstGraphic.boundingRect.clone(); var _a = createRegions(firstGraphic.named), regions = _a.regions, regionsMap = _a.regionsMap; this._regions = regions; this._regionsMap = regionsMap; } return { boundingRect: this._boundingRect, regions: this._regions, regionsMap: this._regionsMap }; }; GeoSVGResource.prototype._buildGraphic = function(svgXML) { var result; var rootFromParse; try { result = svgXML && parseSVG(svgXML, { ignoreViewBox: true, ignoreRootClip: true }) || {}; rootFromParse = result.root; assert(rootFromParse != null); } catch (e) { throw new Error("Invalid svg format\n" + e.message); } var root = new Group$3(); root.add(rootFromParse); root.isGeoSVGGraphicRoot = true; var svgWidth = result.width; var svgHeight = result.height; var viewBoxRect = result.viewBoxRect; var boundingRect = this._boundingRect; if (!boundingRect) { var bRectX = void 0; var bRectY = void 0; var bRectWidth = void 0; var bRectHeight = void 0; if (svgWidth != null) { bRectX = 0; bRectWidth = svgWidth; } else if (viewBoxRect) { bRectX = viewBoxRect.x; bRectWidth = viewBoxRect.width; } if (svgHeight != null) { bRectY = 0; bRectHeight = svgHeight; } else if (viewBoxRect) { bRectY = viewBoxRect.y; bRectHeight = viewBoxRect.height; } if (bRectX == null || bRectY == null) { var calculatedBoundingRect = rootFromParse.getBoundingRect(); if (bRectX == null) { bRectX = calculatedBoundingRect.x; bRectWidth = calculatedBoundingRect.width; } if (bRectY == null) { bRectY = calculatedBoundingRect.y; bRectHeight = calculatedBoundingRect.height; } } boundingRect = this._boundingRect = new BoundingRect(bRectX, bRectY, bRectWidth, bRectHeight); } if (viewBoxRect) { var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect); rootFromParse.scaleX = rootFromParse.scaleY = viewBoxTransform.scale; rootFromParse.x = viewBoxTransform.x; rootFromParse.y = viewBoxTransform.y; } root.setClipPath(new Rect$2({ shape: boundingRect.plain() })); var named = []; each$12(result.named, function(namedItem) { if (REGION_AVAILABLE_SVG_TAG_MAP.get(namedItem.svgNodeTagLower) != null) { named.push(namedItem); setSilent(namedItem.el); } }); return { root, boundingRect, named }; }; /** * Consider: * (1) One graphic element can not be shared by different `geoView` running simultaneously. * Notice, also need to consider multiple echarts instances share a `mapRecord`. * (2) Converting SVG to graphic elements is time consuming. * (3) In the current architecture, `load` should be called frequently to get boundingRect, * and it is called without view info. * So we maintain graphic elements in this module, and enables `view` to use/return these * graphics from/to the pool with it's uid. */ GeoSVGResource.prototype.useGraphic = function(hostKey) { var usedRootMap = this._usedGraphicMap; var svgGraphic = usedRootMap.get(hostKey); if (svgGraphic) return svgGraphic; svgGraphic = this._freedGraphics.pop() || this._buildGraphic(this._parsedXML); usedRootMap.set(hostKey, svgGraphic); return svgGraphic; }; GeoSVGResource.prototype.freeGraphic = function(hostKey) { var usedRootMap = this._usedGraphicMap; var svgGraphic = usedRootMap.get(hostKey); if (svgGraphic) { usedRootMap.removeKey(hostKey); this._freedGraphics.push(svgGraphic); } }; return GeoSVGResource; }(); function setSilent(el) { el.silent = false; if (el.isGroup) el.traverse(function(child) { child.silent = false; }); } function createRegions(named) { var regions = []; var regionsMap = createHashMap(); each$12(named, function(namedItem) { if (namedItem.namedFrom != null) return; var region = new GeoSVGRegion(namedItem.name, namedItem.el); regions.push(region); regionsMap.set(namedItem.name, region); }); return { regions, regionsMap }; } //#endregion //#region node_modules/echarts/lib/coord/geo/fix/nanhai.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var geoCoord = [126, 25]; var nanhaiName = "南海诸岛"; var points$1 = [ [ [0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, .7], [52, .7], [56, 7.7], [59, .7], [64, .7], [64, 0], [5, 0], [0, 3.5] ], [ [13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1] ], [ [12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2] ], [ [16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6] ], [ [6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4] ], [ [23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6] ], [ [37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7] ], [ [48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1] ], [ [51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35] ], [ [52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4] ], [ [58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6] ], [ [0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5] ] ]; for (var i = 0; i < points$1.length; i++) for (var k = 0; k < points$1[i].length; k++) { points$1[i][k][0] /= 10.5; points$1[i][k][1] /= -14; points$1[i][k][0] += geoCoord[0]; points$1[i][k][1] += geoCoord[1]; } function fixNanhai(mapType, regions) { if (mapType === "china") { for (var i = 0; i < regions.length; i++) if (regions[i].name === nanhaiName) return; regions.push(new GeoJSONRegion(nanhaiName, map$1(points$1, function(exterior) { return { type: "polygon", exterior }; }), geoCoord)); } } //#endregion //#region node_modules/echarts/lib/coord/geo/fix/textCoord.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var coordsOffsetMap = { "南海诸岛": [32, 80], "广东": [0, -10], "香港": [10, 5], "澳门": [-10, 10], "天津": [5, 5] }; function fixTextCoords(mapType, region) { if (mapType === "china") { var coordFix = coordsOffsetMap[region.name]; if (coordFix) { var cp = region.getCenter(); cp[0] += coordFix[0] / 10.5; cp[1] += -coordFix[1] / 14; region.setCenter(cp); } } } //#endregion //#region node_modules/echarts/lib/coord/geo/fix/diaoyuIsland.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var points = [[ [123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261] ]]; function fixDiaoyuIsland(mapType, region) { if (mapType === "china" && region.name === "台湾") region.geometries.push({ type: "polygon", exterior: points[0] }); } //#endregion //#region node_modules/echarts/lib/coord/geo/GeoJSONResource.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_NAME_PROPERTY = "name"; var GeoJSONResource = function() { function GeoJSONResource(mapName, geoJSON, specialAreas) { this.type = "geoJSON"; this._parsedMap = createHashMap(); this._mapName = mapName; this._specialAreas = specialAreas; this._geoJSON = parseInput(geoJSON); } /** * @param nameMap can be null/undefined * @param nameProperty can be null/undefined */ GeoJSONResource.prototype.load = function(nameMap, nameProperty) { nameProperty = nameProperty || DEFAULT_NAME_PROPERTY; var parsed = this._parsedMap.get(nameProperty); if (!parsed) { var rawRegions = this._parseToRegions(nameProperty); parsed = this._parsedMap.set(nameProperty, { regions: rawRegions, boundingRect: calculateBoundingRect(rawRegions) }); } var regionsMap = createHashMap(); var finalRegions = []; each$12(parsed.regions, function(region) { var regionName = region.name; if (nameMap && hasOwn(nameMap, regionName)) region = region.cloneShallow(regionName = nameMap[regionName]); finalRegions.push(region); regionsMap.set(regionName, region); }); return { regions: finalRegions, boundingRect: parsed.boundingRect || new BoundingRect(0, 0, 0, 0), regionsMap }; }; GeoJSONResource.prototype._parseToRegions = function(nameProperty) { var mapName = this._mapName; var geoJSON = this._geoJSON; var rawRegions; try { rawRegions = geoJSON ? parseGeoJSON(geoJSON, nameProperty) : []; } catch (e) { throw new Error("Invalid geoJson format\n" + e.message); } fixNanhai(mapName, rawRegions); each$12(rawRegions, function(region) { var regionName = region.name; fixTextCoords(mapName, region); fixDiaoyuIsland(mapName, region); var specialArea = this._specialAreas && this._specialAreas[regionName]; if (specialArea) region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height); }, this); return rawRegions; }; /** * Only for exporting to users. * **MUST NOT** used internally. */ GeoJSONResource.prototype.getMapForUser = function() { return { geoJson: this._geoJSON, geoJSON: this._geoJSON, specialAreas: this._specialAreas }; }; return GeoJSONResource; }(); function calculateBoundingRect(regions) { var rect; for (var i = 0; i < regions.length; i++) { var regionRect = regions[i].getBoundingRect(); rect = rect || regionRect.clone(); rect.union(regionRect); } return rect; } function parseInput(source) { return !isString(source) ? source : typeof JSON !== "undefined" && JSON.parse ? JSON.parse(source) : new Function("return (" + source + ");")(); } //#endregion //#region node_modules/echarts/lib/coord/geo/geoSourceManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var storage = createHashMap(); var geoSourceManager_default = { /** * Compatible with previous `echarts.registerMap`. * * @usage * ```js * * echarts.registerMap('USA', geoJson, specialAreas); * * echarts.registerMap('USA', { * geoJson: geoJson, * specialAreas: {...} * }); * echarts.registerMap('USA', { * geoJSON: geoJson, * specialAreas: {...} * }); * * echarts.registerMap('airport', { * svg: svg * } * ``` * * Note: * Do not support that register multiple geoJSON or SVG * one map name. Because different geoJSON and SVG have * different unit. It's not easy to make sure how those * units are mapping/normalize. * If intending to use multiple geoJSON or SVG, we can * use multiple geo coordinate system. */ registerMap: function(mapName, rawDef, rawSpecialAreas) { if (rawDef.svg) { var resource = new GeoSVGResource(mapName, rawDef.svg); storage.set(mapName, resource); } else { var geoJSON = rawDef.geoJson || rawDef.geoJSON; if (geoJSON && !rawDef.features) rawSpecialAreas = rawDef.specialAreas; else geoJSON = rawDef; var resource = new GeoJSONResource(mapName, geoJSON, rawSpecialAreas); storage.set(mapName, resource); } }, getGeoResource: function(mapName) { return storage.get(mapName); }, /** * Only for exporting to users. * **MUST NOT** used internally. */ getMapForUser: function(mapName) { var resource = storage.get(mapName); return resource && resource.type === "geoJSON" && resource.getMapForUser(); }, load: function(mapName, nameMap, nameProperty) { var resource = storage.get(mapName); if (!resource) { console.error("Map " + mapName + " not exists. The GeoJSON of the map must be provided."); return; } return resource.load(nameMap, nameProperty); } }; function inner$15(viewCoordSys) { return viewCoordSys; } var VIEW_COORD_SYS_TYPE = "view"; /** * [VIEW_COORD_SYS] * * @final [NOTICE] Inheritance of this class is not recommended. Use composition instead. */ var View = function(_super) { __extends(View, _super); function View(invertY, legacyCenterBase, legacyGeo) { var _this = _super.call(this) || this; _this.type = VIEW_COORD_SYS_TYPE; _this.dimensions = ["x", "y"]; var viewInner = inner$15(_this); viewInner.invertY = invertY; viewInner.lgCt = legacyCenterBase; viewInner.lgGeo = legacyGeo; var trans = viewInner.trans = []; trans[0] = transformableCreate(); trans[1] = transformableCreate(); trans[2] = transformableCreate(); viewInner.mtRaw = create$1(); viewInner.mtRawInv = create$1(); viewInner.mtOverall = create$1(); viewInner.mtOverallInv = create$1(); viewInner.zoom = 1; return _this; } /** * @implements CoordinateSystem['getBoundingRect'] * @see VIEW_COORD_SYS_TRANS_RAW * * This is a rect in data space. * For historicall reason, the name is `getBoundingRect` - preserve it for backward compatibility. */ View.prototype.getBoundingRect = function() { return viewCoordSysCopyBoundingRect(null, this); }; /** * @implements CoordinateSystem['getViewRect'] * @see VIEW_COORD_SYS_TRANS_RAW */ View.prototype.getViewRect = function() { return viewCoordSysCopyViewRect(null, this); }; /** * @implements CoordinateSystem['getRoamTransform'] */ View.prototype.getRoamTransform = function() { return transformableGetLocalTransform(inner$15(this).trans[1]); }; View.prototype.dataToPoint = function(data, noRoam, out) { var transform = noRoam ? inner$15(this).mtRaw : inner$15(this).mtOverall; out = out || []; return transform ? applyTransform$1(out, data, transform) : copy$1(out, data); }; View.prototype.pointToData = function(point, reserved, out) { out = out || []; var invTransform = inner$15(this).mtOverallInv; return invTransform ? applyTransform$1(out, point, invTransform) : copy$1(out, point); }; View.prototype.convertToPixel = function(ecModel, finder, value) { var coordSys = getCoordSys$5(finder); return coordSys === this ? coordSys.dataToPoint(value) : null; }; View.prototype.convertFromPixel = function(ecModel, finder, pixel) { var coordSys = getCoordSys$5(finder); return coordSys === this ? coordSys.pointToData(pixel) : null; }; View.prototype.containPoint = function(point) { var viewInner = inner$15(this); boundingRectCopy(tmpPixelRectForContain, viewInner.dataRect); boundingRectApplyTransform(tmpPixelRectForContain, tmpPixelRectForContain, viewInner.mtOverall); return boundingRectContain(tmpPixelRectForContain, point[0], point[1]); }; View.dimensions = ["x", "y"]; return View; }(Transformable); var tmpPixelRectForContain = boundingRectCreate(); function viewCoordSysCopyOverallMatrix(out, viewCoordSys) { return copy(out || [], inner$15(viewCoordSys).mtOverall); } function viewCoordSysGetZoomOption(viewCoordSys) { return inner$15(viewCoordSys).zoom; } function viewCoordSysCopyBoundingRect(out, viewCoordSys) { return boundingRectCopy(out || boundingRectCreate(), inner$15(viewCoordSys).dataRect); } function viewCoordSysCopyViewRect(out, viewCoordSys) { return boundingRectCopy(out || boundingRectCreate(), inner$15(viewCoordSys).viewRect); } function viewCoordSysCopyTrans(out, viewCoordSys, transKind) { return copyTransform(out || transformableCreate(), inner$15(viewCoordSys).trans[transKind]); } function viewCoordSysIsInputReady(viewInner) { return !!(viewInner.dataRect && viewInner.viewRect); } function calcOverallTransFromSyncBackEl(out, viewInner, syncBackEl, syncBackType) { if (syncBackType === 1) calcOverallTrans(out, viewInner.trans[0], syncBackEl); else copyTransform(out, syncBackEl); } function calcRoamTransFromOverallTrans(out, viewInner, overallTrans) { transformableGetLocalTransform(overallTrans, tmpMtRTO); mul(tmpMtRTO, tmpMtRTO, viewInner.mtRawInv); decomposeTransform(out, tmpMtRTO); } var tmpMtRTO = create$1(); /** * [NOTICE] * The definition of this center has always been irrelevant to some other series center like * 'series-pie.center' - this center is a point in the space of `ViewInner['dataRect'].x/y`, * rather than canvas viewport, and the unit is not necessarily pixel (e.g., in geo case). */ function viewCoordSysSetRoamOptionFromModel(viewCoordSys, hostModel) { var viewInner = inner$15(viewCoordSys); viewInner.centerOption = hostModel.getShallow("center"); var zoomLimit = viewInner.zoomLimit = hostModel.getShallow("scaleLimit"); viewInner.zoom = clampByZoomLimit(hostModel.getShallow("zoom") || 1, zoomLimit) || 1; if (viewCoordSysIsInputReady(viewInner)) viewCoordSysUpdateTransform(viewInner); } /** * @see ViewInner['dataRect'] */ function viewCoordSysSetBoundingRect(viewCoordSys, x, y, width, height) { var viewInner = inner$15(viewCoordSys); viewInner.dataRect = new BoundingRect(x, y, width, height); if (viewCoordSysIsInputReady(viewInner)) viewCoordSysUpdateTransform(viewInner); } /** * @see ViewInner['viewRect'] */ function viewCoordSysSetViewRect(viewCoordSys, x, y, width, height) { var viewInner = inner$15(viewCoordSys); viewInner.viewRect = new BoundingRect(x, y, width, height); if (viewCoordSysIsInputReady(viewInner)) viewCoordSysUpdateTransform(viewInner); } function viewCoordSysUpdateTransform(viewInner) { viewCoordSysUpdateRawTrans(viewInner); viewCoordSysUpdateRoamTrans(viewInner); viewCoordSysUpdateOverallTrans(viewInner); } function viewCoordSysUpdateRawTrans(viewInner) { var dataRect = viewInner.dataRect; var viewRect = viewInner.viewRect; var rawTrans = viewInner.trans[0]; var invertY = viewInner.invertY; if (invertY) { dataRect = boundingRectCopy(tmpRectURT, dataRect); dataRect.y = -dataRect.y - dataRect.height; } boundingRectCalculateTransform(tmpMtURT, dataRect, viewRect); decomposeTransform(rawTrans, tmpMtURT); if (invertY) rawTrans.scaleY = -rawTrans.scaleY; var mtRaw = transformableGetLocalTransform(rawTrans, viewInner.mtRaw); invert(viewInner.mtRawInv, mtRaw); } var tmpMtURT = create$1(); var tmpRectURT = boundingRectCreate(); /** * NOTICE: It depends on `viewCoordSysUpdateRawTrans`. */ function viewCoordSysUpdateRoamTrans(viewInner) { var viewRectCenter = viewCoordSysGetViewRectCenter(viewInner); var roamViewCenter = parseCenterOption(tmpCenterURT, viewInner, viewInner.centerOption) ? applyTransform$1(tmpCenterURT, tmpCenterURT, viewInner.mtRaw) : viewRectCenter; var zoom = viewInner.zoom; var roamTrans = viewInner.trans[1]; roamTrans.x = viewRectCenter[0] - zoom * roamViewCenter[0]; roamTrans.y = viewRectCenter[1] - zoom * roamViewCenter[1]; roamTrans.scaleX = roamTrans.scaleY = zoom; } var tmpCenterURT = []; /** * NOTICE: It depends on `viewCoordSysUpdateRoamTrans` and `viewCoordSysUpdateRawTrans` */ function viewCoordSysUpdateOverallTrans(viewInner) { var trans = viewInner.trans; var roamTrans = trans[1]; var rawTrans = trans[0]; var overallTrans = trans[2]; calcOverallTrans(overallTrans, rawTrans, roamTrans); var mtOverall = transformableGetLocalTransform(overallTrans, viewInner.mtOverall); var mtOverallInv = invert(viewInner.mtOverallInv, mtOverall); legacyCopyOverallTrans(viewInner, overallTrans, mtOverall, mtOverallInv); legacyCopyOverallTrans(viewInner.lgGeo, overallTrans, mtOverall, mtOverallInv); } /** * [VIEW_COORD_SYS_TRANS_OVERALL_BACKWARD_COMPATIBILITY] * VIEW_COORD_SYS_TRANS_OVERALL transformable has long been View or Geo instance itself. * We keep backward compatibility, since some users may have visited it directly (e.g. * for drawing a computed bounding rect). */ function legacyCopyOverallTrans(target, overallTrans, mtOverall, mtOverallInv) { if (target) { copyTransform(target, overallTrans); copy(target.transform || (target.transform = []), mtOverall); copy(target.invTransform || (target.invTransform = []), mtOverallInv); } } function calcOverallTrans(out, rawTrans, roamTrans) { transformableGetLocalTransform(rawTrans, tmpMtCOT1); transformableGetLocalTransform(roamTrans, tmpMtCOT2); mul(tmpMtCOT2, tmpMtCOT2, tmpMtCOT1); decomposeTransform(out, tmpMtCOT2); } var tmpMtCOT1 = create$1(); var tmpMtCOT2 = create$1(); function getCoordSys$5(finder) { var seriesModel = finder.seriesModel; return seriesModel ? seriesModel.coordinateSystem : null; } function viewCoordSysGetViewRectCenter(viewInner) { var viewRect = viewInner.viewRect; tmpViewRectCenter[0] = viewRect.x + viewRect.width / 2; tmpViewRectCenter[1] = viewRect.y + viewRect.height / 2; return tmpViewRectCenter; } var tmpViewRectCenter = []; function isViewCoordSys(coordSys) { return coordSys && coordSys.type === "view"; } /** * NOTICE: * - `syncBackEl` should be in the pixel space without any other transformation * in its accesters, otherwise the roaming may incorrect. * - `syncBackEl` can be a `Group`, having its own descendants and transformation. * But in this case, `dataToPoint` can only reach the space of `syncBackEl` itself. */ function applyViewCoordSysTransToElement(syncBackEl, syncBackType, viewCoordSys, animatableModel) { var viewInner = inner$15(viewCoordSys); viewInner.syncBackEl = syncBackEl; viewInner.syncBackType = syncBackType; if (!animatableModel) { viewCoordSysCopyTrans(syncBackEl, viewCoordSys, syncBackType); syncBackEl.dirty(); } else updateProps$1(syncBackEl, viewCoordSysCopyTrans(null, viewCoordSys, syncBackType), animatableModel); } /** * FIXME: [FIXME_VIEW_COORD_SYS_SYNC_BACK] * Currently the "sync back" is only performed on roam action. But these cases are not * covered: * 1. Consider both center change and series data adding is requested via `setOption` * and animation is not finished, the new added series symbols should lay out based * on the "intermediate state" rather than the "final state" of the VIEW_COORD_SYS, * otherwise, visual artifacts can arise. * 2. See the case of FIXME_SYMBOL_CLIP_CONSIDERING_COORD_SYS_ALIGNMENT_DURING_ANIMATION . */ function viewCoordSysSyncBack(viewCoordSys, hostModel, otherModelsToSync, payload) { var viewInner = inner$15(viewCoordSys); var syncBackEl = viewInner.syncBackEl; if (syncBackEl) { assert(viewInner.syncBackType != null); syncBackEl.stopAnimation(); calcOverallTransFromSyncBackEl(tmpTransSB1, viewInner, syncBackEl, viewInner.syncBackType); } else copyTransform(tmpTransSB1, viewInner.trans[2]); calcRoamTransFromOverallTrans(tmpTransSB2, viewInner, tmpTransSB1); payload ? applyRoamPayloadToOverallTrans(tmpTransSB1, tmpTransSB2, viewInner, payload) : copyTransform(tmpTransSB1, tmpTransSB2); calcRoamTransFromOverallTrans(tmpTransSB1, viewInner, tmpTransSB1); syncBackToRoamOptionFromRoamTrans(viewInner, hostModel, otherModelsToSync, tmpTransSB1); } var tmpTransSB1 = transformableCreate(); var tmpTransSB2 = transformableCreate(); /** * Invert to `center` and `zoom` of VIEW_COORD_SYS and host models based on * - `syncBackEl` or VIEW_COORD_SYS_TRANS_OVERALL * - Delta in `payload`. * * Should be only called in action handlers. * * @see RoamHostView['__updateOnOwnRoam'] */ function ownRoamModelCoordSysUpdateInAction(payload, hostModel, otherModelsToSync) { var viewCoordSys = getOwnRoamViewCoordSys(hostModel); if (viewCoordSys) { viewCoordSysSyncBack(viewCoordSys, hostModel, otherModelsToSync, payload); viewCoordSysSetRoamOptionFromModel(viewCoordSys, hostModel); } } function getOwnRoamViewCoordSys(hostModel) { return hostModel.__ownRoamView ? hostModel.__ownRoamView() : null; } function ownRoamViewUpdateDirectlyInAction(payload, componentOrSeries, ecModel, api) { ecModel.setUpdatePayload(payloadDisableAnimation(payload)); var componentOrSeriesView = getViewOfComponentOrSeries(api, componentOrSeries); if (componentOrSeriesView && componentOrSeriesView.__updateOnOwnRoam) componentOrSeriesView.__updateOnOwnRoam(payload, componentOrSeries, api); } function applyRoamPayloadToOverallTrans(targetOverallTrans, roamTrans, viewInner, payload) { if (payload.dx != null && payload.dy != null) { targetOverallTrans.x += payload.dx; targetOverallTrans.y += payload.dy; } var deltaZoom = payload.zoom; if (deltaZoom != null) { var oldZoom = getZoomFromRoamTrans(roamTrans); var deltaZoom2 = clampByZoomLimit(oldZoom * deltaZoom, viewInner.zoomLimit) / oldZoom; targetOverallTrans.x -= (payload.originX - targetOverallTrans.x) * (deltaZoom2 - 1); targetOverallTrans.y -= (payload.originY - targetOverallTrans.y) * (deltaZoom2 - 1); targetOverallTrans.scaleX *= deltaZoom2; targetOverallTrans.scaleY *= deltaZoom2; } } function getZoomFromRoamTrans(trans) { assert(mathAbs$4(trans.scaleX - trans.scaleY) < 1e-5); return trans.scaleX; } function parseCenterOption(out, viewInner, centerOption) { assert(viewCoordSysIsInputReady(viewInner)); var dataRect = viewInner.dataRect; if (!centerOption) return false; var lgCt = viewInner.lgCt; if (lgCt) set$1(out, parsePercent(centerOption[0], lgCt.w), parsePercent(centerOption[1], lgCt.h)); else if (dataRect) set$1(out, parsePercent(centerOption[0], dataRect.width, dataRect.x), parsePercent(centerOption[1], dataRect.height, dataRect.y)); return true; } /** * An inverse operation to `parseCenterOption`. * Mainly for percentage center option. */ function invertBackToCenterOption(viewInner, center) { var lastCenterOption = viewInner.centerOption; var dataRect = viewInner.dataRect; assert(center && dataRect); return !lastCenterOption || viewInner.lgCt ? center.slice() : [invertToPercentPerCenterDim(0, center, lastCenterOption, dataRect), invertToPercentPerCenterDim(1, center, lastCenterOption, dataRect)]; } function invertToPercentPerCenterDim(dimIdx, center, lastCenterOption, dataRect) { return lastCenterOption && dataRect && dataRect[WH$2[dimIdx]] && isPositionSizeOptionPercent(lastCenterOption[dimIdx]) ? (center[dimIdx] - dataRect[XY$2[dimIdx]]) / dataRect[WH$2[dimIdx]] * 100 + "%" : center[dimIdx]; } function useLegacyViewCoordSysCenterBase(ecModel, api) { return api && ecModel && ecModel.getShallow("legacyViewCoordSysCenterBase") ? { w: api.getWidth(), h: api.getHeight() } : null; } /** * @see VIEW_COORD_SYS_ANIMATION_INTERRUPTION */ function syncBackToRoamOptionFromRoamTrans(viewInner, hostModel, otherModelsToSync, roamTrans) { var viewRectCenter = viewCoordSysGetViewRectCenter(viewInner); var zoom = getZoomFromRoamTrans(roamTrans); var notZoomNearZero = mathAbs$4(zoom) > 1e-6; tmpCenterITR[0] = notZoomNearZero ? (viewRectCenter[0] - roamTrans.x) / zoom : viewRectCenter[0]; tmpCenterITR[1] = notZoomNearZero ? (viewRectCenter[1] - roamTrans.y) / zoom : viewRectCenter[1]; applyTransform$1(tmpCenterITR, tmpCenterITR, viewInner.mtRawInv); var centerOption = invertBackToCenterOption(viewInner, tmpCenterITR); syncBackRoamOptionToRoamHostModel(hostModel, centerOption, zoom); each$12(otherModelsToSync, function(otherModel) { if (otherModel !== hostModel) syncBackRoamOptionToRoamHostModel(otherModel, centerOption.slice(), zoom); }); } var tmpCenterITR = []; /** * Models should be updated, otherwise consequent `setOption()` can cause outdated `center` * and `zoom` to be used. */ function syncBackRoamOptionToRoamHostModel(hostModel, center, zoom) { var option = hostModel.option; option.center = center; option.zoom = zoom; } function clampByZoomLimit(zoom, zoomLimit) { if (zoomLimit) { var zoomMin = zoomLimit.min || 0; var zoomMax = zoomLimit.max || Infinity; zoom = Math.max(Math.min(zoomMax, zoom), zoomMin); } return zoom; } function calcCompensationScaleToPreserveNodeSize(viewCoordSys, model) { var nodeScaleRatio = model.getShallow("nodeScaleRatio", true) || 1; var viewInner = inner$15(viewCoordSys); return ((viewInner.zoom - 1) * nodeScaleRatio + 1) / (viewInner.trans[2].scaleX || 1); } //#endregion //#region node_modules/echarts/lib/component/helper/roamHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * An abstraction for some similar impl in roaming. * * Require action like `registerRoamActionSimply`. */ function updateRoamControllerSimply(componentOrSeries, api, controller, isInSelf, clipRect, extraOnRoam, roamTypeDefault, geoBackwardCompat) { if (!getOwnRoamViewCoordSys(componentOrSeries)) { controller.disable(); return; } controller.enable(retrieve2(componentOrSeries.get("roam"), roamTypeDefault), { api, zInfo: { component: componentOrSeries }, triggerInfo: { roamTrigger: componentOrSeries.get("roamTrigger"), isInSelf, isInClip: function(e, x, y) { return !clipRect || clipRect.contain(x, y); } } }); function dispatchAction(extra) { var mainType = componentOrSeries.mainType; var payload = payloadDisableAnimation(defaults({ type: makeViewCoordSysActionType(mainType, componentOrSeries.subType, ROAM_ACTION_TYPE_SUFFIX) }, extra)); if (geoBackwardCompat) payload.componentType = mainType; payload[mainType + "Id"] = componentOrSeries.id; api.dispatchAction(payload); } controller.off("pan").off("zoom").on("pan", function(event) { extraOnRoam && extraOnRoam("pan"); dispatchAction({ dx: event.dx, dy: event.dy }); }).on("zoom", function(event) { extraOnRoam && extraOnRoam("zoom"); dispatchAction({ zoom: event.scale, originX: event.originX, originY: event.originY }); }); } function createIsInSelfByPointerCheckerEl(pointerCheckerEl) { return function(e, x, y) { tmpRectCII.copy(pointerCheckerEl.getBoundingRect()); tmpRectCII.applyTransform(pointerCheckerEl.getComputedTransform()); return tmpRectCII.contain(x, y); }; } var tmpRectCII = new BoundingRect(0, 0, 0, 0); function registerRoamActionSimply(registers, mainType, subType) { var actionType = makeViewCoordSysActionType(mainType, subType, ROAM_ACTION_TYPE_SUFFIX); registers.registerAction({ type: actionType, event: actionType, update: "none" }, function(payload, ecModel, api) { ecModel.eachComponent(makeQueryConditionKindA(payload, mainType, subType), function(componentOrSeries) { ownRoamModelCoordSysUpdateInAction(payload, componentOrSeries); ownRoamViewUpdateDirectlyInAction(payload, componentOrSeries, ecModel, api); }); }); } function makeViewCoordSysActionType(mainType, subType, suffix) { return (mainType !== "series" ? mainType : subType === "map" ? "geo" : subType) + suffix; } function isRoamPayloadHasZoom(payload) { return payload.zoom != null; } function createViewCoordSysSimply(componentOrSeries, api, x, y, width, height, viewRect) { var viewCoordSys = new View(null, useLegacyViewCoordSysCenterBase(componentOrSeries.ecModel, api)); viewCoordSysSetBoundingRect(viewCoordSys, x, y, width, height); viewRect ? viewCoordSysSetViewRect(viewCoordSys, viewRect.x, viewRect.y, viewRect.width, viewRect.height) : viewCoordSysSetViewRect(viewCoordSys, x, y, width, height); viewCoordSysSetRoamOptionFromModel(viewCoordSys, componentOrSeries); return viewCoordSys; } //#endregion //#region node_modules/echarts/lib/component/helper/MapDraw.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Only these tags enable use `itemStyle` if they are named in SVG. * Other tags like might not suitable for `itemStyle`. * They will not be considered to be styled until some requirements come. */ var OPTION_STYLE_ENABLED_TAGS = [ "rect", "circle", "line", "ellipse", "polygon", "polyline", "path" ]; var OPTION_STYLE_ENABLED_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS); var STATE_TRIGGER_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(["g"])); var LABEL_HOST_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(["g"])); var mapLabelRaw = makeInner(); function getFixedItemStyle(model) { var itemStyle = model.getItemStyle(); var areaColor = model.get("areaColor"); if (areaColor != null) itemStyle.fill = areaColor; return itemStyle; } function fixLineStyle(styleHost) { var style = styleHost.style; if (style) { style.stroke = style.stroke || style.fill; style.fill = null; } } var MapDraw = function() { function MapDraw(api) { var group = this.group = new Group$3(); var transformGroup = this._transformGroup = new Group$3(); group.add(transformGroup); this.uid = getUID("ec_map_draw"); this._controller = new RoamController(api.getZr()); transformGroup.add(this._regionsGroup = new Group$3()); transformGroup.add(this._svgGroup = new Group$3()); } MapDraw.prototype.draw = function(mapOrGeoModel, ecModel, api, fromView, payload) { var mapDraw = this; var data = mapOrGeoModel.getData && mapOrGeoModel.getData(); if (isGeoModel(mapOrGeoModel)) ecModel.eachComponent({ mainType: "series", subType: "map" }, function(mapSeries) { if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) data = mapSeries.getData(); }); var geo = mapOrGeoModel.coordinateSystem; var viewCoordSys = geo.view; var regionsGroup = this._regionsGroup; var transformGroup = this._transformGroup; var isFirstDraw = !regionsGroup.childAt(0) || payload; var clipRect; if (geo.shouldClip()) { clipRect = viewCoordSysCopyViewRect(null, viewCoordSys); this.group.setClipPath(new Rect$2({ shape: clipRect.clone() })); } else this.group.removeClipPath(); applyViewCoordSysTransToElement(transformGroup, 1, viewCoordSys, isFirstDraw ? null : mapOrGeoModel); var isVisualEncodedByVisualMap = data && data.getVisual("visualMeta") && data.getVisual("visualMeta").length > 0; if (geo.resourceType === "geoJSON") this._buildGeoJSON(viewCoordSys, api, geo, mapOrGeoModel, data, isVisualEncodedByVisualMap); else if (geo.resourceType === "geoSVG") this._buildSVG(viewCoordSys, api, geo, mapOrGeoModel, data, isVisualEncodedByVisualMap); updateRoamControllerSimply(mapOrGeoModel, api, this._controller, function(e, x, y) { return mapOrGeoModel.coordinateSystem.containPoint([x, y]); }, clipRect, function() { mapDraw._mouseDownFlag = false; }, false, true); this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView); }; MapDraw.prototype.__updateOnOwnRoam = function(mapOrGeoModel) { applyViewCoordSysTransToElement(this._transformGroup, 1, mapOrGeoModel.coordinateSystem.view, null); }; MapDraw.prototype._buildGeoJSON = function(viewCoordSys, api, geo, mapOrGeoModel, data, isVisualEncodedByVisualMap) { var regionsGroupByName = this._regionsGroupByName = createHashMap(); var regionsInfoByName = createHashMap(); var regionsGroup = this._regionsGroup; var projection = geo.projection; var projectionStream = projection && projection.stream; var transMt = transformableGetLocalTransform(viewCoordSysCopyTrans(null, viewCoordSys, 0)); function transformPoint(point, project) { if (project) point = project(point); return point && applyTransform$1([], point, transMt); } function transformPolygonPoints(inPoints) { var outPoints = []; var project = !projectionStream && projection && projection.project; for (var i = 0; i < inPoints.length; ++i) { var newPt = transformPoint(inPoints[i], project); newPt && outPoints.push(newPt); } return outPoints; } function getPolyShape(points) { return { shape: { points: transformPolygonPoints(points) } }; } regionsGroup.removeAll(); each$12(geo.regions, function(region) { var regionName = region.name; var regionGroup = regionsGroupByName.get(regionName); var _a = regionsInfoByName.get(regionName) || {}, dataIdx = _a.dataIdx, regionModel = _a.regionModel; if (!regionGroup) { regionGroup = regionsGroupByName.set(regionName, new Group$3()); regionsGroup.add(regionGroup); dataIdx = data ? data.indexOfName(regionName) : null; regionModel = isGeoModel(mapOrGeoModel) ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null; var silent = regionModel.get("silent", true); silent != null && (regionGroup.silent = silent); regionsInfoByName.set(regionName, { dataIdx, regionModel }); } var polygonSubpaths = []; var polylineSubpaths = []; each$12(region.geometries, function(geometry) { if (geometry.type === "polygon") { var polys = [geometry.exterior].concat(geometry.interiors || []); if (projectionStream) polys = projectPolys(polys, projectionStream); each$12(polys, function(poly) { polygonSubpaths.push(new Polygon(getPolyShape(poly))); }); } else { var points = geometry.points; if (projectionStream) points = projectPolys(points, projectionStream, true); each$12(points, function(points) { polylineSubpaths.push(new Polyline$1(getPolyShape(points))); }); } }); var centerPt = transformPoint(region.getCenter(), projection && projection.project); function createCompoundPath(subpaths, isLine) { if (!subpaths.length) return; var compoundPath = new CompoundPath({ culling: true, segmentIgnoreThreshold: 1, shape: { paths: subpaths } }); regionGroup.add(compoundPath); applyOptionStyleForRegion(api, data, isVisualEncodedByVisualMap, compoundPath, dataIdx, regionModel); resetLabelForRegion(mapOrGeoModel, data, compoundPath, regionName, regionModel, dataIdx, centerPt); if (isLine) { fixLineStyle(compoundPath); each$12(compoundPath.states, fixLineStyle); } } createCompoundPath(polygonSubpaths); createCompoundPath(polylineSubpaths, true); }); regionsGroupByName.each(function(regionGroup, regionName) { var _a = regionsInfoByName.get(regionName), dataIdx = _a.dataIdx, regionModel = _a.regionModel; resetEventTriggerForRegion(mapOrGeoModel, data, regionGroup, regionName, regionModel, dataIdx); resetTooltipForRegion(mapOrGeoModel, data, regionGroup, regionName, regionModel); resetStateTriggerForRegion(mapOrGeoModel, regionGroup, regionName, regionModel); }, this); }; MapDraw.prototype._buildSVG = function(viewCoordSys, api, geo, mapOrGeoModel, data, isVisualEncodedByVisualMap) { var mapName = geo.map; viewCoordSysCopyTrans(this._svgGroup, viewCoordSys, 0); if (this._svgResourceChanged(mapName)) { this._freeSVG(); this._useSVG(mapName); } var svgDispatcherMap = this._svgDispatcherMap = createHashMap(); var focusSelf = false; each$12(this._svgGraphicRecord.named, function(namedItem) { var regionName = namedItem.name; var svgNodeTagLower = namedItem.svgNodeTagLower; var el = namedItem.el; var dataIdx = data ? data.indexOfName(regionName) : null; var regionModel = mapOrGeoModel.getRegionModel(regionName); if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) applyOptionStyleForRegion(api, data, isVisualEncodedByVisualMap, el, dataIdx, regionModel); if (el instanceof Displayable) el.culling = true; var silent = regionModel.get("silent", true); silent != null && (el.silent = silent); el.z2EmphasisLift = 0; if (!namedItem.namedFrom) { if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) resetLabelForRegion(mapOrGeoModel, data, el, regionName, regionModel, dataIdx, null); resetEventTriggerForRegion(mapOrGeoModel, data, el, regionName, regionModel, dataIdx); resetTooltipForRegion(mapOrGeoModel, data, el, regionName, regionModel); if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) { if (resetStateTriggerForRegion(mapOrGeoModel, el, regionName, regionModel) === "self") focusSelf = true; (svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, [])).push(el); } } }, this); this._enableBlurEntireSVG(focusSelf, mapOrGeoModel); }; MapDraw.prototype._enableBlurEntireSVG = function(focusSelf, mapOrGeoModel) { if (focusSelf && isGeoModel(mapOrGeoModel)) { var opacity_1 = mapOrGeoModel.getModel(["blur", "itemStyle"]).getItemStyle().opacity; this._svgGraphicRecord.root.traverse(function(el) { if (!el.isGroup) { setDefaultStateProxy(el); var style = el.ensureState("blur").style || {}; if (style.opacity == null && opacity_1 != null) style.opacity = opacity_1; el.ensureState("emphasis"); } }); } }; MapDraw.prototype.remove = function() { this._regionsGroup.removeAll(); this._regionsGroupByName = null; this._svgGroup.removeAll(); this._freeSVG(); this._controller.disable(); }; MapDraw.prototype.findHighDownDispatchers = function(name, geoModel) { if (name == null) return []; var geo = geoModel.coordinateSystem; if (geo.resourceType === "geoJSON") { var regionsGroupByName = this._regionsGroupByName; if (regionsGroupByName) { var regionGroup = regionsGroupByName.get(name); return regionGroup ? [regionGroup] : []; } } else if (geo.resourceType === "geoSVG") return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || []; }; MapDraw.prototype._svgResourceChanged = function(mapName) { return this._svgMapName !== mapName; }; MapDraw.prototype._useSVG = function(mapName) { var resource = geoSourceManager_default.getGeoResource(mapName); if (resource && resource.type === "geoSVG") { var svgGraphic = resource.useGraphic(this.uid); this._svgGroup.add(svgGraphic.root); this._svgGraphicRecord = svgGraphic; this._svgMapName = mapName; } }; MapDraw.prototype._freeSVG = function() { var mapName = this._svgMapName; if (mapName == null) return; var resource = geoSourceManager_default.getGeoResource(mapName); if (resource && resource.type === "geoSVG") resource.freeGraphic(this.uid); this._svgGraphicRecord = null; this._svgDispatcherMap = null; this._svgGroup.removeAll(); this._svgMapName = null; }; /** * FIXME: this is a temporarily workaround. * When `geoRoam` the elements need to be reset in `MapView['render']`, because the props like * `ignore` might have been modified by `LabelManager`, and `LabelManager#addLabelsOfSeries` * will subsequently cache `defaultAttr` like `ignore`. If do not do this reset, the modified * props will have no chance to be restored. * Note: This reset should be after `clearStates` in `renderSeries` because `useStates` in * `renderSeries` will cache the modified `ignore` to `el._normalState`. * TODO: * Use clone/immutable in `LabelManager`? */ MapDraw.prototype.resetForLabelLayout = function() { this.group.traverse(function(el) { var label = el.getTextContent(); if (label) label.ignore = mapLabelRaw(label).ignore; }); }; MapDraw.prototype._updateMapSelectHandler = function(mapOrGeoModel, regionsGroup, api, fromView) { var mapDraw = this; regionsGroup.off("mousedown"); regionsGroup.off("click"); if (mapOrGeoModel.get("selectedMode")) { regionsGroup.on("mousedown", function() { mapDraw._mouseDownFlag = true; }); regionsGroup.on("click", function(e) { if (!mapDraw._mouseDownFlag) return; mapDraw._mouseDownFlag = false; }); } }; return MapDraw; }(); function applyOptionStyleForRegion(api, data, isVisualEncodedByVisualMap, el, dataIndex, regionModel) { var normalStyleModel = regionModel.getModel("itemStyle"); var emphasisStyleModel = regionModel.getModel(["emphasis", "itemStyle"]); var blurStyleModel = regionModel.getModel(["blur", "itemStyle"]); var selectStyleModel = regionModel.getModel(["select", "itemStyle"]); var normalStyle = getFixedItemStyle(normalStyleModel); var emphasisStyle = getFixedItemStyle(emphasisStyleModel); var selectStyle = getFixedItemStyle(selectStyleModel); var blurStyle = getFixedItemStyle(blurStyleModel); if (data) { var style = data.getItemVisual(dataIndex, "style"); var decal = data.getItemVisual(dataIndex, "decal"); if (isVisualEncodedByVisualMap && style.fill) normalStyle.fill = style.fill; if (decal) normalStyle.decal = createOrUpdatePatternFromDecal(decal, api); } el.setStyle(normalStyle); el.style.strokeNoScale = true; el.ensureState("emphasis").style = emphasisStyle; el.ensureState("select").style = selectStyle; el.ensureState("blur").style = blurStyle; setDefaultStateProxy(el); } function resetLabelForRegion(mapOrGeoModel, data, el, regionName, regionModel, dataIdx, labelXY) { var isDataNaN = data && isNaN(data.get(data.mapDimension("value"), dataIdx)); var itemLayout = data && data.getItemLayout(dataIdx); if (isGeoModel(mapOrGeoModel) || isDataNaN || itemLayout && itemLayout.showLabel) { var query = !isGeoModel(mapOrGeoModel) ? dataIdx : regionName; var labelFetcher = void 0; if (!data || dataIdx >= 0) labelFetcher = mapOrGeoModel; var specifiedTextOpt = labelXY ? { normal: { align: "center", verticalAlign: "middle" } } : null; setLabelStyle(el, getLabelStatesModels(regionModel), { labelFetcher, labelDataIndex: query, defaultText: regionName }, specifiedTextOpt); var textEl = el.getTextContent(); if (textEl) { mapLabelRaw(textEl).ignore = textEl.ignore; if (el.textConfig && labelXY) { var rect = el.getBoundingRect().clone(); el.textConfig.layoutRect = rect; el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + "%", (labelXY[1] - rect.y) / rect.height * 100 + "%"]; } } el.disableLabelAnimation = true; } else { el.removeTextContent(); el.removeTextConfig(); el.disableLabelAnimation = null; } } function resetEventTriggerForRegion(mapOrGeoModel, data, eventTrigger, regionName, regionModel, dataIdx) { if (data) data.setItemGraphicEl(dataIdx, eventTrigger); else getECData(eventTrigger).eventData = { componentType: "geo", componentIndex: mapOrGeoModel.componentIndex, geoIndex: mapOrGeoModel.componentIndex, name: regionName, region: regionModel && regionModel.option || {} }; } function resetTooltipForRegion(mapOrGeoModel, data, el, regionName, regionModel) { if (!data) setTooltipConfig({ el, componentModel: mapOrGeoModel, itemName: regionName, itemTooltipOption: regionModel.get("tooltip") }); } function resetStateTriggerForRegion(mapOrGeoModel, el, regionName, regionModel) { el.highDownSilentOnTouch = !!mapOrGeoModel.get("selectedMode"); var emphasisModel = regionModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); toggleHoverEmphasis(el, focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); if (isGeoModel(mapOrGeoModel)) enableComponentHighDownFeatures(el, mapOrGeoModel, regionName); return focus; } function projectPolys(rings, createStream, isLine) { var polygons = []; var curPoly; function startPolygon() { curPoly = []; } function endPolygon() { if (curPoly.length) { polygons.push(curPoly); curPoly = []; } } var stream = createStream({ polygonStart: startPolygon, polygonEnd: endPolygon, lineStart: startPolygon, lineEnd: endPolygon, point: function(x, y) { if (isFinite(x) && isFinite(y)) curPoly.push([x, y]); }, sphere: function() {} }); !isLine && stream.polygonStart(); each$12(rings, function(ring) { stream.lineStart(); for (var i = 0; i < ring.length; i++) stream.point(ring[i][0], ring[i][1]); stream.lineEnd(); }); !isLine && stream.polygonEnd(); return polygons; } function isGeoModel(mapOrGeoModel) { return mapOrGeoModel.mainType === "geo"; } var MapSeries = function(_super) { __extends(MapSeries, _super); function MapSeries() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MapSeries.type; _this.getTooltipPosition = function(dataIndex) { if (dataIndex != null) { var name_1 = this.getData().getName(dataIndex); var geo = this.coordinateSystem; var region = geo.getRegion(name_1); return region && geo.dataToPoint(region.getCenter()); } }; return _this; } MapSeries.prototype.getInitialData = function(option) { var data = createSeriesDataSimply(this, { coordDimensions: ["value"], encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this) }); var dataNameIndexMap = createHashMap(); var toAppendItems = []; for (var i = 0, len = data.count(); i < len; i++) { var name_2 = data.getName(i); dataNameIndexMap.set(name_2, i); } each$12(geoSourceManager_default.load(this.getMapType(), this.option.nameMap, this.option.nameProperty).regions, function(region) { var name = region.name; var dataNameIdx = dataNameIndexMap.get(name); var specifiedGeoJSONRegionStyle = region.properties && region.properties.echartsStyle; var dataItem; if (dataNameIdx == null) { dataItem = { name }; toAppendItems.push(dataItem); } else dataItem = data.getRawDataItem(dataNameIdx); specifiedGeoJSONRegionStyle && merge(dataItem, specifiedGeoJSONRegionStyle); }); data.appendData(toAppendItems); return data; }; /** * If no host geo model, return null, which means using a * inner exclusive geo model. */ MapSeries.prototype.getHostGeoModel = function() { if (decideCoordSysUsageKind(this).kind === 2) return; return this.getReferringComponents("geo", { useDefault: false, enableAll: false, enableNone: false }).models[0]; }; MapSeries.prototype.getMapType = function() { return (this.getHostGeoModel() || this).option.map; }; MapSeries.prototype.getRawValue = function(dataIndex) { var data = this.getData(); return data.get(data.mapDimension("value"), dataIndex); }; /** * Get model of region */ MapSeries.prototype.getRegionModel = function(regionName) { var data = this.getData(); return data.getItemModel(data.indexOfName(regionName)); }; /** * Map tooltip formatter */ MapSeries.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); var value = this.getRawValue(dataIndex); var name = data.getName(dataIndex); var seriesNames = []; each$12(this.seriesGroup.f, function(mapSeries) { var otherIndex = mapSeries.originalData.indexOfName(name); var valueDim = data.mapDimension("value"); if (!isNaN(mapSeries.originalData.get(valueDim, otherIndex))) seriesNames.push(mapSeries.name); }); return createTooltipMarkup("section", { header: seriesNames.join(", "), noHeader: !seriesNames.length, blocks: [createTooltipMarkup("nameValue", { name, value })] }); }; MapSeries.prototype.getLegendIcon = function(opt) { var iconType = opt.icon || "roundRect"; var icon = createSymbol$1(iconType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill); icon.setStyle(opt.itemStyle); icon.style.stroke = "none"; if (iconType.indexOf("empty") > -1) { icon.style.stroke = icon.style.fill; icon.style.fill = tokens.color.neutral00; icon.style.lineWidth = 2; } return icon; }; MapSeries.prototype.__ownRoamView = function() { return mapSeriesNeedsDrawMap(this) ? this.coordinateSystem.view : null; }; MapSeries.type = "series.map"; MapSeries.dependencies = ["geo"]; MapSeries.layoutMode = "box"; MapSeries.defaultOption = { z: 2, coordinateSystem: "geo", map: "", left: "center", top: "center", aspectScale: null, showLegendSymbol: true, boundingCoords: null, center: null, zoom: 1, scaleLimit: null, selectedMode: true, label: { show: false, color: tokens.color.tertiary }, itemStyle: { borderWidth: .5, borderColor: tokens.color.border, areaColor: tokens.color.background }, emphasis: { label: { show: true, color: tokens.color.primary }, itemStyle: { areaColor: tokens.color.highlight } }, select: { label: { show: true, color: tokens.color.primary }, itemStyle: { color: tokens.color.highlight } }, nameProperty: "name" }; return MapSeries; }(SeriesModel); /** * Has exclusive geo, rahter than depends on a separate geo componet. */ function mapSeriesGroupHasOwnGeo(groupKey) { return groupKey.indexOf("i") === 0; } function mapSeriesNeedsDrawMap(mapSeries) { return getMainMapSeries(mapSeries.seriesGroup) === mapSeries && !mapSeries.getHostGeoModel(); } function getMainMapSeries(mapSeriesGroup) { return mapSeriesGroup.f[0]; } /** * @tutorial [MAP_SERIES_GROUP] * - For map series that reference external geo components (typically via `geoIndex` or `geoId` in ec option), * a map series group is all map series that reference to the same geo component. * - For other map series, * a map series group is all map series that use the same `map` in ec option. * NOTICE: series filtering (typically by legend) matters: * If this method is executed before series filtering, all series are included, * otherwise, series filtered out are excluded. * When legend disables the original first series, the original second series takes the responsibility * to render map (via its `MapDraw`). */ function buildAllMapSeriesGroups(ecModel, beforeSeriesFiltering) { var allMapSeriesGroups = {}; ecModel.eachRawSeriesByType("map", function(seriesModel) { var hostGeoModel = seriesModel.getHostGeoModel(); var key = hostGeoModel ? "o" + hostGeoModel.id : "i" + seriesModel.getMapType(); var group = allMapSeriesGroups[key] = allMapSeriesGroups[key] || { f: [], r: [] }; if (!ecModel.isSeriesFiltered(seriesModel) && !beforeSeriesFiltering) group.f.push(seriesModel); group.r.push(seriesModel); }); return allMapSeriesGroups; } //#endregion //#region node_modules/echarts/lib/chart/map/MapView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var MapView = function(_super) { __extends(MapView, _super); function MapView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "map"; return _this; } MapView.prototype.render = function(mapModel, ecModel, api, payload) { if (payload && payload.type === "mapToggleSelect" && payload.from === this.uid) return; var group = this.group; group.removeAll(); if (mapModel.getHostGeoModel()) return; var mapDraw = this._mapDraw; if (mapDraw && payload && payload.type === "geoRoam") mapDraw.resetForLabelLayout(); if (!(payload && payload.type === "geoRoam" && payload.componentType === "series" && payload.seriesId === mapModel.id)) { if (mapSeriesNeedsDrawMap(mapModel)) { mapDraw = mapDraw || (this._mapDraw = new MapDraw(api)); group.add(mapDraw.group); mapDraw.draw(mapModel, ecModel, api, this, payload); } else this._clearMapDraw(); } else mapDraw && group.add(mapDraw.group); mapModel.get("showLegendSymbol") && ecModel.getComponent("legend") && this._renderSymbols(mapModel); }; /** * @implements RoamHostView['__updateOnOwnRoam'] */ MapView.prototype.__updateOnOwnRoam = function(payload, model, api) { var mapDraw = this._mapDraw; if (mapSeriesNeedsDrawMap(model) && mapDraw) mapDraw.__updateOnOwnRoam(model); }; MapView.prototype.remove = function() { this._clearMapDraw(); this.group.removeAll(); }; MapView.prototype.dispose = function() { this._clearMapDraw(); }; MapView.prototype._clearMapDraw = function() { this._mapDraw && this._mapDraw.remove(); this._mapDraw = null; }; MapView.prototype._renderSymbols = function(mapModel) { var originalData = mapModel.originalData; var group = this.group; originalData.each(originalData.mapDimension("value"), function(value, originalDataIndex) { if (isNaN(value)) return; var layout = originalData.getItemLayout(originalDataIndex); if (!layout || !layout.point) return; var point = layout.point; var offset = layout.offset; var circle = new Circle({ style: { fill: mapModel.getData().getVisual("style").fill }, shape: { cx: point[0] + offset * 9, cy: point[1], r: 3 }, silent: true, z2: 8 + (!offset ? 11 : 0) }); if (!offset) { var fullData = getMainMapSeries(mapModel.seriesGroup).getData(); var name_1 = originalData.getName(originalDataIndex); var fullIndex_1 = fullData.indexOfName(name_1); var itemModel = originalData.getItemModel(originalDataIndex); var labelModel = itemModel.getModel("label"); var regionGroup = fullData.getItemGraphicEl(fullIndex_1); setLabelStyle(circle, getLabelStatesModels(itemModel), { labelFetcher: { getFormattedLabel: function(idx, state) { return mapModel.getFormattedLabel(fullIndex_1, state); } }, defaultText: name_1 }); circle.disableLabelAnimation = true; if (!labelModel.get("position")) circle.setTextConfig({ position: "bottom" }); regionGroup.onHoverStateChange = function(toState) { setStatesFlag(circle, toState); }; } group.add(circle); }); }; MapView.type = "map"; return MapView; }(ChartView); //#endregion //#region node_modules/echarts/lib/coord/geo/Geo.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GEO_DEFAULT_PARAMS = { "geoJSON": { aspectScale: .75, invertLongitute: true }, "geoSVG": { aspectScale: 1, invertLongitute: false } }; var geo2DDimensions = ["lng", "lat"]; var Geo = function(_super) { __extends(Geo, _super); function Geo(name, map, opt) { var _this = _super.call(this) || this; _this.dimensions = geo2DDimensions; _this.type = "geo"; _this._nameCoordMap = createHashMap(); _this.name = name; var projection = opt.projection; var source = geoSourceManager_default.load(map, opt.nameMap, opt.nameProperty); var resource = geoSourceManager_default.getGeoResource(map); var resourceType = _this.resourceType = resource ? resource.type : null; var regions = _this.regions = source.regions; var defaultParams = GEO_DEFAULT_PARAMS[resource.type]; _this._clip = opt.clip; _this.view = new View(projection ? false : defaultParams.invertLongitute, useLegacyViewCoordSysCenterBase(opt.ecModel, opt.api), _this); _this.map = map; _this._regionsMap = source.regionsMap; _this.regions = source.regions; if (projection) { if (resourceType === "geoSVG") { warn("Map " + map + " with SVG source can't use projection. Only GeoJSON source supports projection."); projection = null; } if (!(projection.project && projection.unproject)) { warn("project and unproject must be both provided in the projeciton."); projection = null; } } _this.projection = projection; var boundingRect; if (projection) for (var i = 0; i < regions.length; i++) { var regionRect = regions[i].getBoundingRect(projection); boundingRect = boundingRect || regionRect.clone(); boundingRect.union(regionRect); } else boundingRect = source.boundingRect; viewCoordSysSetBoundingRect(_this.view, boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height); _this.aspectScale = projection ? 1 : retrieve2(opt.aspectScale, defaultParams.aspectScale); return _this; } Geo.prototype.getRegion = function(name) { return this._regionsMap.get(name); }; Geo.prototype.getRegionByCoord = function(coord) { var regions = this.regions; for (var i = 0; i < regions.length; i++) { var region = regions[i]; if (region.type === "geoJSON" && region.contain(coord)) return regions[i]; } }; /** * Add geoCoord for indexing by name */ Geo.prototype.addGeoCoord = function(name, geoCoord) { this._nameCoordMap.set(name, geoCoord); }; /** * Get geoCoord by name */ Geo.prototype.getGeoCoord = function(name) { var region = this._regionsMap.get(name); return this._nameCoordMap.get(name) || region && region.getCenter(); }; Geo.prototype.dataToPoint = function(data, noRoam, out) { if (isString(data)) data = this.getGeoCoord(data); if (data) { var projection = this.projection; if (projection) data = projection.project(data); return data && this.view.dataToPoint(data, noRoam, out); } }; Geo.prototype.pointToData = function(point, reserved, out) { var projection = this.projection; if (projection) point = projection.unproject(point); return point && this.view.pointToData(point, out); }; Geo.prototype.convertToPixel = function(ecModel, finder, value) { var coordSys = getCoordSys$4(finder); return coordSys === this ? coordSys.dataToPoint(value) : null; }; Geo.prototype.convertFromPixel = function(ecModel, finder, pixel) { var coordSys = getCoordSys$4(finder); return coordSys === this ? coordSys.pointToData(pixel) : null; }; Geo.prototype.containPoint = function(point) { return this.view.containPoint(point); }; Geo.prototype.getArea = function(tolerance) { tolerance = tolerance || 0; var rect = viewCoordSysCopyViewRect(null, this.view); rect.x -= tolerance; rect.y -= tolerance; rect.width += 2 * tolerance; rect.height += 2 * tolerance; return rect; }; Geo.prototype.shouldClip = function() { return this._clip; }; /** * @implements CoordinateSystem['getBoundingRect'] */ Geo.prototype.getBoundingRect = function() { return this.view.getBoundingRect(); }; /** * @implements CoordinateSystem['getViewRect'] */ Geo.prototype.getViewRect = function() { return this.view.getViewRect(); }; /** * @implements CoordinateSystem['getRoamTransform'] */ Geo.prototype.getRoamTransform = function() { return this.view.getRoamTransform(); }; return Geo; }(Transformable); function getCoordSys$4(finder) { var geoModel = finder.geoModel; var seriesModel = finder.seriesModel; return geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem || (seriesModel.getReferringComponents("geo", SINGLE_REFERRING).models[0] || {}).coordinateSystem : null; } //#endregion //#region node_modules/echarts/lib/coord/geo/geoCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Resize method bound to the geo */ function resizeGeo(geoModel, api) { var viewCoordSys = this.view; var boundingCoords = geoModel.get("boundingCoords"); if (boundingCoords != null) { var leftTop_1 = boundingCoords[0]; var rightBottom_1 = boundingCoords[1]; if (!(isFinite(leftTop_1[0]) && isFinite(leftTop_1[1]) && isFinite(rightBottom_1[0]) && isFinite(rightBottom_1[1]))) console.error("Invalid boundingCoords"); else { var projection_1 = this.projection; if (projection_1) { var xMin = leftTop_1[0]; var yMin = leftTop_1[1]; var xMax = rightBottom_1[0]; var yMax = rightBottom_1[1]; leftTop_1 = [Infinity, Infinity]; rightBottom_1 = [-Infinity, -Infinity]; var sampleLine = function(x0, y0, x1, y1) { var dx = x1 - x0; var dy = y1 - y0; for (var i = 0; i <= 100; i++) { var p = i / 100; var pt = projection_1.project([x0 + dx * p, y0 + dy * p]); min$1(leftTop_1, leftTop_1, pt); max$1(rightBottom_1, rightBottom_1, pt); } }; sampleLine(xMin, yMin, xMax, yMin); sampleLine(xMax, yMin, xMax, yMax); sampleLine(xMax, yMax, xMin, yMax); sampleLine(xMin, yMax, xMax, yMin); } viewCoordSysSetBoundingRect(viewCoordSys, leftTop_1[0], leftTop_1[1], rightBottom_1[0] - leftTop_1[0], rightBottom_1[1] - leftTop_1[1]); } } var rect = viewCoordSys.getBoundingRect(); var centerOption = geoModel.get("layoutCenter"); var sizeOption = geoModel.get("layoutSize"); var refContainer = createBoxLayoutReference(geoModel, api).refContainer; var aspect = rect.width / rect.height * this.aspectScale; var useCenterAndSize = false; var center; var size; if (centerOption && sizeOption) { center = [parsePercent(centerOption[0], refContainer.width) + refContainer.x, parsePercent(centerOption[1], refContainer.height) + refContainer.y]; size = parsePercent(sizeOption, Math.min(refContainer.width, refContainer.height)); if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) useCenterAndSize = true; else console.warn("Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead."); } var viewRect; if (useCenterAndSize) { viewRect = {}; if (aspect > 1) { viewRect.width = size; viewRect.height = size / aspect; } else { viewRect.height = size; viewRect.width = size * aspect; } viewRect.y = center[1] - viewRect.height / 2; viewRect.x = center[0] - viewRect.width / 2; } else { var boxLayoutOption = geoModel.getBoxLayoutParams(); boxLayoutOption.aspect = aspect; viewRect = getLayoutRect(boxLayoutOption, refContainer); viewRect = applyPreserveAspect(geoModel, viewRect, aspect); } viewCoordSysSetViewRect(viewCoordSys, viewRect.x, viewRect.y, viewRect.width, viewRect.height); viewCoordSysSetRoamOptionFromModel(viewCoordSys, geoModel); } function setGeoCoords(geo, model) { each$12(model.get("geoCoord"), function(geoCoord, name) { geo.addGeoCoord(name, geoCoord); }); } var geoCreator = new (function() { function GeoCreator() { this.dimensions = geo2DDimensions; } GeoCreator.prototype.create = function(ecModel, api) { var geoList = []; function getCommonGeoProperties(model) { return { nameProperty: model.get("nameProperty"), aspectScale: model.get("aspectScale"), projection: model.get("projection"), clip: model.getShallow("clip", true) }; } ecModel.eachComponent("geo", function(geoModel, idx) { var mapName = geoModel.get("map"); var geo = new Geo(mapName + idx, mapName, extend({ nameMap: geoModel.get("nameMap"), api, ecModel }, getCommonGeoProperties(geoModel))); geoList.push(geo); geoModel.coordinateSystem = geo; geo.model = geoModel; geo.resize = resizeGeo; geo.resize(geoModel, api); }); ecModel.eachSeries(function(seriesModel) { injectCoordSysByOption({ targetModel: seriesModel, coordSysType: "geo", coordSysProvider: function() { var geoModel = seriesModel.subType === "map" ? seriesModel.getHostGeoModel() : seriesModel.getReferringComponents("geo", SINGLE_REFERRING).models[0]; return geoModel && geoModel.coordinateSystem; }, allowNotFound: true }); }); each$12(buildAllMapSeriesGroups(ecModel, true), function(mapSeriesGroup, groupKey) { if (!mapSeriesGroupHasOwnGeo(groupKey)) return; var firstDeclaredMapSeries = mapSeriesGroup.r[0]; var nameMapList = []; each$12(mapSeriesGroup.r, function(mapSeries) { nameMapList.push(mapSeries.get("nameMap")); mapSeries.seriesGroup = null; }); var mapType = groupKey.slice(1); var geo = new Geo(mapType, mapType, extend({ nameMap: mergeAll(nameMapList), api, ecModel }, getCommonGeoProperties(firstDeclaredMapSeries))); var scaleLimit; each$12(mapSeriesGroup.r, function(mapSeries) { scaleLimit = retrieve2(scaleLimit, mapSeries.get("scaleLimit")); }); geoList.push(geo); geo.resize = resizeGeo; geo.resize(firstDeclaredMapSeries, api); each$12(mapSeriesGroup.r, function(mapSeries) { mapSeries.coordinateSystem = geo; setGeoCoords(geo, mapSeries); }); }); return geoList; }; /** * Fill given regions array */ GeoCreator.prototype.getFilledRegions = function(originRegionArr, mapName, nameMap, nameProperty) { var regionsArr = (originRegionArr || []).slice(); var dataNameMap = createHashMap(); for (var i = 0; i < regionsArr.length; i++) dataNameMap.set(regionsArr[i].name, regionsArr[i]); each$12(geoSourceManager_default.load(mapName, nameMap, nameProperty).regions, function(region) { var name = region.name; var regionOption = dataNameMap.get(name); var specifiedGeoJSONRegionStyle = region.properties && region.properties.echartsStyle; if (!regionOption) { regionOption = { name }; regionsArr.push(regionOption); } specifiedGeoJSONRegionStyle && merge(regionOption, specifiedGeoJSONRegionStyle); }); return regionsArr; }; return GeoCreator; }())(); //#endregion //#region node_modules/echarts/lib/coord/geo/GeoModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GeoModel = function(_super) { __extends(GeoModel, _super); function GeoModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GeoModel.type; return _this; } GeoModel.prototype.init = function(option, parentModel, ecModel) { this.mergeDefaultAndTheme(option, ecModel); var source = geoSourceManager_default.getGeoResource(option.map); if (source && source.type === "geoJSON") { var itemStyle = option.itemStyle = option.itemStyle || {}; if (!("color" in itemStyle)) itemStyle.color = option.defaultItemStyleColor || tokens.color.backgroundTint; } defaultEmphasis(option, "label", ["show"]); }; GeoModel.prototype.optionUpdated = function() { var _this = this; var option = this.option; option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap, option.nameProperty); var selectedMap = {}; this._optionModelMap = reduce(option.regions || [], function(optionModelMap, regionOpt) { var regionName = regionOpt.name; if (regionName) { optionModelMap.set(regionName, new Model(regionOpt, _this, _this.ecModel)); if (regionOpt.selected) selectedMap[regionName] = true; } return optionModelMap; }, createHashMap()); if (!option.selectedMap) option.selectedMap = selectedMap; }; /** * Get model of region. */ GeoModel.prototype.getRegionModel = function(name) { return this._optionModelMap.get(name) || new Model(null, this, this.ecModel); }; /** * Format label * @param name Region name */ GeoModel.prototype.getFormattedLabel = function(name, status) { var regionModel = this.getRegionModel(name); var formatter = status === "normal" ? regionModel.get(["label", "formatter"]) : regionModel.get([ "emphasis", "label", "formatter" ]); var params = { name }; if (isFunction(formatter)) { params.status = status; return formatter(params); } else if (isString(formatter)) return formatter.replace("{a}", name != null ? name : ""); }; GeoModel.prototype.select = function(name) { var option = this.option; var selectedMode = option.selectedMode; if (!selectedMode) return; if (selectedMode !== "multiple") option.selectedMap = null; var selectedMap = option.selectedMap || (option.selectedMap = {}); selectedMap[name] = true; }; GeoModel.prototype.unSelect = function(name) { var selectedMap = this.option.selectedMap; if (selectedMap) selectedMap[name] = false; }; GeoModel.prototype.toggleSelected = function(name) { this[this.isSelected(name) ? "unSelect" : "select"](name); }; GeoModel.prototype.isSelected = function(name) { var selectedMap = this.option.selectedMap; return !!(selectedMap && selectedMap[name]); }; GeoModel.prototype.__ownRoamView = function() { return this.coordinateSystem.view; }; GeoModel.type = "geo"; GeoModel.layoutMode = "box"; GeoModel.defaultOption = { z: 0, show: true, left: "center", top: "center", aspectScale: null, silent: false, map: "", boundingCoords: null, center: null, zoom: 1, scaleLimit: null, label: { show: false, color: tokens.color.tertiary }, itemStyle: { borderWidth: .5, borderColor: tokens.color.border }, emphasis: { label: { show: true, color: tokens.color.primary }, itemStyle: { color: tokens.color.highlight } }, select: { label: { show: true, color: tokens.color.primary }, itemStyle: { color: tokens.color.highlight } }, regions: [] }; return GeoModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/geo/GeoView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GeoView = function(_super) { __extends(GeoView, _super); function GeoView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GeoView.type; _this.focusBlurEnabled = true; return _this; } GeoView.prototype.init = function(ecModel, api) { this._api = api; }; GeoView.prototype.render = function(geoModel, ecModel, api, payload) { this._model = geoModel; if (!geoModel.get("show")) { this._mapDraw && this._mapDraw.remove(); this._mapDraw = null; return; } if (!this._mapDraw) this._mapDraw = new MapDraw(api); var mapDraw = this._mapDraw; mapDraw.draw(geoModel, ecModel, api, this, payload); mapDraw.group.on("click", this._handleRegionClick, this); mapDraw.group.silent = geoModel.get("silent"); this.group.add(mapDraw.group); this.updateSelectStatus(geoModel, ecModel, api); }; /** * @implements RoamHostView['__updateOnOwnRoam'] */ GeoView.prototype.__updateOnOwnRoam = function(payload, model, api) { var mapDraw = this._mapDraw; if (mapDraw) mapDraw.__updateOnOwnRoam(model); }; GeoView.prototype._handleRegionClick = function(e) { var eventData; findEventDispatcher(e.target, function(current) { return (eventData = getECData(current).eventData) != null; }, true); if (eventData) this._api.dispatchAction({ type: "geoToggleSelect", geoId: this._model.id, name: eventData.name }); }; GeoView.prototype.updateSelectStatus = function(model, ecModel, api) { var _this = this; this._mapDraw.group.traverse(function(node) { var eventData = getECData(node).eventData; if (eventData) { _this._model.isSelected(eventData.name) ? api.enterSelect(node) : api.leaveSelect(node); return true; } }); }; GeoView.prototype.findHighDownDispatchers = function(name) { return this._mapDraw && this._mapDraw.findHighDownDispatchers(name, this._model); }; GeoView.prototype.dispose = function() { this._mapDraw && this._mapDraw.remove(); }; GeoView.type = "geo"; return GeoView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/geo/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function registerMap$1(mapName, geoJson, specialAreas) { geoSourceManager_default.registerMap(mapName, geoJson, specialAreas); } function install$48(registers) { registers.registerCoordinateSystem("geo", geoCreator); registers.registerComponentModel(GeoModel); registers.registerComponentView(GeoView); registers.registerImpl("registerMap", registerMap$1); registers.registerImpl("getMap", function(mapName) { return geoSourceManager_default.getMapForUser(mapName); }); function makeAction(method, actionInfo) { actionInfo.update = "geo:updateSelectStatus"; registers.registerAction(actionInfo, function(payload, ecModel) { var selected = {}; var allSelected = []; ecModel.eachComponent({ mainType: "geo", query: payload }, function(geoModel) { geoModel[method](payload.name); var geo = geoModel.coordinateSystem; each$12(geo.regions, function(region) { selected[region.name] = geoModel.isSelected(region.name) || false; }); var names = []; each$12(selected, function(v, name) { selected[name] && names.push(name); }); allSelected.push({ geoIndex: geoModel.componentIndex, name: names }); }); return { selected, allSelected, name: payload.name }; }); } makeAction("toggleSelected", { type: "geoToggleSelect", event: "geoselectchanged" }); makeAction("select", { type: "geoSelect", event: "geoselected" }); makeAction("unSelect", { type: "geoUnSelect", event: "geounselected" }); /** * @payload * @property {string} [componentType=series] * @property {number} [dx] * @property {number} [dy] * @property {number} [zoom] * @property {number} [originX] * @property {number} [originY] */ registers.registerAction({ type: "geoRoam", event: "geoRoam", update: "updateTransform" }, function(payload, ecModel, api) { var mainType = payload.componentType || (payload.geoId != null || payload.geoName != null || payload.geoIndex != null ? "geo" : "series"); var isSeries = mainType === COMPONENT_MAIN_TYPE_SERIES; if (mainType !== "geo" && !isSeries) return; var subType = isSeries ? "map" : null; ecModel.eachComponent(makeQueryConditionKindA(payload, mainType, subType), function(componentOrSeries) { if (isSeries && !mapSeriesNeedsDrawMap(componentOrSeries)) return; ownRoamModelCoordSysUpdateInAction(payload, componentOrSeries, isSeries ? componentOrSeries.seriesGroup.r : null); ownRoamViewUpdateDirectlyInAction(payload, componentOrSeries, ecModel, api); }); }); } //#endregion //#region node_modules/echarts/lib/chart/map/mapSymbolLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var mapSymbolLayoutStageHandler = createSimpleOverallStageHandler("map", mapSymbolLayout); function mapSymbolLayout(ecModel) { each$12(buildAllMapSeriesGroups(ecModel), function(mapSeriesGroup, groupKey) { if (!getMainMapSeries(mapSeriesGroup) || !mapSeriesGroupHasOwnGeo(groupKey)) return; var mapSymbolOffsets = {}; each$12(mapSeriesGroup.f, function(subMapSeries) { var geo = subMapSeries.coordinateSystem; var data = subMapSeries.originalData; if (subMapSeries.get("showLegendSymbol") && ecModel.getComponent("legend")) data.each(data.mapDimension("value"), function(value, idx) { var name = data.getName(idx); var region = geo.getRegion(name); if (!region || isNaN(value)) return; var offset = mapSymbolOffsets[name] || 0; var point = geo.dataToPoint(region.getCenter()); mapSymbolOffsets[name] = offset + 1; data.setItemLayout(idx, { point, offset }); }); }); var data = getMainMapSeries(mapSeriesGroup).getData(); data.each(function(idx) { var name = data.getName(idx); var layout = data.getItemLayout(idx) || {}; layout.showLabel = !mapSymbolOffsets[name]; data.setItemLayout(idx, layout); }); }); } //#endregion //#region node_modules/echarts/lib/chart/map/mapDataStatistic.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataStatistics(datas, statisticType) { var dataNameMap = {}; each$12(datas, function(data) { data.each(data.mapDimension("value"), function(value, idx) { var mapKey = "ec-" + data.getName(idx); dataNameMap[mapKey] = dataNameMap[mapKey] || []; if (!isNaN(value)) dataNameMap[mapKey].push(value); }); }); return datas[0].map(datas[0].mapDimension("value"), function(value, idx) { var mapKey = "ec-" + datas[0].getName(idx); var sum = 0; var min = Infinity; var max = -Infinity; var len = dataNameMap[mapKey].length; for (var i = 0; i < len; i++) { min = Math.min(min, dataNameMap[mapKey][i]); max = Math.max(max, dataNameMap[mapKey][i]); sum += dataNameMap[mapKey][i]; } var result; if (statisticType === "min") result = min; else if (statisticType === "max") result = max; else if (statisticType === "average") result = sum / len; else result = sum; return len === 0 ? NaN : result; }); } var mapDataStatisticStageHandler = createSimpleOverallStageHandler("map", mapDataStatistic); function mapDataStatistic(ecModel) { each$12(buildAllMapSeriesGroups(ecModel), function(seriesGroup) { var mainSeries = getMainMapSeries(seriesGroup); if (!mainSeries) return; var data = dataStatistics(map$1(seriesGroup.f, function(seriesModel) { return seriesModel.getData(); }), mainSeries.get("mapValueCalculation")); each$12(seriesGroup.f, function(series) { series.seriesGroup = seriesGroup; series.originalData = series.getData(); series.setData(data.cloneShallow()); }); }); } //#endregion //#region node_modules/echarts/lib/chart/map/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$47(registers) { use(install$48); registers.registerChartView(MapView); registers.registerSeriesModel(MapSeries); registers.registerLayout(mapSymbolLayoutStageHandler); registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, mapDataStatisticStageHandler); createLegacyDataSelectAction("map", registers.registerAction); } //#endregion //#region node_modules/echarts/lib/chart/tree/layoutHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Initialize all computational message for following algorithm. */ function init$1(inRoot) { var root = inRoot; root.hierNode = { defaultAncestor: null, ancestor: root, prelim: 0, modifier: 0, change: 0, shift: 0, i: 0, thread: null }; var nodes = [root]; var node; var children; while (node = nodes.pop()) { children = node.children; if (node.isExpand && children.length) for (var i = children.length - 1; i >= 0; i--) { var child = children[i]; child.hierNode = { defaultAncestor: null, ancestor: child, prelim: 0, modifier: 0, change: 0, shift: 0, i, thread: null }; nodes.push(child); } } } /** * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. * * Computes a preliminary x coordinate for node. Before that, this function is * applied recursively to the children of node, as well as the function * apportion(). After spacing out the children by calling executeShifts(), the * node is placed to the midpoint of its outermost children. */ function firstWalk(node, separation) { var children = node.isExpand ? node.children : []; var siblings = node.parentNode.children; var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null; if (children.length) { executeShifts(node); var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2; if (subtreeW) { node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); node.hierNode.modifier = node.hierNode.prelim - midPoint; } else node.hierNode.prelim = midPoint; } else if (subtreeW) node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation); } /** * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. * * Computes all real x-coordinates by summing up the modifiers recursively. */ function secondWalk(node) { var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier; node.setLayout({ x: nodeX }, true); node.hierNode.modifier += node.parentNode.hierNode.modifier; } function separation(cb) { return arguments.length ? cb : defaultSeparation; } /** * Transform the common coordinate to radial coordinate. */ function radialCoordinate(rad, r) { rad -= Math.PI / 2; return { x: r * Math.cos(rad), y: r * Math.sin(rad) }; } /** * All other shifts, applied to the smaller subtrees between w- and w+, are * performed by this function. * * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. */ function executeShifts(node) { var children = node.children; var n = children.length; var shift = 0; var change = 0; while (--n >= 0) { var child = children[n]; child.hierNode.prelim += shift; child.hierNode.modifier += shift; change += child.hierNode.change; shift += child.hierNode.shift + change; } } /** * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. * * The core of the algorithm. Here, a new subtree is combined with the * previous subtrees. Threads are used to traverse the inside and outside * contours of the left and right subtree up to the highest common level. * Whenever two nodes of the inside contours conflict, we compute the left * one of the greatest uncommon ancestors using the function nextAncestor() * and call moveSubtree() to shift the subtree and prepare the shifts of * smaller subtrees. Finally, we add a new thread (if necessary). */ function apportion(subtreeV, subtreeW, ancestor, separation) { if (subtreeW) { var nodeOutRight = subtreeV; var nodeInRight = subtreeV; var nodeOutLeft = nodeInRight.parentNode.children[0]; var nodeInLeft = subtreeW; var sumOutRight = nodeOutRight.hierNode.modifier; var sumInRight = nodeInRight.hierNode.modifier; var sumOutLeft = nodeOutLeft.hierNode.modifier; var sumInLeft = nodeInLeft.hierNode.modifier; while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) { nodeOutRight = nextRight(nodeOutRight); nodeOutLeft = nextLeft(nodeOutLeft); nodeOutRight.hierNode.ancestor = subtreeV; var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim - sumInRight + separation(nodeInLeft, nodeInRight); if (shift > 0) { moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift); sumInRight += shift; sumOutRight += shift; } sumInLeft += nodeInLeft.hierNode.modifier; sumInRight += nodeInRight.hierNode.modifier; sumOutRight += nodeOutRight.hierNode.modifier; sumOutLeft += nodeOutLeft.hierNode.modifier; } if (nodeInLeft && !nextRight(nodeOutRight)) { nodeOutRight.hierNode.thread = nodeInLeft; nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight; } if (nodeInRight && !nextLeft(nodeOutLeft)) { nodeOutLeft.hierNode.thread = nodeInRight; nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft; ancestor = subtreeV; } } return ancestor; } /** * This function is used to traverse the right contour of a subtree. * It returns the rightmost child of node or the thread of node. The function * returns null if and only if node is on the highest depth of its subtree. */ function nextRight(node) { var children = node.children; return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread; } /** * This function is used to traverse the left contour of a subtree (or a subforest). * It returns the leftmost child of node or the thread of node. The function * returns null if and only if node is on the highest depth of its subtree. */ function nextLeft(node) { var children = node.children; return children.length && node.isExpand ? children[0] : node.hierNode.thread; } /** * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor. * Otherwise, returns the specified ancestor. */ function nextAncestor(nodeInLeft, node, ancestor) { return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? nodeInLeft.hierNode.ancestor : ancestor; } /** * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. * * Shifts the current subtree rooted at wr. * This is done by increasing prelim(w+) and modifier(w+) by shift. */ function moveSubtree(wl, wr, shift) { var change = shift / (wr.hierNode.i - wl.hierNode.i); wr.hierNode.change -= change; wr.hierNode.shift += shift; wr.hierNode.modifier += shift; wr.hierNode.prelim += shift; wl.hierNode.change += change; } /** * The implementation of this function was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. */ function defaultSeparation(node1, node2) { return node1.parentNode === node2.parentNode ? 1 : 2; } //#endregion //#region node_modules/echarts/lib/data/helper/linkSeriesData.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Link lists and struct (graph or tree) */ var inner$14 = makeInner(); function linkSeriesData(opt) { var mainData = opt.mainData; var datas = opt.datas; if (!datas) { datas = { main: mainData }; opt.datasAttr = { main: "data" }; } opt.datas = opt.mainData = null; linkAll(mainData, datas, opt); each$12(datas, function(data) { each$12(mainData.TRANSFERABLE_METHODS, function(methodName) { data.wrapMethod(methodName, curry$1(transferInjection, opt)); }); }); mainData.wrapMethod("cloneShallow", curry$1(cloneShallowInjection, opt)); each$12(mainData.CHANGABLE_METHODS, function(methodName) { mainData.wrapMethod(methodName, curry$1(changeInjection, opt)); }); assert(datas[mainData.dataType] === mainData); } function transferInjection(opt, res) { if (isMainData(this)) { var datas = extend({}, inner$14(this).datas); datas[this.dataType] = res; linkAll(res, datas, opt); } else linkSingle(res, this.dataType, inner$14(this).mainData, opt); return res; } function changeInjection(opt, res) { opt.struct && opt.struct.update(); return res; } function cloneShallowInjection(opt, res) { each$12(inner$14(res).datas, function(data, dataType) { data !== res && linkSingle(data.cloneShallow(), dataType, res, opt); }); return res; } /** * Supplement method to List. * * @public * @param [dataType] If not specified, return mainData. */ function getLinkedData(dataType) { var mainData = inner$14(this).mainData; return dataType == null || mainData == null ? mainData : inner$14(mainData).datas[dataType]; } /** * Get list of all linked data */ function getLinkedDataAll() { var mainData = inner$14(this).mainData; return mainData == null ? [{ data: mainData }] : map$1(keys(inner$14(mainData).datas), function(type) { return { type, data: inner$14(mainData).datas[type] }; }); } function isMainData(data) { return inner$14(data).mainData === data; } function linkAll(mainData, datas, opt) { inner$14(mainData).datas = {}; each$12(datas, function(data, dataType) { linkSingle(data, dataType, mainData, opt); }); } function linkSingle(data, dataType, mainData, opt) { inner$14(mainData).datas[dataType] = data; inner$14(data).mainData = mainData; data.dataType = dataType; if (opt.struct) { data[opt.structAttr] = opt.struct; opt.struct[opt.datasAttr[dataType]] = data; } data.getLinkedData = getLinkedData; data.getLinkedDataAll = getLinkedDataAll; } //#endregion //#region node_modules/echarts/lib/data/Tree.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Tree data structure */ var TreeNode = function() { function TreeNode(name, hostTree) { this.depth = 0; this.height = 0; /** * Reference to list item. * Do not persistent dataIndex outside, * besause it may be changed by list. * If dataIndex -1, * this node is logical deleted (filtered) in list. */ this.dataIndex = -1; this.children = []; this.viewChildren = []; this.isExpand = false; this.name = name || ""; this.hostTree = hostTree; } /** * The node is removed. */ TreeNode.prototype.isRemoved = function() { return this.dataIndex < 0; }; TreeNode.prototype.eachNode = function(options, cb, context) { if (isFunction(options)) { context = cb; cb = options; options = null; } options = options || {}; if (isString(options)) options = { order: options }; var order = options.order || "preorder"; var children = this[options.attr || "children"]; var suppressVisitSub; order === "preorder" && (suppressVisitSub = cb.call(context, this)); for (var i = 0; !suppressVisitSub && i < children.length; i++) children[i].eachNode(options, cb, context); order === "postorder" && cb.call(context, this); }; /** * Update depth and height of this subtree. */ TreeNode.prototype.updateDepthAndHeight = function(depth) { var height = 0; this.depth = depth; for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; child.updateDepthAndHeight(depth + 1); if (child.height > height) height = child.height; } this.height = height + 1; }; TreeNode.prototype.getNodeById = function(id) { if (this.getId() === id) return this; for (var i = 0, children = this.children, len = children.length; i < len; i++) { var res = children[i].getNodeById(id); if (res) return res; } }; TreeNode.prototype.contains = function(node) { if (node === this) return true; for (var i = 0, children = this.children, len = children.length; i < len; i++) { var res = children[i].contains(node); if (res) return res; } }; /** * @param includeSelf Default false. * @return order: [root, child, grandchild, ...] */ TreeNode.prototype.getAncestors = function(includeSelf) { var ancestors = []; var node = includeSelf ? this : this.parentNode; while (node) { ancestors.push(node); node = node.parentNode; } ancestors.reverse(); return ancestors; }; TreeNode.prototype.getAncestorsIndices = function() { var indices = []; var currNode = this; while (currNode) { indices.push(currNode.dataIndex); currNode = currNode.parentNode; } indices.reverse(); return indices; }; TreeNode.prototype.getDescendantIndices = function() { var indices = []; this.eachNode(function(childNode) { indices.push(childNode.dataIndex); }); return indices; }; TreeNode.prototype.getValue = function(dimension) { var data = this.hostTree.data; return data.getStore().get(data.getDimensionIndex(dimension || "value"), this.dataIndex); }; TreeNode.prototype.setLayout = function(layout, merge) { this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge); }; /** * @return {Object} layout */ TreeNode.prototype.getLayout = function() { return this.hostTree.data.getItemLayout(this.dataIndex); }; TreeNode.prototype.getModel = function(path) { if (this.dataIndex < 0) return; return this.hostTree.data.getItemModel(this.dataIndex).getModel(path); }; TreeNode.prototype.getLevelModel = function() { return (this.hostTree.levelModels || [])[this.depth]; }; TreeNode.prototype.setVisual = function(key, value) { this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, key, value); }; /** * Get item visual * FIXME: make return type better */ TreeNode.prototype.getVisual = function(key) { return this.hostTree.data.getItemVisual(this.dataIndex, key); }; TreeNode.prototype.getRawIndex = function() { return this.hostTree.data.getRawIndex(this.dataIndex); }; TreeNode.prototype.getId = function() { return this.hostTree.data.getId(this.dataIndex); }; /** * index in parent's children */ TreeNode.prototype.getChildIndex = function() { if (this.parentNode) { var children = this.parentNode.children; for (var i = 0; i < children.length; ++i) if (children[i] === this) return i; return -1; } return -1; }; /** * if this is an ancestor of another node * * @param node another node * @return if is ancestor */ TreeNode.prototype.isAncestorOf = function(node) { var parent = node.parentNode; while (parent) { if (parent === this) return true; parent = parent.parentNode; } return false; }; /** * if this is an descendant of another node * * @param node another node * @return if is descendant */ TreeNode.prototype.isDescendantOf = function(node) { return node !== this && node.isAncestorOf(this); }; return TreeNode; }(); var Tree = function() { function Tree(hostModel) { this.type = "tree"; this._nodes = []; this.hostModel = hostModel; } Tree.prototype.eachNode = function(options, cb, context) { this.root.eachNode(options, cb, context); }; Tree.prototype.getNodeByDataIndex = function(dataIndex) { var rawIndex = this.data.getRawIndex(dataIndex); return this._nodes[rawIndex]; }; Tree.prototype.getNodeById = function(name) { return this.root.getNodeById(name); }; /** * Update item available by list, * when list has been performed options like 'filterSelf' or 'map'. */ Tree.prototype.update = function() { var data = this.data; var nodes = this._nodes; for (var i = 0, len = nodes.length; i < len; i++) nodes[i].dataIndex = -1; for (var i = 0, len = data.count(); i < len; i++) nodes[data.getRawIndex(i)].dataIndex = i; }; /** * Clear all layouts */ Tree.prototype.clearLayouts = function() { this.data.clearItemLayouts(); }; /** * data node format: * { * name: ... * value: ... * children: [ * { * name: ... * value: ... * children: ... * }, * ... * ] * } */ Tree.createTree = function(dataRoot, hostModel, beforeLink) { var tree = new Tree(hostModel); var listData = []; var dimMax = 1; buildHierarchy(dataRoot); function buildHierarchy(dataNode, parentNode) { var value = dataNode.value; dimMax = Math.max(dimMax, isArray$1(value) ? value.length : 1); listData.push(dataNode); var node = new TreeNode(convertOptionIdName(dataNode.name, ""), tree); parentNode ? addChild(node, parentNode) : tree.root = node; tree._nodes.push(node); var children = dataNode.children; if (children) for (var i = 0; i < children.length; i++) buildHierarchy(children[i], node); } tree.root.updateDepthAndHeight(0); var dimensions = prepareSeriesDataSchema(listData, { coordDimensions: ["value"], dimensionsCount: dimMax }).dimensions; var list = new SeriesData(dimensions, hostModel); list.initData(listData); beforeLink && beforeLink(list); linkSeriesData({ mainData: list, struct: tree, structAttr: "tree" }); tree.update(); return tree; }; return Tree; }(); /** * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote, * so this function is not ready and not necessary to be public. */ function addChild(child, node) { var children = node.children; if (child.parentNode === node) return; children.push(child); child.parentNode = node; } //#endregion //#region node_modules/echarts/lib/chart/helper/treeHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) { if (payload && indexOf(validPayloadTypes, payload.type) >= 0) { var root = seriesModel.getData().tree.root; var targetNode = payload.targetNode; if (isString(targetNode)) targetNode = root.getNodeById(targetNode); if (targetNode && root.contains(targetNode)) return { node: targetNode }; var targetNodeId = payload.targetNodeId; if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) return { node: targetNode }; } } function getPathToRoot(node) { var path = []; while (node) { node = node.parentNode; node && path.push(node); } return path.reverse(); } function aboveViewRoot(viewRoot, node) { return indexOf(getPathToRoot(viewRoot), node) >= 0; } function wrapTreePathInfo(node, seriesModel) { var treePathInfo = []; while (node) { var nodeDataIndex = node.dataIndex; treePathInfo.push({ name: node.name, dataIndex: nodeDataIndex, value: seriesModel.getRawValue(nodeDataIndex) }); node = node.parentNode; } treePathInfo.reverse(); return treePathInfo; } //#endregion //#region node_modules/echarts/lib/chart/tree/TreeSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_TREE = "tree"; var TreeSeriesModel = function(_super) { __extends(TreeSeriesModel, _super); function TreeSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TreeSeriesModel.type; _this.hasSymbolVisual = true; _this.ignoreStyleOnData = true; return _this; } /** * Init a tree data structure from data in option series */ TreeSeriesModel.prototype.getInitialData = function(option) { var root = { name: option.name, children: option.data }; var leavesModel = new Model(option.leaves || {}, this, this.ecModel); var tree = Tree.createTree(root, this, beforeLink); function beforeLink(nodeData) { nodeData.wrapMethod("getItemModel", function(model, idx) { var node = tree.getNodeByDataIndex(idx); if (!(node && node.children.length && node.isExpand)) model.parentModel = leavesModel; return model; }); } var treeDepth = 0; tree.eachNode("preorder", function(node) { if (node.depth > treeDepth) treeDepth = node.depth; }); var expandTreeDepth = option.expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth; tree.root.eachNode("preorder", function(node) { var item = node.hostTree.data.getRawDataItem(node.dataIndex); node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth; }); return tree.data; }; /** * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'. * @returns {string} orient */ TreeSeriesModel.prototype.getOrient = function() { var orient = this.get("orient"); if (orient === "horizontal") orient = "LR"; else if (orient === "vertical") orient = "TB"; return orient; }; TreeSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var tree = this.getData().tree; var realRoot = tree.root.children[0]; var node = tree.getNodeByDataIndex(dataIndex); var value = node.getValue(); var name = node.name; while (node && node !== realRoot) { name = node.parentNode.name + "." + name; node = node.parentNode; } return createTooltipMarkup("nameValue", { name, value, noValue: isNaN(value) || value == null }); }; TreeSeriesModel.prototype.getDataParams = function(dataIndex) { var params = _super.prototype.getDataParams.apply(this, arguments); var node = this.getData().tree.getNodeByDataIndex(dataIndex); params.treeAncestors = wrapTreePathInfo(node, this); params.collapsed = !node.isExpand; return params; }; TreeSeriesModel.prototype.__ownRoamView = function() { return this.coordinateSystem; }; TreeSeriesModel.type = "series." + SERIES_TYPE_TREE; TreeSeriesModel.layoutMode = "box"; TreeSeriesModel.defaultOption = { z: 2, coordinateSystemUsage: "box", left: "12%", top: "12%", right: "12%", bottom: "12%", layout: "orthogonal", edgeShape: "curve", edgeForkPosition: "50%", roam: false, roamTrigger: "global", nodeScaleRatio: .4, center: null, zoom: 1, orient: "LR", symbol: "emptyCircle", symbolSize: 7, expandAndCollapse: true, initialTreeDepth: 2, lineStyle: { color: tokens.color.borderTint, width: 1.5, curveness: .5 }, itemStyle: { color: "lightsteelblue", borderWidth: 1.5 }, label: { show: true }, animationEasing: "linear", animationDuration: 700, animationDurationUpdate: 500 }; return TreeSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/tree/TreeView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TreeEdgeShape = function() { function TreeEdgeShape() { this.parentPoint = []; this.childPoints = []; } return TreeEdgeShape; }(); var TreePath = function(_super) { __extends(TreePath, _super); function TreePath(opts) { return _super.call(this, opts) || this; } TreePath.prototype.getDefaultStyle = function() { return { stroke: tokens.color.neutral99, fill: null }; }; TreePath.prototype.getDefaultShape = function() { return new TreeEdgeShape(); }; TreePath.prototype.buildPath = function(ctx, shape) { var childPoints = shape.childPoints; var childLen = childPoints.length; var parentPoint = shape.parentPoint; var firstChildPos = childPoints[0]; var lastChildPos = childPoints[childLen - 1]; if (childLen === 1) { ctx.moveTo(parentPoint[0], parentPoint[1]); ctx.lineTo(firstChildPos[0], firstChildPos[1]); return; } var orient = shape.orient; var forkDim = orient === "TB" || orient === "BT" ? 0 : 1; var otherDim = 1 - forkDim; var forkPosition = parsePercent(shape.forkPosition, 1); var tmpPoint = []; tmpPoint[forkDim] = parentPoint[forkDim]; tmpPoint[otherDim] = parentPoint[otherDim] + (lastChildPos[otherDim] - parentPoint[otherDim]) * forkPosition; ctx.moveTo(parentPoint[0], parentPoint[1]); ctx.lineTo(tmpPoint[0], tmpPoint[1]); ctx.moveTo(firstChildPos[0], firstChildPos[1]); tmpPoint[forkDim] = firstChildPos[forkDim]; ctx.lineTo(tmpPoint[0], tmpPoint[1]); tmpPoint[forkDim] = lastChildPos[forkDim]; ctx.lineTo(tmpPoint[0], tmpPoint[1]); ctx.lineTo(lastChildPos[0], lastChildPos[1]); for (var i = 1; i < childLen - 1; i++) { var point = childPoints[i]; ctx.moveTo(point[0], point[1]); tmpPoint[forkDim] = point[forkDim]; ctx.lineTo(tmpPoint[0], tmpPoint[1]); } }; return TreePath; }(Path); var TreeView = function(_super) { __extends(TreeView, _super); function TreeView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_TREE; _this._mainGroup = new Group$3(); return _this; } TreeView.prototype.init = function(ecModel, api) { this._controller = new RoamController(api.getZr()); this.group.add(this._mainGroup); this._firstRender = true; }; TreeView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var layoutInfo = seriesModel.layoutInfo; var group = this._mainGroup; if (seriesModel.get("layout") === "radial") { group.x = layoutInfo.x + layoutInfo.width / 2; group.y = layoutInfo.y + layoutInfo.height / 2; } else { group.x = layoutInfo.x; group.y = layoutInfo.y; } this._updateViewCoordSys(seriesModel, api); updateRoamControllerSimply(seriesModel, api, this._controller, createIsInSelfByPointerCheckerEl(this.group), null); var oldData = this._data; data.diff(oldData).add(function(newIdx) { if (symbolNeedsDraw(data, newIdx)) updateNode(data, newIdx, null, group, seriesModel); }).update(function(newIdx, oldIdx) { var symbolEl = oldData.getItemGraphicEl(oldIdx); if (!symbolNeedsDraw(data, newIdx)) { symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel); return; } updateNode(data, newIdx, symbolEl, group, seriesModel); }).remove(function(oldIdx) { var symbolEl = oldData.getItemGraphicEl(oldIdx); if (symbolEl) removeNode(oldData, oldIdx, symbolEl, group, seriesModel); }).execute(); this._updateNodeAndLinkScale(seriesModel); if (seriesModel.get("expandAndCollapse") === true) data.eachItemGraphicEl(function(el, dataIndex) { el.off("click").on("click", function() { api.dispatchAction({ type: "treeExpandAndCollapse", seriesId: seriesModel.id, dataIndex }); }); }); this._data = data; this._firstRender = false; }; TreeView.prototype.__updateOnOwnRoam = function(payload, seriesModel, api) { applyViewCoordSysTransToElement(this.group, 2, seriesModel.coordinateSystem, null); if (isRoamPayloadHasZoom(payload)) this._updateNodeAndLinkScale(seriesModel); }; TreeView.prototype._updateViewCoordSys = function(seriesModel, api) { var data = seriesModel.getData(); var points = []; data.each(function(idx) { var layout = data.getItemLayout(idx); if (layout && !isNaN(layout.x) && !isNaN(layout.y)) points.push([+layout.x, +layout.y]); }); var min = []; var max = []; fromPoints(points, min, max); var oldMin = this._min; var oldMax = this._max; if (max[0] - min[0] === 0) { min[0] = oldMin ? oldMin[0] : min[0] - 1; max[0] = oldMax ? oldMax[0] : max[0] + 1; } if (max[1] - min[1] === 0) { min[1] = oldMin ? oldMin[1] : min[1] - 1; max[1] = oldMax ? oldMax[1] : max[1] + 1; } var ownCoordSys = seriesModel.coordinateSystem = createViewCoordSysSimply(seriesModel, api, min[0], min[1], max[0] - min[0], max[1] - min[1]); applyViewCoordSysTransToElement(this.group, 2, ownCoordSys, this._firstRender ? null : seriesModel); this._min = min; this._max = max; }; TreeView.prototype._updateNodeAndLinkScale = function(seriesModel) { var data = seriesModel.getData(); var nodeScale = calcCompensationScaleToPreserveNodeSize(seriesModel.coordinateSystem, seriesModel); data.eachItemGraphicEl(function(el, idx) { el.setSymbolScale(nodeScale); }); }; TreeView.prototype.dispose = function() { this._controller && this._controller.dispose(); }; TreeView.prototype.remove = function() { this._mainGroup.removeAll(); this._data = null; }; TreeView.type = SERIES_TYPE_TREE; return TreeView; }(ChartView); function symbolNeedsDraw(data, dataIndex) { var layout = data.getItemLayout(dataIndex); return layout && !isNaN(layout.x) && !isNaN(layout.y); } function updateNode(data, dataIndex, symbolEl, group, seriesModel) { var isInit = !symbolEl; var node = data.tree.getNodeByDataIndex(dataIndex); var itemModel = node.getModel(); var visualColor = node.getVisual("style").fill; var symbolInnerColor = node.isExpand === false && node.children.length !== 0 ? visualColor : tokens.color.neutral00; var virtualRoot = data.tree.root; var source = node.parentNode === virtualRoot ? node : node.parentNode || node; var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex); var sourceLayout = source.getLayout(); var sourceOldLayout = sourceSymbolEl ? { x: sourceSymbolEl.__oldX, y: sourceSymbolEl.__oldY, rawX: sourceSymbolEl.__radialOldRawX, rawY: sourceSymbolEl.__radialOldRawY } : sourceLayout; var targetLayout = node.getLayout(); if (isInit) { symbolEl = new Symbol$1(data, dataIndex, null, { symbolInnerColor, useNameLabel: true }); symbolEl.x = sourceOldLayout.x; symbolEl.y = sourceOldLayout.y; } else symbolEl.updateData(data, dataIndex, null, { symbolInnerColor, useNameLabel: true }); symbolEl.__radialOldRawX = symbolEl.__radialRawX; symbolEl.__radialOldRawY = symbolEl.__radialRawY; symbolEl.__radialRawX = targetLayout.rawX; symbolEl.__radialRawY = targetLayout.rawY; group.add(symbolEl); data.setItemGraphicEl(dataIndex, symbolEl); symbolEl.__oldX = symbolEl.x; symbolEl.__oldY = symbolEl.y; updateProps$1(symbolEl, { x: targetLayout.x, y: targetLayout.y }, seriesModel); var symbolPath = symbolEl.getSymbolPath(); if (seriesModel.get("layout") === "radial") { var realRoot = virtualRoot.children[0]; var rootLayout = realRoot.getLayout(); var length_1 = realRoot.children.length; var rad = void 0; var isLeft = void 0; if (targetLayout.x === rootLayout.x && node.isExpand === true && realRoot.children.length) { var center = { x: (realRoot.children[0].getLayout().x + realRoot.children[length_1 - 1].getLayout().x) / 2, y: (realRoot.children[0].getLayout().y + realRoot.children[length_1 - 1].getLayout().y) / 2 }; rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x); if (rad < 0) rad = Math.PI * 2 + rad; isLeft = center.x < rootLayout.x; if (isLeft) rad = rad - Math.PI; } else { rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x); if (rad < 0) rad = Math.PI * 2 + rad; if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) { isLeft = targetLayout.x < rootLayout.x; if (isLeft) rad = rad - Math.PI; } else { isLeft = targetLayout.x > rootLayout.x; if (!isLeft) rad = rad - Math.PI; } } var textPosition = isLeft ? "left" : "right"; var normalLabelModel = itemModel.getModel("label"); var rotate = normalLabelModel.get("rotate"); var labelRotateRadian = rotate * (Math.PI / 180); var textContent = symbolPath.getTextContent(); if (textContent) { symbolPath.setTextConfig({ position: normalLabelModel.get("position") || textPosition, rotation: rotate == null ? -rad : labelRotateRadian, origin: "center" }); textContent.setStyle("verticalAlign", "middle"); } } var focus = itemModel.get(["emphasis", "focus"]); var focusDataIndices = focus === "relative" ? concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === "ancestor" ? node.getAncestorsIndices() : focus === "descendant" ? node.getDescendantIndices() : null; if (focusDataIndices) getECData(symbolEl).focus = focusDataIndices; drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group); if (symbolEl.__edge) symbolEl.onHoverStateChange = function(toState) { if (toState !== "blur") { var parentEl = node.parentNode && data.getItemGraphicEl(node.parentNode.dataIndex); if (!(parentEl && parentEl.hoverState === 1)) setStatesFlag(symbolEl.__edge, toState); } }; } function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group) { var itemModel = node.getModel(); var edgeShape = seriesModel.get("edgeShape"); var layout = seriesModel.get("layout"); var orient = seriesModel.getOrient(); var curvature = seriesModel.get(["lineStyle", "curveness"]); var edgeForkPosition = seriesModel.get("edgeForkPosition"); var lineStyle = itemModel.getModel("lineStyle").getLineStyle(); var edge = symbolEl.__edge; if (edgeShape === "curve") { if (node.parentNode && node.parentNode !== virtualRoot) { if (!edge) edge = symbolEl.__edge = new BezierCurve({ shape: getEdgeShape(layout, orient, curvature, sourceOldLayout, sourceOldLayout) }); updateProps$1(edge, { shape: getEdgeShape(layout, orient, curvature, sourceLayout, targetLayout) }, seriesModel); } } else if (edgeShape === "polyline") { if (layout === "orthogonal") { if (node !== virtualRoot && node.children && node.children.length !== 0 && node.isExpand === true) { var children = node.children; var childPoints = []; for (var i = 0; i < children.length; i++) { var childLayout = children[i].getLayout(); childPoints.push([childLayout.x, childLayout.y]); } if (!edge) edge = symbolEl.__edge = new TreePath({ shape: { parentPoint: [targetLayout.x, targetLayout.y], childPoints: [[targetLayout.x, targetLayout.y]], orient, forkPosition: edgeForkPosition } }); updateProps$1(edge, { shape: { parentPoint: [targetLayout.x, targetLayout.y], childPoints } }, seriesModel); } } else throw new Error("The polyline edgeShape can only be used in orthogonal layout"); } if (edge && !(edgeShape === "polyline" && !node.isExpand)) { edge.useStyle(defaults({ strokeNoScale: true, fill: null }, lineStyle)); setStatesStylesFromModel(edge, itemModel, "lineStyle"); setDefaultStateProxy(edge); group.add(edge); } } function removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt) { var virtualRoot = data.tree.root; var _a = getSourceNode(virtualRoot, node), source = _a.source, sourceLayout = _a.sourceLayout; var symbolEl = data.getItemGraphicEl(node.dataIndex); if (!symbolEl) return; var sourceEdge = data.getItemGraphicEl(source.dataIndex).__edge; var edge = symbolEl.__edge || (source.isExpand === false || source.children.length === 1 ? sourceEdge : void 0); var edgeShape = seriesModel.get("edgeShape"); var layoutOpt = seriesModel.get("layout"); var orient = seriesModel.get("orient"); var curvature = seriesModel.get(["lineStyle", "curveness"]); if (edge) { if (edgeShape === "curve") removeElement(edge, { shape: getEdgeShape(layoutOpt, orient, curvature, sourceLayout, sourceLayout), style: { opacity: 0 } }, seriesModel, { cb: function() { group.remove(edge); }, removeOpt: removeAnimationOpt }); else if (edgeShape === "polyline" && seriesModel.get("layout") === "orthogonal") removeElement(edge, { shape: { parentPoint: [sourceLayout.x, sourceLayout.y], childPoints: [[sourceLayout.x, sourceLayout.y]] }, style: { opacity: 0 } }, seriesModel, { cb: function() { group.remove(edge); }, removeOpt: removeAnimationOpt }); } } function getSourceNode(virtualRoot, node) { var source = node.parentNode === virtualRoot ? node : node.parentNode || node; var sourceLayout; while (sourceLayout = source.getLayout(), sourceLayout == null) source = source.parentNode === virtualRoot ? source : source.parentNode || source; return { source, sourceLayout }; } function removeNode(data, dataIndex, symbolEl, group, seriesModel) { var node = data.tree.getNodeByDataIndex(dataIndex); var virtualRoot = data.tree.root; var sourceLayout = getSourceNode(virtualRoot, node).sourceLayout; var removeAnimationOpt = { duration: seriesModel.get("animationDurationUpdate"), easing: seriesModel.get("animationEasingUpdate") }; removeElement(symbolEl, { x: sourceLayout.x + 1, y: sourceLayout.y + 1 }, seriesModel, { cb: function() { group.remove(symbolEl); data.setItemGraphicEl(dataIndex, null); }, removeOpt: removeAnimationOpt }); symbolEl.fadeOut(null, data.hostModel, { fadeLabel: true, animation: removeAnimationOpt }); each$12(node.children, function(childNode) { removeNodeEdge(childNode, data, group, seriesModel, removeAnimationOpt); }); removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt); } function getEdgeShape(layoutOpt, orient, curvature, sourceLayout, targetLayout) { var cpx1; var cpy1; var cpx2; var cpy2; var x1; var x2; var y1; var y2; if (layoutOpt === "radial") { x1 = sourceLayout.rawX; y1 = sourceLayout.rawY; x2 = targetLayout.rawX; y2 = targetLayout.rawY; var radialCoor1 = radialCoordinate(x1, y1); var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * curvature); var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * curvature); var radialCoor4 = radialCoordinate(x2, y2); return { x1: radialCoor1.x || 0, y1: radialCoor1.y || 0, x2: radialCoor4.x || 0, y2: radialCoor4.y || 0, cpx1: radialCoor2.x || 0, cpy1: radialCoor2.y || 0, cpx2: radialCoor3.x || 0, cpy2: radialCoor3.y || 0 }; } else { x1 = sourceLayout.x; y1 = sourceLayout.y; x2 = targetLayout.x; y2 = targetLayout.y; if (orient === "LR" || orient === "RL") { cpx1 = x1 + (x2 - x1) * curvature; cpy1 = y1; cpx2 = x2 + (x1 - x2) * curvature; cpy2 = y2; } if (orient === "TB" || orient === "BT") { cpx1 = x1; cpy1 = y1 + (y2 - y1) * curvature; cpx2 = x2; cpy2 = y2 + (y1 - y2) * curvature; } } return { x1, y1, x2, y2, cpx1, cpy1, cpx2, cpy2 }; } //#endregion //#region node_modules/echarts/lib/chart/tree/traversalHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Traverse the tree from bottom to top and do something */ function eachAfter(root, callback, separation) { var nodes = [root]; var next = []; var node; while (node = nodes.pop()) { next.push(node); if (node.isExpand) { var children = node.children; if (children.length) for (var i = 0; i < children.length; i++) nodes.push(children[i]); } } while (node = next.pop()) callback(node, separation); } /** * Traverse the tree from top to bottom and do something */ function eachBefore(root, callback) { var nodes = [root]; var node; while (node = nodes.pop()) { callback(node); if (node.isExpand) { var children = node.children; if (children.length) for (var i = children.length - 1; i >= 0; i--) nodes.push(children[i]); } } } //#endregion //#region node_modules/echarts/lib/chart/tree/treeLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function treeLayout(ecModel, api) { ecModel.eachSeriesByType("tree", function(seriesModel) { commonLayout(seriesModel, api); }); } function commonLayout(seriesModel, api) { var refContainer = createBoxLayoutReference(seriesModel, api).refContainer; var layoutInfo = getLayoutRect(seriesModel.getBoxLayoutParams(), refContainer); seriesModel.layoutInfo = layoutInfo; var layout = seriesModel.get("layout"); var width = 0; var height = 0; var separation$1 = null; if (layout === "radial") { width = 2 * Math.PI; height = Math.min(layoutInfo.height, layoutInfo.width) / 2; separation$1 = separation(function(node1, node2) { return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth; }); } else { width = layoutInfo.width; height = layoutInfo.height; separation$1 = separation(); } var virtualRoot = seriesModel.getData().tree.root; var realRoot = virtualRoot.children[0]; if (realRoot) { init$1(virtualRoot); eachAfter(realRoot, firstWalk, separation$1); virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim; eachBefore(realRoot, secondWalk); var left_1 = realRoot; var right_1 = realRoot; var bottom_1 = realRoot; eachBefore(realRoot, function(node) { var x = node.getLayout().x; if (x < left_1.getLayout().x) left_1 = node; if (x > right_1.getLayout().x) right_1 = node; if (node.depth > bottom_1.depth) bottom_1 = node; }); var delta = left_1 === right_1 ? 1 : separation$1(left_1, right_1) / 2; var tx_1 = delta - left_1.getLayout().x; var kx_1 = 0; var ky_1 = 0; var coorX_1 = 0; var coorY_1 = 0; if (layout === "radial") { kx_1 = width / (right_1.getLayout().x + delta + tx_1); ky_1 = height / (bottom_1.depth - 1 || 1); eachBefore(realRoot, function(node) { coorX_1 = (node.getLayout().x + tx_1) * kx_1; coorY_1 = (node.depth - 1) * ky_1; var finalCoor = radialCoordinate(coorX_1, coorY_1); node.setLayout({ x: finalCoor.x, y: finalCoor.y, rawX: coorX_1, rawY: coorY_1 }, true); }); } else { var orient_1 = seriesModel.getOrient(); if (orient_1 === "RL" || orient_1 === "LR") { ky_1 = height / (right_1.getLayout().x + delta + tx_1); kx_1 = width / (bottom_1.depth - 1 || 1); eachBefore(realRoot, function(node) { coorY_1 = (node.getLayout().x + tx_1) * ky_1; coorX_1 = orient_1 === "LR" ? (node.depth - 1) * kx_1 : width - (node.depth - 1) * kx_1; node.setLayout({ x: coorX_1, y: coorY_1 }, true); }); } else if (orient_1 === "TB" || orient_1 === "BT") { kx_1 = width / (right_1.getLayout().x + delta + tx_1); ky_1 = height / (bottom_1.depth - 1 || 1); eachBefore(realRoot, function(node) { coorX_1 = (node.getLayout().x + tx_1) * kx_1; coorY_1 = orient_1 === "TB" ? (node.depth - 1) * ky_1 : height - (node.depth - 1) * ky_1; node.setLayout({ x: coorX_1, y: coorY_1 }, true); }); } } } } //#endregion //#region node_modules/echarts/lib/chart/tree/treeAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function installTreeAction(registers) { registers.registerAction({ type: "treeExpandAndCollapse", event: "treeExpandAndCollapse", update: "update" }, function(payload, ecModel) { ecModel.eachComponent({ mainType: COMPONENT_MAIN_TYPE_SERIES, subType: SERIES_TYPE_TREE, query: payload }, function(seriesModel) { var dataIndex = payload.dataIndex; var node = seriesModel.getData().tree.getNodeByDataIndex(dataIndex); node.isExpand = !node.isExpand; }); }); registerRoamActionSimply(registers, COMPONENT_MAIN_TYPE_SERIES, SERIES_TYPE_TREE); } //#endregion //#region node_modules/echarts/lib/chart/tree/treeVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var treeVisualStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_TREE, treeVisual); function treeVisual(ecModel) { ecModel.eachSeriesByType(SERIES_TYPE_TREE, function(seriesModel) { var data = seriesModel.getData(); data.tree.eachNode(function(node) { var style = node.getModel().getModel("itemStyle").getItemStyle(); extend(data.ensureUniqueItemVisual(node.dataIndex, "style"), style); }); }); } //#endregion //#region node_modules/echarts/lib/chart/tree/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$46(registers) { registers.registerChartView(TreeView); registers.registerSeriesModel(TreeSeriesModel); registers.registerLayout(treeLayout); registers.registerVisual(treeVisualStageHandler); installTreeAction(registers); } //#endregion //#region node_modules/echarts/lib/chart/treemap/treemapAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var actionTypes = [ "treemapZoomToNode", "treemapRender", "treemapMove" ]; function installTreemapAction(registers) { for (var i = 0; i < actionTypes.length; i++) registers.registerAction({ type: actionTypes[i], update: "updateView" }, noop); registers.registerAction({ type: "treemapRootToNode", update: "updateView" }, function(payload, ecModel) { ecModel.eachComponent({ mainType: "series", subType: "treemap", query: payload }, handleRootToNode); function handleRootToNode(model, index) { var targetInfo = retrieveTargetInfo(payload, ["treemapZoomToNode", "treemapRootToNode"], model); if (targetInfo) { var originViewRoot = model.getViewRoot(); if (originViewRoot) payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? "rollUp" : "drillDown"; model.resetViewRoot(targetInfo.node); } } }); } //#endregion //#region node_modules/echarts/lib/chart/helper/enableAriaDecalForTree.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function enableAriaDecalForTree(seriesModel) { var tree = seriesModel.getData().tree; var decalPaletteScope = {}; tree.eachNode(function(node) { var current = node; while (current && current.depth > 1) current = current.parentNode; var decal = getDecalFromPalette(seriesModel.ecModel, current.name || current.dataIndex + "", decalPaletteScope); node.setVisual("decal", decal); }); } //#endregion //#region node_modules/echarts/lib/chart/treemap/TreemapSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TreemapSeriesModel = function(_super) { __extends(TreemapSeriesModel, _super); function TreemapSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TreemapSeriesModel.type; _this.preventUsingHoverLayer = true; return _this; } /** * @override */ TreemapSeriesModel.prototype.getInitialData = function(option, ecModel) { var root = { name: option.name, children: option.data }; completeTreeValue$1(root); var levels = option.levels || []; var designatedVisualModel = new Model({ itemStyle: this.designatedVisualItemStyle = {} }, this, ecModel); levels = option.levels = setDefault(levels, ecModel); var levelModels = map$1(levels || [], function(levelDefine) { return new Model(levelDefine, designatedVisualModel, ecModel); }, this); var tree = Tree.createTree(root, this, beforeLink); function beforeLink(nodeData) { nodeData.wrapMethod("getItemModel", function(model, idx) { var node = tree.getNodeByDataIndex(idx); model.parentModel = (node ? levelModels[node.depth] : null) || designatedVisualModel; return model; }); } return tree.data; }; TreemapSeriesModel.prototype.optionUpdated = function() { this.resetViewRoot(); }; /** * @override * @param {number} dataIndex * @param {boolean} [mutipleSeries=false] */ TreemapSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); var value = this.getRawValue(dataIndex); return createTooltipMarkup("nameValue", { name: data.getName(dataIndex), value }); }; /** * Add tree path to tooltip param * * @override * @param {number} dataIndex * @return {Object} */ TreemapSeriesModel.prototype.getDataParams = function(dataIndex) { var params = _super.prototype.getDataParams.apply(this, arguments); params.treeAncestors = wrapTreePathInfo(this.getData().tree.getNodeByDataIndex(dataIndex), this); params.treePathInfo = params.treeAncestors; return params; }; /** * @public * @param {Object} layoutInfo { * x: containerGroup x * y: containerGroup y * width: containerGroup width * height: containerGroup height * } */ TreemapSeriesModel.prototype.setLayoutInfo = function(layoutInfo) { /** * @readOnly * @type {Object} */ this.layoutInfo = this.layoutInfo || {}; extend(this.layoutInfo, layoutInfo); }; /** * @param {string} id * @return {number} index */ TreemapSeriesModel.prototype.mapIdToIndex = function(id) { /** * @private * @type {Object} */ var idIndexMap = this._idIndexMap; if (!idIndexMap) { idIndexMap = this._idIndexMap = createHashMap(); /** * @private * @type {number} */ this._idIndexMapCount = 0; } var index = idIndexMap.get(id); if (index == null) idIndexMap.set(id, index = this._idIndexMapCount++); return index; }; TreemapSeriesModel.prototype.getViewRoot = function() { return this._viewRoot; }; TreemapSeriesModel.prototype.resetViewRoot = function(viewRoot) { viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot; var root = this.getRawData().tree.root; if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) this._viewRoot = root; }; TreemapSeriesModel.prototype.enableAriaDecal = function() { enableAriaDecalForTree(this); }; TreemapSeriesModel.type = "series.treemap"; TreemapSeriesModel.layoutMode = "box"; TreemapSeriesModel.defaultOption = { progressive: 0, coordinateSystemUsage: "box", left: tokens.size.l, top: tokens.size.xxxl, right: tokens.size.l, bottom: tokens.size.xxxl, sort: true, clipWindow: "origin", squareRatio: .5 * (1 + Math.sqrt(5)), leafDepth: null, drillDownIcon: "▶", zoomToNodeRatio: .1024, scaleLimit: { max: 5, min: .2 }, roam: true, roamTrigger: "global", nodeClick: "zoomToNode", animation: true, animationDurationUpdate: 900, animationEasing: "quinticInOut", breadcrumb: { show: true, height: 22, left: "center", bottom: tokens.size.m, emptyItemWidth: 25, itemStyle: { color: tokens.color.backgroundShade, textStyle: { color: tokens.color.secondary } }, emphasis: { itemStyle: { color: tokens.color.background } } }, label: { show: true, distance: 0, padding: 5, position: "inside", color: tokens.color.neutral00, overflow: "truncate" }, upperLabel: { show: false, position: [0, "50%"], height: 20, overflow: "truncate", verticalAlign: "middle" }, itemStyle: { color: null, colorAlpha: null, colorSaturation: null, borderWidth: 0, gapWidth: 0, borderColor: tokens.color.neutral00, borderColorSaturation: null }, emphasis: { upperLabel: { show: true, position: [0, "50%"], overflow: "truncate", verticalAlign: "middle" } }, visualDimension: 0, visualMin: null, visualMax: null, color: [], colorAlpha: null, colorSaturation: null, colorMappingBy: "index", visibleMin: 10, childrenVisibleMin: null, levels: [] }; return TreemapSeriesModel; }(SeriesModel); /** * @param {Object} dataNode */ function completeTreeValue$1(dataNode) { var sum = 0; each$12(dataNode.children, function(child) { completeTreeValue$1(child); var childValue = child.value; isArray$1(childValue) && (childValue = childValue[0]); sum += childValue; }); var thisValue = dataNode.value; if (isArray$1(thisValue)) thisValue = thisValue[0]; if (thisValue == null || isNaN(thisValue)) thisValue = sum; if (thisValue < 0) thisValue = 0; isArray$1(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue; } /** * set default to level configuration */ function setDefault(levels, ecModel) { var globalColorList = normalizeToArray(ecModel.get("color")); var globalDecalList = normalizeToArray(ecModel.get([ "aria", "decal", "decals" ])); if (!globalColorList) return; levels = levels || []; var hasColorDefine; var hasDecalDefine; each$12(levels, function(levelDefine) { var model = new Model(levelDefine); var modelColor = model.get("color"); var modelDecal = model.get("decal"); if (model.get(["itemStyle", "color"]) || modelColor && modelColor !== "none") hasColorDefine = true; if (model.get(["itemStyle", "decal"]) || modelDecal && modelDecal !== "none") hasDecalDefine = true; }); var level0 = levels[0] || (levels[0] = {}); if (!hasColorDefine) level0.color = globalColorList.slice(); if (!hasDecalDefine && globalDecalList) level0.decal = globalDecalList.slice(); return levels; } //#endregion //#region node_modules/echarts/lib/chart/treemap/Breadcrumb.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TEXT_PADDING = 8; var ITEM_GAP = 8; var ARRAY_LENGTH = 5; var Breadcrumb = function() { function Breadcrumb(containerGroup) { this.group = new Group$3(); containerGroup.add(this.group); } Breadcrumb.prototype.render = function(seriesModel, api, targetNode, onSelect) { var model = seriesModel.getModel("breadcrumb"); var thisGroup = this.group; thisGroup.removeAll(); if (!model.get("show") || !targetNode) return; var normalStyleModel = model.getModel("itemStyle"); var emphasisModel = model.getModel("emphasis"); var textStyleModel = normalStyleModel.getModel("textStyle"); var emphasisTextStyleModel = emphasisModel.getModel(["itemStyle", "textStyle"]); var refContainer = createBoxLayoutReference(seriesModel, api).refContainer; var boxLayoutParams = { left: model.get("left"), right: model.get("right"), top: model.get("top"), bottom: model.get("bottom") }; var layoutParam = { emptyItemWidth: model.get("emptyItemWidth"), totalWidth: 0, renderList: [] }; var availableSize = getLayoutRect(boxLayoutParams, refContainer); this._prepare(targetNode, layoutParam, textStyleModel); this._renderContent(seriesModel, layoutParam, availableSize, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect); positionElement(thisGroup, boxLayoutParams, refContainer); }; /** * Prepare render list and total width * @private */ Breadcrumb.prototype._prepare = function(targetNode, layoutParam, textStyleModel) { for (var node = targetNode; node; node = node.parentNode) { var text = convertOptionIdName(node.getModel().get("name"), ""); var textRect = textStyleModel.getTextRect(text); var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth); layoutParam.totalWidth += itemWidth + ITEM_GAP; layoutParam.renderList.push({ node, text, width: itemWidth }); } }; /** * @private */ Breadcrumb.prototype._renderContent = function(seriesModel, layoutParam, availableSize, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect) { var lastX = 0; var emptyItemWidth = layoutParam.emptyItemWidth; var height = seriesModel.get(["breadcrumb", "height"]); var totalWidth = layoutParam.totalWidth; var renderList = layoutParam.renderList; var emphasisItemStyle = emphasisModel.getModel("itemStyle").getItemStyle(); for (var i = renderList.length - 1; i >= 0; i--) { var item = renderList[i]; var itemNode = item.node; var itemWidth = item.width; var text = item.text; if (totalWidth > availableSize.width) { totalWidth -= itemWidth - emptyItemWidth; itemWidth = emptyItemWidth; text = null; } var el = new Polygon({ shape: { points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0) }, style: defaults(normalStyleModel.getItemStyle(), { lineJoin: "bevel" }), textContent: new ZRText({ style: createTextStyle$1(textStyleModel, { text }) }), textConfig: { position: "inside" }, z2: 1e5, onclick: curry$1(onSelect, itemNode) }); el.disableLabelAnimation = true; el.getTextContent().ensureState("emphasis").style = createTextStyle$1(emphasisTextStyleModel, { text }); el.ensureState("emphasis").style = emphasisItemStyle; toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); this.group.add(el); packEventData(el, seriesModel, itemNode); lastX += itemWidth + ITEM_GAP; } }; Breadcrumb.prototype.remove = function() { this.group.removeAll(); }; return Breadcrumb; }(); function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) { var points = [ [head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight] ]; !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]); !head && points.push([x, y + itemHeight / 2]); return points; } function packEventData(el, seriesModel, itemNode) { getECData(el).eventData = { componentType: "series", componentSubType: "treemap", componentIndex: seriesModel.componentIndex, seriesIndex: seriesModel.seriesIndex, seriesName: seriesModel.name, seriesType: "treemap", selfType: "breadcrumb", nodeData: { dataIndex: itemNode && itemNode.dataIndex, name: itemNode && itemNode.name }, treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel) }; } //#endregion //#region node_modules/echarts/lib/util/animation.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Animate multiple elements with a single done-callback. * * @example * animation * .createWrap() * .add(el1, {x: 10, y: 10}) * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400) * .done(function () { // done }) * .start('cubicOut'); */ var AnimationWrap = function() { function AnimationWrap() { this._storage = []; this._elExistsMap = {}; } /** * Caution: a el can only be added once, otherwise 'done' * might not be called. This method checks this (by el.id), * suppresses adding and returns false when existing el found. * * @return Whether adding succeeded. */ AnimationWrap.prototype.add = function(el, target, duration, delay, easing) { if (this._elExistsMap[el.id]) return false; this._elExistsMap[el.id] = true; this._storage.push({ el, target, duration, delay, easing }); return true; }; /** * Only execute when animation done/aborted. */ AnimationWrap.prototype.finished = function(callback) { this._finishedCallback = callback; return this; }; /** * Will stop exist animation firstly. */ AnimationWrap.prototype.start = function() { var _this = this; var count = this._storage.length; var checkTerminate = function() { count--; if (count <= 0) { _this._storage.length = 0; _this._elExistsMap = {}; _this._finishedCallback && _this._finishedCallback(); } }; for (var i = 0, len = this._storage.length; i < len; i++) { var item = this._storage[i]; item.el.animateTo(item.target, { duration: item.duration, delay: item.delay, easing: item.easing, setToFinal: true, done: checkTerminate, aborted: checkTerminate }); } return this; }; return AnimationWrap; }(); function createWrap() { return new AnimationWrap(); } //#endregion //#region node_modules/echarts/lib/chart/treemap/treemapLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var mathMax$2 = Math.max; var mathMin$2 = Math.min; var each$9 = each$12; var PATH_BORDER_WIDTH = ["itemStyle", "borderWidth"]; var PATH_GAP_WIDTH = ["itemStyle", "gapWidth"]; var PATH_UPPER_LABEL_SHOW = ["upperLabel", "show"]; var PATH_UPPER_LABEL_HEIGHT = ["upperLabel", "height"]; /** * @public */ var treemapLayout_default = { seriesType: "treemap", reset: function(seriesModel, ecModel, api, payload) { var seriesOption = seriesModel.option; var refContainer = createBoxLayoutReference(seriesModel, api).refContainer; var layoutInfo = getLayoutRect(seriesModel.getBoxLayoutParams(), refContainer); var payloadType = payload && payload.type; var targetInfo = retrieveTargetInfo(payload, ["treemapZoomToNode", "treemapRootToNode"], seriesModel); var rootRect = payloadType === "treemapRender" || payloadType === "treemapMove" ? payload.rootRect : null; var viewRoot = seriesModel.getViewRoot(); var viewAbovePath = getPathToRoot(viewRoot); if (payloadType !== "treemapMove") { var needClampZoom = false; var rootSize = payloadType === "treemapZoomToNode" ? (needClampZoom = true, estimateRootSize(seriesModel, targetInfo, viewRoot, layoutInfo)) : rootRect ? (needClampZoom = true, extend({}, rootRect)) : extend({}, layoutInfo); if (needClampZoom) { var zoom = calculateCurrentZoom(layoutInfo, rootSize); zoom = treemapClampZoom(zoom, seriesModel); rootSize.width = layoutInfo.width * zoom; rootSize.height = layoutInfo.height * zoom; } var sort_1 = seriesOption.sort; if (sort_1 && sort_1 !== "asc" && sort_1 !== "desc") sort_1 = "desc"; var options = { squareRatio: seriesOption.squareRatio, sort: sort_1, leafDepth: seriesOption.leafDepth }; viewRoot.hostTree.clearLayouts(); var viewRootLayout_1 = { x: 0, y: 0, width: rootSize.width, height: rootSize.height, area: rootSize.width * rootSize.height }; viewRoot.setLayout(viewRootLayout_1); squarify(viewRoot, options, false, 0); viewRootLayout_1 = viewRoot.getLayout(); each$9(viewAbovePath, function(node, index) { var childValue = (viewAbovePath[index + 1] || viewRoot).getValue(); node.setLayout(extend({ dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0 }, viewRootLayout_1)); }); } var treeRoot = seriesModel.getData().tree.root; treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true); seriesModel.setLayoutInfo(layoutInfo); prunning(treeRoot, new BoundingRect(-layoutInfo.x, -layoutInfo.y, api.getWidth(), api.getHeight()), viewAbovePath, viewRoot, 0); } }; /** * Layout treemap with squarify algorithm. * The original presentation of this algorithm * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk * . * The implementation of this algorithm was originally copied from "d3.js" * * with some modifications made for this program. * See the license statement at the head of this file. */ function squarify(node, options, hideChildren, depth) { var width; var height; if (node.isRemoved()) return; var thisLayout = node.getLayout(); width = thisLayout.width; height = thisLayout.height; var nodeModel = node.getModel(); var borderWidth = nodeModel.get(PATH_BORDER_WIDTH); var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2; var upperLabelHeight = getUpperLabelHeight(nodeModel); var upperHeight = Math.max(borderWidth, upperLabelHeight); var layoutOffset = borderWidth - halfGapWidth; var layoutOffsetUpper = upperHeight - halfGapWidth; node.setLayout({ borderWidth, upperHeight, upperLabelHeight }, true); width = mathMax$2(width - 2 * layoutOffset, 0); height = mathMax$2(height - layoutOffset - layoutOffsetUpper, 0); var totalArea = width * height; var viewChildren = initChildren$1(node, nodeModel, totalArea, options, hideChildren, depth); if (!viewChildren.length) return; var rect = { x: layoutOffset, y: layoutOffsetUpper, width, height }; var rowFixedLength = mathMin$2(width, height); var best = Infinity; var row = []; row.area = 0; for (var i = 0, len = viewChildren.length; i < len;) { var child = viewChildren[i]; row.push(child); row.area += child.getLayout().area; var score = worst(row, rowFixedLength, options.squareRatio); if (score <= best) { i++; best = score; } else { row.area -= row.pop().getLayout().area; position(row, rowFixedLength, rect, halfGapWidth, false); rowFixedLength = mathMin$2(rect.width, rect.height); row.length = row.area = 0; best = Infinity; } } if (row.length) position(row, rowFixedLength, rect, halfGapWidth, true); if (!hideChildren) { var childrenVisibleMin = nodeModel.get("childrenVisibleMin"); if (childrenVisibleMin != null && totalArea < childrenVisibleMin) hideChildren = true; } for (var i = 0, len = viewChildren.length; i < len; i++) squarify(viewChildren[i], options, hideChildren, depth + 1); } /** * Set area to each child, and calculate data extent for visual coding. */ function initChildren$1(node, nodeModel, totalArea, options, hideChildren, depth) { var viewChildren = node.children || []; var orderBy = options.sort; orderBy !== "asc" && orderBy !== "desc" && (orderBy = null); var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; if (hideChildren && !overLeafDepth) return node.viewChildren = []; viewChildren = filter(viewChildren, function(child) { return !child.isRemoved(); }); sort$1(viewChildren, orderBy); var info = statistic(nodeModel, viewChildren, orderBy); if (info.sum === 0) return node.viewChildren = []; info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren); if (info.sum === 0) return node.viewChildren = []; for (var i = 0, len = viewChildren.length; i < len; i++) { var area = viewChildren[i].getValue() / info.sum * totalArea; viewChildren[i].setLayout({ area }); } if (overLeafDepth) { viewChildren.length && node.setLayout({ isLeafRoot: true }, true); viewChildren.length = 0; } node.viewChildren = viewChildren; node.setLayout({ dataExtent: info.dataExtent }, true); return viewChildren; } /** * Consider 'visibleMin'. Modify viewChildren and get new sum. */ function filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) { if (!orderBy) return sum; var visibleMin = nodeModel.get("visibleMin"); var len = orderedChildren.length; var deletePoint = len; for (var i = len - 1; i >= 0; i--) { var value = orderedChildren[orderBy === "asc" ? len - i - 1 : i].getValue(); if (value / sum * totalArea < visibleMin) { deletePoint = i; sum -= value; } } orderBy === "asc" ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint); return sum; } /** * Sort */ function sort$1(viewChildren, orderBy) { if (orderBy) viewChildren.sort(function(a, b) { var diff = orderBy === "asc" ? a.getValue() - b.getValue() : b.getValue() - a.getValue(); return diff === 0 ? orderBy === "asc" ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff; }); return viewChildren; } /** * Statistic */ function statistic(nodeModel, children, orderBy) { var sum = 0; for (var i = 0, len = children.length; i < len; i++) sum += children[i].getValue(); var dimension = nodeModel.get("visualDimension"); var dataExtent; if (!children || !children.length) dataExtent = [NaN, NaN]; else if (dimension === "value" && orderBy) { dataExtent = [children[children.length - 1].getValue(), children[0].getValue()]; orderBy === "asc" && dataExtent.reverse(); } else { dataExtent = initExtentForUnion(); each$9(children, function(child) { var value = child.getValue(dimension); value < dataExtent[0] && (dataExtent[0] = value); value > dataExtent[1] && (dataExtent[1] = value); }); } return { sum, dataExtent }; } /** * Computes the score for the specified row, * as the worst aspect ratio. */ function worst(row, rowFixedLength, ratio) { var areaMax = 0; var areaMin = Infinity; for (var i = 0, area = void 0, len = row.length; i < len; i++) { area = row[i].getLayout().area; if (area) { area < areaMin && (areaMin = area); area > areaMax && (areaMax = area); } } var squareArea = row.area * row.area; var f = rowFixedLength * rowFixedLength * ratio; return squareArea ? mathMax$2(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity; } /** * Positions the specified row of nodes. Modifies `rect`. */ function position(row, rowFixedLength, rect, halfGapWidth, flush) { var idx0WhenH = rowFixedLength === rect.width ? 0 : 1; var idx1WhenH = 1 - idx0WhenH; var xy = ["x", "y"]; var wh = ["width", "height"]; var last = rect[xy[idx0WhenH]]; var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0; if (flush || rowOtherLength > rect[wh[idx1WhenH]]) rowOtherLength = rect[wh[idx1WhenH]]; for (var i = 0, rowLen = row.length; i < rowLen; i++) { var node = row[i]; var nodeLayout = {}; var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0; var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$2(rowOtherLength - 2 * halfGapWidth, 0); var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last; var modWH = i === rowLen - 1 || remain < step ? remain : step; var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$2(modWH - 2 * halfGapWidth, 0); nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$2(halfGapWidth, wh1 / 2); nodeLayout[xy[idx0WhenH]] = last + mathMin$2(halfGapWidth, wh0 / 2); last += modWH; node.setLayout(nodeLayout, true); } rect[xy[idx1WhenH]] += rowOtherLength; rect[wh[idx1WhenH]] -= rowOtherLength; } function estimateRootSize(seriesModel, targetInfo, viewRoot, containerSize) { var currNode = (targetInfo || {}).node; var containerWidth = containerSize.width; var containerHeight = containerSize.height; var defaultSize = extend({}, containerSize); if (!currNode || currNode === viewRoot) return defaultSize; var parent; var viewArea = containerWidth * containerHeight; var area = viewArea * seriesModel.option.zoomToNodeRatio; while (parent = currNode.parentNode) { var sum = 0; var siblings = parent.children; for (var i = 0, len = siblings.length; i < len; i++) sum += siblings[i].getValue(); var currNodeValue = currNode.getValue(); if (currNodeValue === 0) return defaultSize; area *= sum / currNodeValue; var parentModel = parent.getModel(); var borderWidth = parentModel.get(PATH_BORDER_WIDTH); var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel)); area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, .5); area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER); currNode = parent; } area < viewArea && (area = viewArea); var scale = Math.pow(area / viewArea, .5); return { width: containerWidth * scale, height: containerHeight * scale }; } function calculateRootPosition(layoutInfo, rootRect, targetInfo) { if (rootRect) return { x: rootRect.x, y: rootRect.y }; var defaultPosition = { x: 0, y: 0 }; if (!targetInfo) return defaultPosition; var targetNode = targetInfo.node; var layout = targetNode.getLayout(); if (!layout) return defaultPosition; var targetCenter = [layout.width / 2, layout.height / 2]; var node = targetNode; while (node) { var nodeLayout = node.getLayout(); targetCenter[0] += nodeLayout.x; targetCenter[1] += nodeLayout.y; node = node.parentNode; } return { x: layoutInfo.width / 2 - targetCenter[0], y: layoutInfo.height / 2 - targetCenter[1] }; } function prunning(node, clipRect, viewAbovePath, viewRoot, depth) { var nodeLayout = node.getLayout(); var nodeInViewAbovePath = viewAbovePath[depth]; var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node; if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) return; node.setLayout({ isInView: true, invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout), isAboveViewRoot }, true); var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height); each$9(node.viewChildren || [], function(child) { prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1); }); } function getUpperLabelHeight(model) { return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0; } function calculateCurrentZoom(baseSize, currSize) { return currSize.width / baseSize.width || currSize.height / baseSize.height || 1; } function treemapClampZoom(zoom, seriesModel) { return clampByZoomLimit(zoom, seriesModel.get("scaleLimit", true)); } //#endregion //#region node_modules/echarts/lib/chart/treemap/TreemapView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Group$2 = Group$3; var Rect$1 = Rect$2; var DRAG_THRESHOLD = 3; var PATH_LABEL_NOAMAL = "label"; var PATH_UPPERLABEL_NORMAL = "upperLabel"; var Z2_BASE = 100; var Z2_BG = 20; var Z2_CONTENT = 30; var getStateItemStyle = makeStyleMapper([ ["fill", "color"], ["stroke", "strokeColor"], ["lineWidth", "strokeWidth"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"] ]); var getItemStyleNormal = function(model) { var itemStyle = getStateItemStyle(model); itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null; return itemStyle; }; var inner$13 = makeInner(); var TreemapView = function(_super) { __extends(TreemapView, _super); function TreemapView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TreemapView.type; _this._state = "ready"; _this._storage = createStorage(); return _this; } /** * @override */ TreemapView.prototype.render = function(seriesModel, ecModel, api, payload) { if (indexOf(ecModel.findComponents({ mainType: "series", subType: "treemap", query: payload }), seriesModel) < 0) return; this.seriesModel = seriesModel; this.api = api; this.ecModel = ecModel; var targetInfo = retrieveTargetInfo(payload, ["treemapZoomToNode", "treemapRootToNode"], seriesModel); var payloadType = payload && payload.type; var layoutInfo = seriesModel.layoutInfo; var isInit = !this._oldTree; var thisStorage = this._storage; var reRoot = payloadType === "treemapRootToNode" && targetInfo && thisStorage ? { rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()], direction: payload.direction } : null; var containerGroup = this._giveContainerGroup(layoutInfo); var hasAnimation = seriesModel.get("animation"); var renderResult = this._doRender(containerGroup, seriesModel, reRoot); hasAnimation && !isInit && (!payloadType || payloadType === "treemapZoomToNode" || payloadType === "treemapRootToNode") ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally(); this._resetController(api); this._renderBreadcrumb(seriesModel, api, targetInfo); }; TreemapView.prototype._giveContainerGroup = function(layoutInfo) { var containerGroup = this._containerGroup; if (!containerGroup) { containerGroup = this._containerGroup = new Group$2(); this._initEvents(containerGroup); this.group.add(containerGroup); } containerGroup.x = layoutInfo.x; containerGroup.y = layoutInfo.y; return containerGroup; }; TreemapView.prototype._doRender = function(containerGroup, seriesModel, reRoot) { var thisTree = seriesModel.getData().tree; var oldTree = this._oldTree; var lastsForAnimation = createStorage(); var thisStorage = createStorage(); var oldStorage = this._storage; var willInvisibleEls = []; function doRenderNode(thisNode, oldNode, parentGroup, depth) { return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth); } dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); var willDeleteEls = clearStorage(oldStorage); this._oldTree = thisTree; this._storage = thisStorage; return { lastsForAnimation, willDeleteEls, renderFinally }; function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) { if (sameTree) { oldViewChildren = thisViewChildren; each$12(thisViewChildren, function(child, index) { !child.isRemoved() && processNode(index, index); }); } else new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey).add(processNode).update(processNode).remove(curry$1(processNode, null)).execute(); function getKey(node) { return node.getId(); } function processNode(newIndex, oldIndex) { var thisNode = newIndex != null ? thisViewChildren[newIndex] : null; var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null; var group = doRenderNode(thisNode, oldNode, parentGroup, depth); group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1); } } function clearStorage(storage) { var willDeleteEls = createStorage(); storage && each$12(storage, function(store, storageName) { var delEls = willDeleteEls[storageName]; each$12(store, function(el) { el && (delEls.push(el), inner$13(el).willDelete = true); }); }); return willDeleteEls; } function renderFinally() { each$12(willDeleteEls, function(els) { each$12(els, function(el) { el.parent && el.parent.remove(el); }); }); each$12(willInvisibleEls, function(el) { el.invisible = true; el.dirty(); }); } }; TreemapView.prototype._doAnimation = function(containerGroup, renderResult, seriesModel, reRoot) { var durationOption = seriesModel.get("animationDurationUpdate"); var easingOption = seriesModel.get("animationEasing"); var duration = (isFunction(durationOption) ? 0 : durationOption) || 0; var easing = (isFunction(easingOption) ? null : easingOption) || "cubicOut"; var animationWrap = createWrap(); each$12(renderResult.willDeleteEls, function(store, storageName) { each$12(store, function(el, rawIndex) { if (el.invisible) return; var parent = el.parent; var target; var innerStore = inner$13(parent); if (reRoot && reRoot.direction === "drillDown") target = parent === reRoot.rootNodeGroup ? { shape: { x: 0, y: 0, width: innerStore.nodeWidth, height: innerStore.nodeHeight }, style: { opacity: 0 } } : { style: { opacity: 0 } }; else { var targetX = 0; var targetY = 0; if (!innerStore.willDelete) { targetX = innerStore.nodeWidth / 2; targetY = innerStore.nodeHeight / 2; } target = storageName === "nodeGroup" ? { x: targetX, y: targetY, style: { opacity: 0 } } : { shape: { x: targetX, y: targetY, width: 0, height: 0 }, style: { opacity: 0 } }; } target && animationWrap.add(el, target, duration, 0, easing); }); }); each$12(this._storage, function(store, storageName) { each$12(store, function(el, rawIndex) { var last = renderResult.lastsForAnimation[storageName][rawIndex]; var target = {}; if (!last) return; if (el instanceof Group$3) { if (last.oldX != null) { target.x = el.x; target.y = el.y; el.x = last.oldX; el.y = last.oldY; } } else { if (last.oldShape) { target.shape = extend({}, el.shape); el.setShape(last.oldShape); } if (last.fadein) { el.setStyle("opacity", 0); target.style = { opacity: 1 }; } else if (el.style.opacity !== 1) target.style = { opacity: 1 }; } animationWrap.add(el, target, duration, 0, easing); }); }, this); this._state = "animating"; animationWrap.finished(bind$1(function() { this._state = "ready"; renderResult.renderFinally(); }, this)).start(); }; TreemapView.prototype._resetController = function(api) { var _this = this; var seriesModel = this.seriesModel; var controller = this._controller; if (!controller) { controller = this._controller = new RoamController(api.getZr()); controller.on("pan", bind$1(this._onPan, this)); controller.on("zoom", bind$1(this._onZoom, this)); } controller.enable(seriesModel.get("roam"), { api, zInfo: { component: seriesModel }, triggerInfo: { roamTrigger: seriesModel.get("roamTrigger"), isInSelf: function(e, x, y) { var containerGroup = _this._containerGroup; return containerGroup ? containerGroup.getBoundingRect().contain(x - containerGroup.x, y - containerGroup.y) : false; } } }); }; TreemapView.prototype._clearController = function() { var controller = this._controller; if (controller) { controller.dispose(); controller = null; } }; TreemapView.prototype._onPan = function(e) { if (this._state !== "animating" && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) { var root = this.seriesModel.getData().tree.root; if (!root) return; var rootLayout = root.getLayout(); if (!rootLayout) return; this.api.dispatchAction({ type: "treemapMove", from: this.uid, seriesId: this.seriesModel.id, rootRect: { x: rootLayout.x + e.dx, y: rootLayout.y + e.dy, width: rootLayout.width, height: rootLayout.height } }); } }; TreemapView.prototype._onZoom = function(e) { var mouseX = e.originX; var mouseY = e.originY; var zoomDelta = e.scale; var seriesModel = this.seriesModel; if (this._state !== "animating") { var root = seriesModel.getData().tree.root; if (!root) return; var rootLayout = root.getLayout(); if (!rootLayout) return; var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height); var layoutInfo = seriesModel.layoutInfo; var currZoom = calculateCurrentZoom(layoutInfo, rootLayout); var newZoom = currZoom * zoomDelta; newZoom = treemapClampZoom(newZoom, seriesModel); var zoomScale = newZoom / currZoom; mouseX -= layoutInfo.x; mouseY -= layoutInfo.y; var m = create$1(); translate(m, m, [-mouseX, -mouseY]); scale(m, m, [zoomScale, zoomScale]); translate(m, m, [mouseX, mouseY]); rect.applyTransform(m); this.api.dispatchAction({ type: "treemapRender", from: this.uid, seriesId: this.seriesModel.id, rootRect: { x: rect.x, y: rect.y, width: rect.width, height: rect.height } }); } }; TreemapView.prototype._initEvents = function(containerGroup) { var _this = this; containerGroup.on("click", function(e) { if (_this._state !== "ready") return; var nodeClick = _this.seriesModel.get("nodeClick", true); if (!nodeClick) return; var targetInfo = _this.findTarget(e.offsetX, e.offsetY); if (!targetInfo) return; var node = targetInfo.node; if (node.getLayout().isLeafRoot) _this._rootToNode(targetInfo); else if (nodeClick === "zoomToNode") _this._zoomToNode(targetInfo); else if (nodeClick === "link") { var itemModel = node.hostTree.data.getItemModel(node.dataIndex); var link = itemModel.get("link", true); var linkTarget = itemModel.get("target", true) || "blank"; link && windowOpen(link, linkTarget); } }, this); }; TreemapView.prototype._renderBreadcrumb = function(seriesModel, api, targetInfo) { var _this = this; if (!targetInfo) { targetInfo = seriesModel.get("leafDepth", true) != null ? { node: seriesModel.getViewRoot() } : this.findTarget(api.getWidth() / 2, api.getHeight() / 2); if (!targetInfo) targetInfo = { node: seriesModel.getData().tree.root }; } (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function(node) { if (_this._state !== "animating") aboveViewRoot(seriesModel.getViewRoot(), node) ? _this._rootToNode({ node }) : _this._zoomToNode({ node }); }); }; /** * @override */ TreemapView.prototype.remove = function() { this._clearController(); this._containerGroup && this._containerGroup.removeAll(); this._storage = createStorage(); this._state = "ready"; this._breadcrumb && this._breadcrumb.remove(); }; TreemapView.prototype.dispose = function() { this._clearController(); }; TreemapView.prototype._zoomToNode = function(targetInfo) { this.api.dispatchAction({ type: "treemapZoomToNode", from: this.uid, seriesId: this.seriesModel.id, targetNode: targetInfo.node }); }; TreemapView.prototype._rootToNode = function(targetInfo) { this.api.dispatchAction({ type: "treemapRootToNode", from: this.uid, seriesId: this.seriesModel.id, targetNode: targetInfo.node }); }; /** * @param x Global coord x. * @param y Global coord y. * @return info If not found, return undefined; * @return info.node Target node. * @return info.offsetX x refer to target node. * @return info.offsetY y refer to target node. */ TreemapView.prototype.findTarget = function(x, y) { var targetInfo; this.seriesModel.getViewRoot().eachNode({ attr: "viewChildren", order: "preorder" }, function(node) { var bgEl = this._storage.background[node.getRawIndex()]; if (bgEl) { var point = bgEl.transformCoordToLocal(x, y); var shape = bgEl.shape; if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) targetInfo = { node, offsetX: point[0], offsetY: point[1] }; else return false; } }, this); return targetInfo; }; TreemapView.type = "treemap"; return TreemapView; }(ChartView); function createStorage() { return { nodeGroup: [], background: [], content: [] }; } /** * @return Return undefined means do not travel further. */ function renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) { if (!thisNode) return; var thisLayout = thisNode.getLayout(); var data = seriesModel.getData(); var nodeModel = thisNode.getModel(); data.setItemGraphicEl(thisNode.dataIndex, null); if (!thisLayout || !thisLayout.isInView) return; var thisWidth = thisLayout.width; var thisHeight = thisLayout.height; var borderWidth = thisLayout.borderWidth; var thisInvisible = thisLayout.invisible; var thisRawIndex = thisNode.getRawIndex(); var oldRawIndex = oldNode && oldNode.getRawIndex(); var thisViewChildren = thisNode.viewChildren; var upperHeight = thisLayout.upperHeight; var isParent = thisViewChildren && thisViewChildren.length; var itemStyleNormalModel = nodeModel.getModel("itemStyle"); var itemStyleEmphasisModel = nodeModel.getModel(["emphasis", "itemStyle"]); var itemStyleBlurModel = nodeModel.getModel(["blur", "itemStyle"]); var itemStyleSelectModel = nodeModel.getModel(["select", "itemStyle"]); var borderRadius = itemStyleNormalModel.get("borderRadius") || 0; var group = giveGraphic("nodeGroup", Group$2); if (!group) return; parentGroup.add(group); group.x = thisLayout.x || 0; group.y = thisLayout.y || 0; group.markRedraw(); inner$13(group).nodeWidth = thisWidth; inner$13(group).nodeHeight = thisHeight; if (thisLayout.isAboveViewRoot) return group; var bg = giveGraphic("background", Rect$1, depth, Z2_BG); bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight); var emphasisModel = nodeModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); var blurScope = emphasisModel.get("blurScope"); var isDisabled = emphasisModel.get("disabled"); var focusOrIndices = focus === "ancestor" ? thisNode.getAncestorsIndices() : focus === "descendant" ? thisNode.getDescendantIndices() : focus; if (isParent) { if (isHighDownDispatcher(group)) setAsHighDownDispatcher(group, false); if (bg) { setAsHighDownDispatcher(bg, !isDisabled); data.setItemGraphicEl(thisNode.dataIndex, bg); enableHoverFocus(bg, focusOrIndices, blurScope); } } else { var content = giveGraphic("content", Rect$1, depth, Z2_CONTENT); content && renderContent(group, content); bg.disableMorphing = true; if (bg && isHighDownDispatcher(bg)) setAsHighDownDispatcher(bg, false); setAsHighDownDispatcher(group, !isDisabled); data.setItemGraphicEl(thisNode.dataIndex, group); var cursorStyle = nodeModel.getShallow("cursor"); cursorStyle && content.attr("cursor", cursorStyle); enableHoverFocus(group, focusOrIndices, blurScope); } return group; function renderBackground(group, bg, useUpperLabel) { var ecData = getECData(bg); ecData.dataIndex = thisNode.dataIndex; ecData.seriesIndex = seriesModel.seriesIndex; bg.setShape({ x: 0, y: 0, width: thisWidth, height: thisHeight, r: borderRadius }); if (thisInvisible) processInvisible(bg); else { bg.invisible = false; var style = thisNode.getVisual("style"); var visualBorderColor = style.stroke; var normalStyle = getItemStyleNormal(itemStyleNormalModel); normalStyle.fill = visualBorderColor; var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel); emphasisStyle.fill = itemStyleEmphasisModel.get("borderColor"); var blurStyle = getStateItemStyle(itemStyleBlurModel); blurStyle.fill = itemStyleBlurModel.get("borderColor"); var selectStyle = getStateItemStyle(itemStyleSelectModel); selectStyle.fill = itemStyleSelectModel.get("borderColor"); if (useUpperLabel) { var upperLabelWidth = thisWidth - 2 * borderWidth; prepareText(bg, visualBorderColor, style.opacity, { x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight }); } else bg.removeTextContent(); bg.setStyle(normalStyle); bg.ensureState("emphasis").style = emphasisStyle; bg.ensureState("blur").style = blurStyle; bg.ensureState("select").style = selectStyle; setDefaultStateProxy(bg); } group.add(bg); } function renderContent(group, content) { var ecData = getECData(content); ecData.dataIndex = thisNode.dataIndex; ecData.seriesIndex = seriesModel.seriesIndex; var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0); var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0); content.culling = true; content.setShape({ x: borderWidth, y: borderWidth, width: contentWidth, height: contentHeight, r: borderRadius }); if (thisInvisible) processInvisible(content); else { content.invisible = false; var nodeStyle = thisNode.getVisual("style"); var visualColor = nodeStyle.fill; var normalStyle = getItemStyleNormal(itemStyleNormalModel); normalStyle.fill = visualColor; normalStyle.decal = nodeStyle.decal; var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel); var blurStyle = getStateItemStyle(itemStyleBlurModel); var selectStyle = getStateItemStyle(itemStyleSelectModel); prepareText(content, visualColor, nodeStyle.opacity, null); content.setStyle(normalStyle); content.ensureState("emphasis").style = emphasisStyle; content.ensureState("blur").style = blurStyle; content.ensureState("select").style = selectStyle; setDefaultStateProxy(content); } group.add(content); } function processInvisible(element) { !element.invisible && willInvisibleEls.push(element); } function prepareText(rectEl, visualColor, visualOpacity, upperLabelRect) { var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL); var defaultText = convertOptionIdName(nodeModel.get("name"), null); var isShow = normalLabelModel.getShallow("show"); setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), { defaultText: isShow ? defaultText : null, inheritColor: visualColor, defaultOpacity: visualOpacity, labelFetcher: seriesModel, labelDataIndex: thisNode.dataIndex }); var textEl = rectEl.getTextContent(); if (!textEl) return; var textStyle = textEl.style; var textPadding = normalizeCssArray$1(textStyle.padding || 0); if (upperLabelRect) { rectEl.setTextConfig({ layoutRect: upperLabelRect }); textEl.disableLabelLayout = true; } textEl.beforeUpdate = function() { var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0); var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0); if (textStyle.width !== width || textStyle.height !== height) textEl.setStyle({ width, height }); }; textStyle.truncateMinChar = 2; textStyle.lineOverflow = "truncate"; addDrillDownIcon(textStyle, upperLabelRect, thisLayout); var textEmphasisState = textEl.getState("emphasis"); addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout); } function addDrillDownIcon(style, upperLabelRect, thisLayout) { var text = style ? style.text : null; if (!upperLabelRect && thisLayout.isLeafRoot && text != null) { var iconChar = seriesModel.get("drillDownIcon", true); style.text = iconChar ? iconChar + " " + text : text; } } function giveGraphic(storageName, Ctor, depth, z) { var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex]; var lasts = lastsForAnimation[storageName]; if (element) { oldStorage[storageName][oldRawIndex] = null; prepareAnimationWhenHasOld(lasts, element); } else if (!thisInvisible) { element = new Ctor(); if (element instanceof Displayable) element.z2 = calculateZ2(depth, z); prepareAnimationWhenNoOld(lasts, element); } return thisStorage[storageName][thisRawIndex] = element; } function prepareAnimationWhenHasOld(lasts, element) { var lastCfg = lasts[thisRawIndex] = {}; if (element instanceof Group$2) { lastCfg.oldX = element.x; lastCfg.oldY = element.y; } else lastCfg.oldShape = extend({}, element.shape); } function prepareAnimationWhenNoOld(lasts, element) { var lastCfg = lasts[thisRawIndex] = {}; var parentNode = thisNode.parentNode; var isGroup = element instanceof Group$3; if (parentNode && (!reRoot || reRoot.direction === "drillDown")) { var parentOldX = 0; var parentOldY = 0; var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()]; if (!reRoot && parentOldBg && parentOldBg.oldShape) { parentOldX = parentOldBg.oldShape.width; parentOldY = parentOldBg.oldShape.height; } if (isGroup) { lastCfg.oldX = 0; lastCfg.oldY = parentOldY; } else lastCfg.oldShape = { x: parentOldX, y: parentOldY, width: 0, height: 0 }; } lastCfg.fadein = !isGroup; } } function calculateZ2(depth, z2InLevel) { return depth * Z2_BASE + z2InLevel; } //#endregion //#region node_modules/echarts/lib/visual/VisualMapping.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each$8 = each$12; var isObject = isObject$3; var CATEGORY_DEFAULT_VISUAL_INDEX = -1; var VisualMapping = function() { function VisualMapping(option) { var mappingMethod = option.mappingMethod; var visualType = option.type; var thisOption = this.option = clone$4(option); this.type = visualType; this.mappingMethod = mappingMethod; this._normalizeData = normalizers[mappingMethod]; var visualHandler = VisualMapping.visualHandlers[visualType]; this.applyVisual = visualHandler.applyVisual; this.getColorMapper = visualHandler.getColorMapper; this._normalizedToVisual = visualHandler._normalizedToVisual[mappingMethod]; if (mappingMethod === "piecewise") { normalizeVisualRange(thisOption); preprocessForPiecewise(thisOption); } else if (mappingMethod === "category") thisOption.categories ? preprocessForSpecifiedCategory(thisOption) : normalizeVisualRange(thisOption, true); else { assert(mappingMethod !== "linear" || thisOption.dataExtent); normalizeVisualRange(thisOption); } } VisualMapping.prototype.mapValueToVisual = function(value) { var normalized = this._normalizeData(value); return this._normalizedToVisual(normalized, value); }; VisualMapping.prototype.getNormalizer = function() { return bind$1(this._normalizeData, this); }; /** * List available visual types. * * @public * @return {Array.} */ VisualMapping.listVisualTypes = function() { return keys(VisualMapping.visualHandlers); }; /** * @public */ VisualMapping.isValidType = function(visualType) { return VisualMapping.visualHandlers.hasOwnProperty(visualType); }; /** * Convenient method. * Visual can be Object or Array or primary type. */ VisualMapping.eachVisual = function(visual, callback, context) { if (isObject$3(visual)) each$12(visual, callback, context); else callback.call(context, visual); }; VisualMapping.mapVisual = function(visual, callback, context) { var isPrimary; var newVisual = isArray$1(visual) ? [] : isObject$3(visual) ? {} : (isPrimary = true, null); VisualMapping.eachVisual(visual, function(v, key) { var newVal = callback.call(context, v, key); isPrimary ? newVisual = newVal : newVisual[key] = newVal; }); return newVisual; }; /** * Retrieve visual properties from given object. */ VisualMapping.retrieveVisuals = function(obj) { var ret = {}; var hasVisual; obj && each$8(VisualMapping.visualHandlers, function(h, visualType) { if (obj.hasOwnProperty(visualType)) { ret[visualType] = obj[visualType]; hasVisual = true; } }); return hasVisual ? ret : null; }; /** * Give order to visual types, considering colorSaturation, colorAlpha depends on color. * * @public * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...} * IF Array, like: ['color', 'symbol', 'colorSaturation'] * @return {Array.} Sorted visual types. */ VisualMapping.prepareVisualTypes = function(visualTypes) { if (isArray$1(visualTypes)) visualTypes = visualTypes.slice(); else if (isObject(visualTypes)) { var types_1 = []; each$8(visualTypes, function(item, type) { types_1.push(type); }); visualTypes = types_1; } else return []; visualTypes.sort(function(type1, type2) { return type2 === "color" && type1 !== "color" && type1.indexOf("color") === 0 ? 1 : -1; }); return visualTypes; }; /** * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'. * Other visuals are only depends on themself. */ VisualMapping.dependsOn = function(visualType1, visualType2) { return visualType2 === "color" ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2; }; /** * @param value * @param pieceList [{value: ..., interval: [min, max]}, ...] * Always from small to big. * @param findClosestWhenOutside Default to be false * @return index */ VisualMapping.findPieceIndex = function(value, pieceList, findClosestWhenOutside) { var possibleI; var abs = Infinity; for (var i = 0, len = pieceList.length; i < len; i++) { var pieceValue = pieceList[i].value; if (pieceValue != null) { if (pieceValue === value || isString(pieceValue) && pieceValue === value + "") return i; findClosestWhenOutside && updatePossible(pieceValue, i); } } for (var i = 0, len = pieceList.length; i < len; i++) { var piece = pieceList[i]; var interval = piece.interval; var close_1 = piece.close; if (interval) { if (interval[0] === -Infinity) { if (littleThan(close_1[1], value, interval[1])) return i; } else if (interval[1] === Infinity) { if (littleThan(close_1[0], interval[0], value)) return i; } else if (littleThan(close_1[0], interval[0], value) && littleThan(close_1[1], value, interval[1])) return i; findClosestWhenOutside && updatePossible(interval[0], i); findClosestWhenOutside && updatePossible(interval[1], i); } } if (findClosestWhenOutside) return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI; function updatePossible(val, index) { var newAbs = Math.abs(val - value); if (newAbs < abs) { abs = newAbs; possibleI = index; } } }; VisualMapping.visualHandlers = { color: { applyVisual: makeApplyVisual("color"), getColorMapper: function() { var thisOption = this.option; return bind$1(thisOption.mappingMethod === "category" ? function(value, isNormalized) { !isNormalized && (value = this._normalizeData(value)); return doMapCategory.call(this, value); } : function(value, isNormalized, out) { var returnRGBArray = !!out; !isNormalized && (value = this._normalizeData(value)); out = fastLerp(value, thisOption.parsedVisual, out); return returnRGBArray ? out : stringify(out, "rgba"); }, this); }, _normalizedToVisual: { linear: function(normalized) { return stringify(fastLerp(normalized, this.option.parsedVisual), "rgba"); }, category: doMapCategory, piecewise: function(normalized, value) { var result = getSpecifiedVisual.call(this, value); if (result == null) result = stringify(fastLerp(normalized, this.option.parsedVisual), "rgba"); return result; }, fixed: doMapFixed } }, colorHue: makePartialColorVisualHandler(function(color, value) { return modifyHSL(color, value); }), colorSaturation: makePartialColorVisualHandler(function(color, value) { return modifyHSL(color, null, value); }), colorLightness: makePartialColorVisualHandler(function(color, value) { return modifyHSL(color, null, null, value); }), colorAlpha: makePartialColorVisualHandler(function(color, value) { return modifyAlpha(color, value); }), decal: { applyVisual: makeApplyVisual("decal"), _normalizedToVisual: { linear: null, category: doMapCategory, piecewise: null, fixed: null } }, opacity: { applyVisual: makeApplyVisual("opacity"), _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) }, liftZ: { applyVisual: makeApplyVisual("liftZ"), _normalizedToVisual: { linear: doMapFixed, category: doMapFixed, piecewise: doMapFixed, fixed: doMapFixed } }, symbol: { applyVisual: function(value, getter, setter) { setter("symbol", this.mapValueToVisual(value)); }, _normalizedToVisual: { linear: doMapToArray, category: doMapCategory, piecewise: function(normalized, value) { var result = getSpecifiedVisual.call(this, value); if (result == null) result = doMapToArray.call(this, normalized); return result; }, fixed: doMapFixed } }, symbolSize: { applyVisual: makeApplyVisual("symbolSize"), _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) } }; return VisualMapping; }(); function preprocessForPiecewise(thisOption) { var pieceList = thisOption.pieceList; thisOption.hasSpecialVisual = false; each$12(pieceList, function(piece, index) { piece.originIndex = index; if (piece.visual != null) thisOption.hasSpecialVisual = true; }); } function preprocessForSpecifiedCategory(thisOption) { var categories = thisOption.categories; var categoryMap = thisOption.categoryMap = {}; var visual = thisOption.visual; each$8(categories, function(cate, index) { categoryMap[cate] = index; }); if (!isArray$1(visual)) { var visualArr_1 = []; if (isObject$3(visual)) each$8(visual, function(v, cate) { var index = categoryMap[cate]; visualArr_1[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v; }); else visualArr_1[CATEGORY_DEFAULT_VISUAL_INDEX] = visual; visual = setVisualToOption(thisOption, visualArr_1); } for (var i = categories.length - 1; i >= 0; i--) if (visual[i] == null) { delete categoryMap[categories[i]]; categories.pop(); } } function normalizeVisualRange(thisOption, isCategory) { var visual = thisOption.visual; var visualArr = []; if (isObject$3(visual)) each$8(visual, function(v) { visualArr.push(v); }); else if (visual != null) visualArr.push(visual); if (!isCategory && visualArr.length === 1 && !{ color: 1, symbol: 1 }.hasOwnProperty(thisOption.type)) visualArr[1] = visualArr[0]; setVisualToOption(thisOption, visualArr); } function makePartialColorVisualHandler(applyValue) { return { applyVisual: function(value, getter, setter) { var colorChannel = this.mapValueToVisual(value); setter("color", applyValue(getter("color"), colorChannel)); }, _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) }; } function doMapToArray(normalized) { var visual = this.option.visual; return visual[Math.round(linearMap$2(normalized, [0, 1], [0, visual.length - 1], true))] || {}; } function makeApplyVisual(visualType) { return function(value, getter, setter) { setter(visualType, this.mapValueToVisual(value)); }; } function doMapCategory(normalized) { var visual = this.option.visual; return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized]; } function doMapFixed() { return this.option.visual[0]; } /** * Create mapped to numeric visual */ function createNormalizedToNumericVisual(sourceExtent) { return { linear: function(normalized) { return linearMap$2(normalized, sourceExtent, this.option.visual, true); }, category: doMapCategory, piecewise: function(normalized, value) { var result = getSpecifiedVisual.call(this, value); if (result == null) result = linearMap$2(normalized, sourceExtent, this.option.visual, true); return result; }, fixed: doMapFixed }; } function getSpecifiedVisual(value) { var thisOption = this.option; var pieceList = thisOption.pieceList; if (thisOption.hasSpecialVisual) { var piece = pieceList[VisualMapping.findPieceIndex(value, pieceList)]; if (piece && piece.visual) return piece.visual[this.type]; } } function setVisualToOption(thisOption, visualArr) { thisOption.visual = visualArr; if (thisOption.type === "color") thisOption.parsedVisual = map$1(visualArr, function(item) { var color = parse(item); if (!color && true) warn("'" + item + "' is an illegal color, fallback to '#000000'", true); return color || [ 0, 0, 0, 1 ]; }); return visualArr; } /** * Normalizers by mapping methods. */ var normalizers = { linear: function(value) { return linearMap$2(value, this.option.dataExtent, [0, 1], true); }, piecewise: function(value) { var pieceList = this.option.pieceList; var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true); if (pieceIndex != null) return linearMap$2(pieceIndex, [0, pieceList.length - 1], [0, 1], true); }, category: function(value) { var index = this.option.categories ? this.option.categoryMap[value] : value; return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index; }, fixed: noop }; function littleThan(close, a, b) { return close ? a <= b : a < b; } //#endregion //#region node_modules/echarts/lib/chart/treemap/treemapVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ITEM_STYLE_NORMAL = "itemStyle"; var inner$12 = makeInner(); var treemapVisual_default = { seriesType: "treemap", reset: function(seriesModel) { var root = seriesModel.getData().tree.root; if (root.isRemoved()) return; travelTree(root, {}, seriesModel.getViewRoot().getAncestors(), seriesModel); } }; function travelTree(node, designatedVisual, viewRootAncestors, seriesModel) { var nodeModel = node.getModel(); var nodeLayout = node.getLayout(); var data = node.hostTree.data; if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) return; var nodeItemStyleModel = nodeModel.getModel(ITEM_STYLE_NORMAL); var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel); var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, "style"); var borderColor = nodeItemStyleModel.get("borderColor"); var borderColorSaturation = nodeItemStyleModel.get("borderColorSaturation"); var thisNodeColor; if (borderColorSaturation != null) { thisNodeColor = calculateColor(visuals); borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor); } existsStyle.stroke = borderColor; var viewChildren = node.viewChildren; if (!viewChildren || !viewChildren.length) { thisNodeColor = calculateColor(visuals); existsStyle.fill = thisNodeColor; } else { var mapping_1 = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); each$12(viewChildren, function(child, index) { if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) travelTree(child, mapVisual$1(nodeModel, visuals, child, index, mapping_1, seriesModel), viewRootAncestors, seriesModel); }); } } function buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) { var visuals = extend({}, designatedVisual); var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle; each$12([ "color", "colorAlpha", "colorSaturation" ], function(visualName) { designatedVisualItemStyle[visualName] = designatedVisual[visualName]; var val = nodeItemStyleModel.get(visualName); designatedVisualItemStyle[visualName] = null; val != null && (visuals[visualName] = val); }); return visuals; } function calculateColor(visuals) { var color = getValueVisualDefine(visuals, "color"); if (color) { var colorAlpha = getValueVisualDefine(visuals, "colorAlpha"); var colorSaturation = getValueVisualDefine(visuals, "colorSaturation"); if (colorSaturation) color = modifyHSL(color, null, null, colorSaturation); if (colorAlpha) color = modifyAlpha(color, colorAlpha); return color; } } function calculateBorderColor(borderColorSaturation, thisNodeColor) { return thisNodeColor != null ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null; } function getValueVisualDefine(visuals, name) { var value = visuals[name]; if (value != null && value !== "none") return value; } function buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) { if (!viewChildren || !viewChildren.length) return; var rangeVisual = getRangeVisual(nodeModel, "color") || visuals.color != null && visuals.color !== "none" && (getRangeVisual(nodeModel, "colorAlpha") || getRangeVisual(nodeModel, "colorSaturation")); if (!rangeVisual) return; var visualMin = nodeModel.get("visualMin"); var visualMax = nodeModel.get("visualMax"); var dataExtent = nodeLayout.dataExtent.slice(); visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin); visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax); var colorMappingBy = nodeModel.get("colorMappingBy"); var opt = { type: rangeVisual.name, dataExtent, visual: rangeVisual.range }; if (opt.type === "color" && (colorMappingBy === "index" || colorMappingBy === "id")) { opt.mappingMethod = "category"; opt.loop = true; } else opt.mappingMethod = "linear"; var mapping = new VisualMapping(opt); inner$12(mapping).drColorMappingBy = colorMappingBy; return mapping; } function getRangeVisual(nodeModel, name) { var range = nodeModel.get(name); return isArray$1(range) && range.length ? { name, range } : null; } function mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) { var childVisuals = extend({}, visuals); if (mapping) { var mappingType = mapping.type; var colorMappingBy = mappingType === "color" && inner$12(mapping).drColorMappingBy; var value = colorMappingBy === "index" ? index : colorMappingBy === "id" ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get("visualDimension")); childVisuals[mappingType] = mapping.mapValueToVisual(value); } return childVisuals; } //#endregion //#region node_modules/echarts/lib/chart/treemap/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$45(registers) { registers.registerSeriesModel(TreemapSeriesModel); registers.registerChartView(TreemapView); registers.registerVisual(treemapVisual_default); registers.registerLayout(treemapLayout_default); installTreemapAction(registers); } //#endregion //#region node_modules/echarts/lib/data/Graph.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function generateNodeKey(id) { return "_EC_" + id; } var Graph = function() { function Graph(directed) { this.type = "graph"; this.nodes = []; this.edges = []; this._nodesMap = {}; /** * @type {Object.} * @private */ this._edgesMap = {}; this._directed = directed || false; } /** * If is directed graph */ Graph.prototype.isDirected = function() { return this._directed; }; /** * Add a new node */ Graph.prototype.addNode = function(id, dataIndex) { id = id == null ? "" + dataIndex : "" + id; var nodesMap = this._nodesMap; if (nodesMap[generateNodeKey(id)]) { console.error("Graph nodes have duplicate name or id"); return; } var node = new GraphNode(id, dataIndex); node.hostGraph = this; this.nodes.push(node); nodesMap[generateNodeKey(id)] = node; return node; }; /** * Get node by data index */ Graph.prototype.getNodeByIndex = function(dataIndex) { var rawIdx = this.data.getRawIndex(dataIndex); return this.nodes[rawIdx]; }; /** * Get node by id */ Graph.prototype.getNodeById = function(id) { return this._nodesMap[generateNodeKey(id)]; }; /** * Add a new edge */ Graph.prototype.addEdge = function(n1, n2, dataIndex) { var nodesMap = this._nodesMap; var edgesMap = this._edgesMap; if (isNumber(n1)) n1 = this.nodes[n1]; if (isNumber(n2)) n2 = this.nodes[n2]; if (!(n1 instanceof GraphNode)) n1 = nodesMap[generateNodeKey(n1)]; if (!(n2 instanceof GraphNode)) n2 = nodesMap[generateNodeKey(n2)]; if (!n1 || !n2) return; var key = n1.id + "-" + n2.id; var edge = new GraphEdge(n1, n2, dataIndex); edge.hostGraph = this; if (this._directed) { n1.outEdges.push(edge); n2.inEdges.push(edge); } n1.edges.push(edge); if (n1 !== n2) n2.edges.push(edge); this.edges.push(edge); edgesMap[key] = edge; return edge; }; /** * Get edge by data index */ Graph.prototype.getEdgeByIndex = function(dataIndex) { var rawIdx = this.edgeData.getRawIndex(dataIndex); return this.edges[rawIdx]; }; /** * Get edge by two linked nodes */ Graph.prototype.getEdge = function(n1, n2) { if (n1 instanceof GraphNode) n1 = n1.id; if (n2 instanceof GraphNode) n2 = n2.id; var edgesMap = this._edgesMap; if (this._directed) return edgesMap[n1 + "-" + n2]; else return edgesMap[n1 + "-" + n2] || edgesMap[n2 + "-" + n1]; }; /** * Iterate all nodes */ Graph.prototype.eachNode = function(cb, context) { var nodes = this.nodes; var len = nodes.length; for (var i = 0; i < len; i++) if (nodes[i].dataIndex >= 0) cb.call(context, nodes[i], i); }; /** * Iterate all edges */ Graph.prototype.eachEdge = function(cb, context) { var edges = this.edges; var len = edges.length; for (var i = 0; i < len; i++) if (edges[i].dataIndex >= 0 && edges[i].node1.dataIndex >= 0 && edges[i].node2.dataIndex >= 0) cb.call(context, edges[i], i); }; /** * Breadth first traverse * Return true to stop traversing */ Graph.prototype.breadthFirstTraverse = function(cb, startNode, direction, context) { if (!(startNode instanceof GraphNode)) startNode = this._nodesMap[generateNodeKey(startNode)]; if (!startNode) return; var edgeType = direction === "out" ? "outEdges" : direction === "in" ? "inEdges" : "edges"; for (var i = 0; i < this.nodes.length; i++) this.nodes[i].__visited = false; if (cb.call(context, startNode, null)) return; var queue = [startNode]; while (queue.length) { var currentNode = queue.shift(); var edges = currentNode[edgeType]; for (var i = 0; i < edges.length; i++) { var e = edges[i]; var otherNode = e.node1 === currentNode ? e.node2 : e.node1; if (!otherNode.__visited) { if (cb.call(context, otherNode, currentNode)) return; queue.push(otherNode); otherNode.__visited = true; } } } }; Graph.prototype.update = function() { var data = this.data; var edgeData = this.edgeData; var nodes = this.nodes; var edges = this.edges; for (var i = 0, len = nodes.length; i < len; i++) nodes[i].dataIndex = -1; for (var i = 0, len = data.count(); i < len; i++) nodes[data.getRawIndex(i)].dataIndex = i; edgeData.filterSelf(function(idx) { var edge = edges[edgeData.getRawIndex(idx)]; return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0; }); for (var i = 0, len = edges.length; i < len; i++) edges[i].dataIndex = -1; for (var i = 0, len = edgeData.count(); i < len; i++) edges[edgeData.getRawIndex(i)].dataIndex = i; }; /** * @return {module:echarts/data/Graph} */ Graph.prototype.clone = function() { var graph = new Graph(this._directed); var nodes = this.nodes; var edges = this.edges; for (var i = 0; i < nodes.length; i++) graph.addNode(nodes[i].id, nodes[i].dataIndex); for (var i = 0; i < edges.length; i++) { var e = edges[i]; graph.addEdge(e.node1.id, e.node2.id, e.dataIndex); } return graph; }; return Graph; }(); var GraphNode = function() { function GraphNode(id, dataIndex) { this.inEdges = []; this.outEdges = []; this.edges = []; this.dataIndex = -1; this.id = id == null ? "" : id; this.dataIndex = dataIndex == null ? -1 : dataIndex; } /** * @return {number} */ GraphNode.prototype.degree = function() { return this.edges.length; }; /** * @return {number} */ GraphNode.prototype.inDegree = function() { return this.inEdges.length; }; /** * @return {number} */ GraphNode.prototype.outDegree = function() { return this.outEdges.length; }; GraphNode.prototype.getModel = function(path) { if (this.dataIndex < 0) return; return this.hostGraph.data.getItemModel(this.dataIndex).getModel(path); }; GraphNode.prototype.getAdjacentDataIndices = function() { var dataIndices = { edge: [], node: [] }; for (var i = 0; i < this.edges.length; i++) { var adjacentEdge = this.edges[i]; if (adjacentEdge.dataIndex < 0) continue; dataIndices.edge.push(adjacentEdge.dataIndex); dataIndices.node.push(adjacentEdge.node1.dataIndex, adjacentEdge.node2.dataIndex); } return dataIndices; }; GraphNode.prototype.getTrajectoryDataIndices = function() { var connectedEdgesMap = createHashMap(); var connectedNodesMap = createHashMap(); for (var i = 0, len = this.edges.length; i < len; i++) { var adjacentEdge = this.edges[i]; if (adjacentEdge.dataIndex < 0) continue; connectedEdgesMap.set(adjacentEdge.dataIndex, true); var sourceNodesQueue = [adjacentEdge.node1]; var targetNodesQueue = [adjacentEdge.node2]; var nodeIteratorIndex = 0; while (nodeIteratorIndex < sourceNodesQueue.length) { var sourceNode = sourceNodesQueue[nodeIteratorIndex]; nodeIteratorIndex++; connectedNodesMap.set(sourceNode.dataIndex, true); var sourceNodeInEdges = sourceNode.inEdges; for (var j = 0, len_1 = sourceNodeInEdges.length, inEdge = void 0, inEdgeDataIndex = void 0; j < len_1; j++) { inEdge = sourceNodeInEdges[j]; inEdgeDataIndex = inEdge.dataIndex; if (inEdgeDataIndex >= 0 && !connectedEdgesMap.hasKey(inEdgeDataIndex)) { connectedEdgesMap.set(inEdgeDataIndex, true); sourceNodesQueue.push(inEdge.node1); } } } nodeIteratorIndex = 0; while (nodeIteratorIndex < targetNodesQueue.length) { var targetNode = targetNodesQueue[nodeIteratorIndex]; nodeIteratorIndex++; connectedNodesMap.set(targetNode.dataIndex, true); var targetNodeOutEdges = targetNode.outEdges; for (var j = 0, len_2 = targetNodeOutEdges.length, outEdge = void 0, outEdgeDataIndex = void 0; j < len_2; j++) { outEdge = targetNodeOutEdges[j]; outEdgeDataIndex = outEdge.dataIndex; if (outEdgeDataIndex >= 0 && !connectedEdgesMap.hasKey(outEdgeDataIndex)) { connectedEdgesMap.set(outEdgeDataIndex, true); targetNodesQueue.push(outEdge.node2); } } } } return { edge: connectedEdgesMap.keys(), node: connectedNodesMap.keys() }; }; return GraphNode; }(); var GraphEdge = function() { function GraphEdge(n1, n2, dataIndex) { this.dataIndex = -1; this.node1 = n1; this.node2 = n2; this.dataIndex = dataIndex == null ? -1 : dataIndex; } GraphEdge.prototype.getModel = function(path) { if (this.dataIndex < 0) return; return this.hostGraph.edgeData.getItemModel(this.dataIndex).getModel(path); }; GraphEdge.prototype.getAdjacentDataIndices = function() { return { edge: [this.dataIndex], node: [this.node1.dataIndex, this.node2.dataIndex] }; }; GraphEdge.prototype.getTrajectoryDataIndices = function() { var connectedEdgesMap = createHashMap(); var connectedNodesMap = createHashMap(); connectedEdgesMap.set(this.dataIndex, true); var sourceNodes = [this.node1]; var targetNodes = [this.node2]; var nodeIteratorIndex = 0; while (nodeIteratorIndex < sourceNodes.length) { var sourceNode = sourceNodes[nodeIteratorIndex]; nodeIteratorIndex++; connectedNodesMap.set(sourceNode.dataIndex, true); var sourceNodeInEdges = sourceNode.inEdges; for (var j = 0, len = sourceNodeInEdges.length, inEdge = void 0, inEdgeDataIndex = void 0; j < len; j++) { inEdge = sourceNode.inEdges[j]; inEdgeDataIndex = inEdge.dataIndex; if (inEdgeDataIndex >= 0 && !connectedEdgesMap.hasKey(inEdgeDataIndex)) { connectedEdgesMap.set(inEdgeDataIndex, true); sourceNodes.push(inEdge.node1); } } } nodeIteratorIndex = 0; while (nodeIteratorIndex < targetNodes.length) { var targetNode = targetNodes[nodeIteratorIndex]; nodeIteratorIndex++; connectedNodesMap.set(targetNode.dataIndex, true); var targetNodeOutEdges = targetNode.outEdges; for (var j = 0, len = targetNodeOutEdges.length, outEdge = void 0, outEdgeDataIndex = void 0; j < len; j++) { outEdge = targetNode.outEdges[j]; outEdgeDataIndex = outEdge.dataIndex; if (outEdgeDataIndex >= 0 && !connectedEdgesMap.hasKey(outEdgeDataIndex)) { connectedEdgesMap.set(outEdgeDataIndex, true); targetNodes.push(outEdge.node2); } } } return { edge: connectedEdgesMap.keys(), node: connectedNodesMap.keys() }; }; return GraphEdge; }(); function createGraphDataProxyMixin(hostName, dataName) { return { /** * @param Default 'value'. can be 'a', 'b', 'c', 'd', 'e'. */ getValue: function(dimension) { var data = this[hostName][dataName]; return data.getStore().get(data.getDimensionIndex(dimension || "value"), this.dataIndex); }, setVisual: function(key, value) { this.dataIndex >= 0 && this[hostName][dataName].setItemVisual(this.dataIndex, key, value); }, getVisual: function(key) { return this[hostName][dataName].getItemVisual(this.dataIndex, key); }, setLayout: function(layout, merge) { this.dataIndex >= 0 && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge); }, getLayout: function() { return this[hostName][dataName].getItemLayout(this.dataIndex); }, getGraphicEl: function() { return this[hostName][dataName].getItemGraphicEl(this.dataIndex); }, getRawIndex: function() { return this[hostName][dataName].getRawIndex(this.dataIndex); } }; } mixin(GraphNode, createGraphDataProxyMixin("hostGraph", "data")); mixin(GraphEdge, createGraphDataProxyMixin("hostGraph", "edgeData")); //#endregion //#region node_modules/echarts/lib/chart/helper/createGraphFromNodeEdge.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function createGraphFromNodeEdge(nodes, edges, seriesModel, directed, beforeLink) { var graph = new Graph(directed); for (var i = 0; i < nodes.length; i++) graph.addNode(retrieve(nodes[i].id, nodes[i].name, i), i); var linkNameList = []; var validEdges = []; var linkCount = 0; for (var i = 0; i < edges.length; i++) { var link = edges[i]; var source = link.source; var target = link.target; if (graph.addEdge(source, target, linkCount)) { validEdges.push(link); linkNameList.push(retrieve(convertOptionIdName(link.id, null), source + " > " + target)); linkCount++; } } var coordSys = seriesModel.get("coordinateSystem"); var nodeData; if (coordSys === "cartesian2d" || coordSys === "polar" || coordSys === "matrix") nodeData = createSeriesData(nodes, seriesModel); else { var coordSysCtor = CoordinateSystemManager.get(coordSys); var coordDimensions = coordSysCtor ? coordSysCtor.dimensions || [] : []; if (indexOf(coordDimensions, "value") < 0) coordDimensions.concat(["value"]); var dimensions = prepareSeriesDataSchema(nodes, { coordDimensions, encodeDefine: seriesModel.getEncode() }).dimensions; nodeData = new SeriesData(dimensions, seriesModel); nodeData.initData(nodes); } var edgeData = new SeriesData(["value"], seriesModel); edgeData.initData(validEdges, linkNameList); beforeLink && beforeLink(nodeData, edgeData); linkSeriesData({ mainData: nodeData, struct: graph, structAttr: "graph", datas: { node: nodeData, edge: edgeData }, datasAttr: { node: "data", edge: "edgeData" } }); graph.update(); return graph; } //#endregion //#region node_modules/echarts/lib/chart/helper/multipleGraphEdgeHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var KEY_DELIMITER = "-->"; /** * params handler * @param {module:echarts/model/SeriesModel} seriesModel * @returns {*} */ var getAutoCurvenessParams = function(seriesModel) { return seriesModel.get("autoCurveness") || null; }; /** * Generate a list of edge curvatures, 20 is the default * @param {module:echarts/model/SeriesModel} seriesModel * @param {number} appendLength * @return 20 => [0, -0.2, 0.2, -0.4, 0.4, -0.6, 0.6, -0.8, 0.8, -1, 1, -1.2, 1.2, -1.4, 1.4, -1.6, 1.6, -1.8, 1.8, -2] */ var createCurveness = function(seriesModel, appendLength) { var autoCurvenessParmas = getAutoCurvenessParams(seriesModel); var length = 20; var curvenessList = []; if (isNumber(autoCurvenessParmas)) length = autoCurvenessParmas; else if (isArray$1(autoCurvenessParmas)) { seriesModel.__curvenessList = autoCurvenessParmas; return; } if (appendLength > length) length = appendLength; var len = length % 2 ? length + 2 : length + 3; curvenessList = []; for (var i = 0; i < len; i++) curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1)); seriesModel.__curvenessList = curvenessList; }; /** * Create different cache key data in the positive and negative directions, in order to set the curvature later * @param {number|string|module:echarts/data/Graph.Node} n1 * @param {number|string|module:echarts/data/Graph.Node} n2 * @param {module:echarts/model/SeriesModel} seriesModel * @returns {string} key */ var getKeyOfEdges = function(n1, n2, seriesModel) { var source = [n1.id, n1.dataIndex].join("."); var target = [n2.id, n2.dataIndex].join("."); return [ seriesModel.uid, source, target ].join(KEY_DELIMITER); }; /** * get opposite key * @param {string} key * @returns {string} */ var getOppositeKey = function(key) { var keys = key.split(KEY_DELIMITER); return [ keys[0], keys[2], keys[1] ].join(KEY_DELIMITER); }; /** * get edgeMap with key * @param edge * @param {module:echarts/model/SeriesModel} seriesModel */ var getEdgeFromMap = function(edge, seriesModel) { var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel); return seriesModel.__edgeMap[key]; }; /** * calculate all cases total length * @param edge * @param seriesModel * @returns {number} */ var getTotalLengthBetweenNodes = function(edge, seriesModel) { return getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel) + getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel); }; /** * * @param key */ var getEdgeMapLengthWithKey = function(key, seriesModel) { var edgeMap = seriesModel.__edgeMap; return edgeMap[key] ? edgeMap[key].length : 0; }; /** * Count the number of edges between the same two points, used to obtain the curvature table and the parity of the edge * @see /graph/GraphSeries.js@getInitialData * @param {module:echarts/model/SeriesModel} seriesModel */ function initCurvenessList(seriesModel) { if (!getAutoCurvenessParams(seriesModel)) return; seriesModel.__curvenessList = []; seriesModel.__edgeMap = {}; createCurveness(seriesModel); } /** * set edgeMap with key * @param {number|string|module:echarts/data/Graph.Node} n1 * @param {number|string|module:echarts/data/Graph.Node} n2 * @param {module:echarts/model/SeriesModel} seriesModel * @param {number} index */ function createEdgeMapForCurveness(n1, n2, seriesModel, index) { if (!getAutoCurvenessParams(seriesModel)) return; var key = getKeyOfEdges(n1, n2, seriesModel); var edgeMap = seriesModel.__edgeMap; var oppositeEdges = edgeMap[getOppositeKey(key)]; if (edgeMap[key] && !oppositeEdges) edgeMap[key].isForward = true; else if (oppositeEdges && edgeMap[key]) { oppositeEdges.isForward = true; edgeMap[key].isForward = false; } edgeMap[key] = edgeMap[key] || []; edgeMap[key].push(index); } /** * get curvature for edge * @param edge * @param {module:echarts/model/SeriesModel} seriesModel * @param index */ function getCurvenessForEdge(edge, seriesModel, index, needReverse) { var autoCurvenessParams = getAutoCurvenessParams(seriesModel); var isArrayParam = isArray$1(autoCurvenessParams); if (!autoCurvenessParams) return null; var edgeArray = getEdgeFromMap(edge, seriesModel); if (!edgeArray) return null; var edgeIndex = -1; for (var i = 0; i < edgeArray.length; i++) if (edgeArray[i] === index) { edgeIndex = i; break; } var totalLen = getTotalLengthBetweenNodes(edge, seriesModel); createCurveness(seriesModel, totalLen); edge.lineStyle = edge.lineStyle || {}; var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel); var curvenessList = seriesModel.__curvenessList; var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1; if (!edgeArray.isForward) { var len = getEdgeMapLengthWithKey(getOppositeKey(curKey), seriesModel); var resValue = curvenessList[edgeIndex + len + parityCorrection]; if (needReverse) { if (isArrayParam) { if (autoCurvenessParams && autoCurvenessParams[0] === 0) return (len + parityCorrection) % 2 ? resValue : -resValue; else return ((len % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue; } else return (len + parityCorrection) % 2 ? resValue : -resValue; } else return curvenessList[edgeIndex + len + parityCorrection]; } else return curvenessList[parityCorrection + edgeIndex]; } //#endregion //#region node_modules/echarts/lib/chart/graph/GraphSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_GRAPH = "graph"; var GraphSeriesModel = function(_super) { __extends(GraphSeriesModel, _super); function GraphSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GraphSeriesModel.type; _this.hasSymbolVisual = true; return _this; } GraphSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); var self = this; function getCategoriesData() { return self._categoriesData; } this.legendVisualProvider = new LegendVisualProvider(getCategoriesData, getCategoriesData); this.fillDataTextStyle(option.edges || option.links); this._updateCategoriesData(); }; GraphSeriesModel.prototype.mergeOption = function(option) { _super.prototype.mergeOption.apply(this, arguments); this.fillDataTextStyle(option.edges || option.links); this._updateCategoriesData(); }; GraphSeriesModel.prototype.mergeDefaultAndTheme = function(option) { _super.prototype.mergeDefaultAndTheme.apply(this, arguments); defaultEmphasis(option, "edgeLabel", ["show"]); }; GraphSeriesModel.prototype.getInitialData = function(option, ecModel) { var edges = option.edges || option.links || []; var nodes = option.data || option.nodes || []; var self = this; if (nodes && edges) { initCurvenessList(this); var graph = createGraphFromNodeEdge(nodes, edges, this, true, beforeLink); each$12(graph.edges, function(edge) { createEdgeMapForCurveness(edge.node1, edge.node2, this, edge.dataIndex); }, this); return graph.data; } function beforeLink(nodeData, edgeData) { nodeData.wrapMethod("getItemModel", function(model) { var categoryModel = self._categoriesModels[model.getShallow("category")]; if (categoryModel) { categoryModel.parentModel = model.parentModel; model.parentModel = categoryModel; } return model; }); var oldGetModel = Model.prototype.getModel; function newGetModel(path, parentModel) { var model = oldGetModel.call(this, path, parentModel); model.resolveParentPath = resolveParentPath; return model; } edgeData.wrapMethod("getItemModel", function(model) { model.resolveParentPath = resolveParentPath; model.getModel = newGetModel; return model; }); function resolveParentPath(pathArr) { if (pathArr && (pathArr[0] === "label" || pathArr[1] === "label")) { var newPathArr = pathArr.slice(); if (pathArr[0] === "label") newPathArr[0] = "edgeLabel"; else if (pathArr[1] === "label") newPathArr[1] = "edgeLabel"; return newPathArr; } return pathArr; } } }; GraphSeriesModel.prototype.getGraph = function() { return this.getData().graph; }; GraphSeriesModel.prototype.getEdgeData = function() { return this.getGraph().edgeData; }; GraphSeriesModel.prototype.getCategoriesData = function() { return this._categoriesData; }; GraphSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { if (dataType === "edge") { var nodeData = this.getData(); var params = this.getDataParams(dataIndex, dataType); var edge = nodeData.graph.getEdgeByIndex(dataIndex); var sourceName = nodeData.getName(edge.node1.dataIndex); var targetName = nodeData.getName(edge.node2.dataIndex); var nameArr = []; sourceName != null && nameArr.push(sourceName); targetName != null && nameArr.push(targetName); return createTooltipMarkup("nameValue", { name: nameArr.join(" > "), value: params.value, noValue: params.value == null }); } return defaultSeriesFormatTooltip({ series: this, dataIndex, multipleSeries }); }; GraphSeriesModel.prototype._updateCategoriesData = function() { var categories = map$1(this.option.categories || [], function(category) { return category.value != null ? category : extend({ value: 0 }, category); }); var categoriesData = new SeriesData(["value"], this); categoriesData.initData(categories); this._categoriesData = categoriesData; this._categoriesModels = categoriesData.mapArray(function(idx) { return categoriesData.getItemModel(idx); }); }; GraphSeriesModel.prototype.isAnimationEnabled = function() { return _super.prototype.isAnimationEnabled.call(this) && !(this.get("layout") === "force" && this.get(["force", "layoutAnimation"])); }; GraphSeriesModel.prototype.__ownRoamView = function() { var coordSys = this.coordinateSystem; return isViewCoordSys(coordSys) && coordSys; }; GraphSeriesModel.type = "series." + SERIES_TYPE_GRAPH; GraphSeriesModel.dependencies = [ "grid", "polar", "geo", "singleAxis", "calendar" ]; GraphSeriesModel.defaultOption = { z: 2, coordinateSystem: "view", legendHoverLink: true, layout: null, circular: { rotateLabel: false }, force: { initLayout: null, repulsion: [0, 50], gravity: .1, friction: .6, edgeLength: 30, layoutAnimation: true }, left: "center", top: "center", symbol: "circle", symbolSize: 10, edgeSymbol: ["none", "none"], edgeSymbolSize: 10, edgeLabel: { position: "middle", distance: 5 }, draggable: false, roam: false, center: null, zoom: 1, nodeScaleRatio: .6, label: { show: false, formatter: "{b}" }, itemStyle: {}, lineStyle: { color: tokens.color.neutral50, width: 1, opacity: .5 }, emphasis: { scale: true, label: { show: true } }, select: { itemStyle: { borderColor: tokens.color.primary } } }; return GraphSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/graph/edgeVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function normalize$1(a) { if (!(a instanceof Array)) a = [a, a]; return a; } var graphEdgeVisualStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, graphEdgeVisual); function graphEdgeVisual(ecModel) { ecModel.eachSeriesByType(SERIES_TYPE_GRAPH, function(seriesModel) { var graph = seriesModel.getGraph(); var edgeData = seriesModel.getEdgeData(); var symbolType = normalize$1(seriesModel.get("edgeSymbol")); var symbolSize = normalize$1(seriesModel.get("edgeSymbolSize")); edgeData.setVisual("fromSymbol", symbolType && symbolType[0]); edgeData.setVisual("toSymbol", symbolType && symbolType[1]); edgeData.setVisual("fromSymbolSize", symbolSize && symbolSize[0]); edgeData.setVisual("toSymbolSize", symbolSize && symbolSize[1]); edgeData.setVisual("style", seriesModel.getModel("lineStyle").getLineStyle()); edgeData.each(function(idx) { var itemModel = edgeData.getItemModel(idx); var edge = graph.getEdgeByIndex(idx); var symbolType = normalize$1(itemModel.getShallow("symbol", true)); var symbolSize = normalize$1(itemModel.getShallow("symbolSize", true)); var style = itemModel.getModel("lineStyle").getLineStyle(); var existsStyle = edgeData.ensureUniqueItemVisual(idx, "style"); extend(existsStyle, style); switch (existsStyle.stroke) { case "source": var nodeStyle = edge.node1.getVisual("style"); existsStyle.stroke = nodeStyle && nodeStyle.fill; break; case "target": var nodeStyle = edge.node2.getVisual("style"); existsStyle.stroke = nodeStyle && nodeStyle.fill; } symbolType[0] && edge.setVisual("fromSymbol", symbolType[0]); symbolType[1] && edge.setVisual("toSymbol", symbolType[1]); symbolSize[0] && edge.setVisual("fromSymbolSize", symbolSize[0]); symbolSize[1] && edge.setVisual("toSymbolSize", symbolSize[1]); }); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/simpleLayoutHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function simpleLayout(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.type !== "view") return; var graph = seriesModel.getGraph(); graph.eachNode(function(node) { var model = node.getModel(); node.setLayout([+model.get("x"), +model.get("y")]); }); simpleLayoutEdge(graph, seriesModel); } function simpleLayoutEdge(graph, seriesModel) { graph.eachEdge(function(edge, index) { var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), -getCurvenessForEdge(edge, seriesModel, index, true), 0); var p1 = clone$3(edge.node1.getLayout()); var p2 = clone$3(edge.node2.getLayout()); var points = [p1, p2]; if (+curveness) points.push([(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness]); edge.setLayout(points); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/simpleLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphSimpleLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, graphSimpleLayout); function graphSimpleLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_GRAPH, function(seriesModel) { var layout = seriesModel.get("layout"); var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.type !== "view") { var data_1 = seriesModel.getData(); var dimensions_1 = []; each$12(coordSys.dimensions, function(coordDim) { dimensions_1 = dimensions_1.concat(data_1.mapDimensionsAll(coordDim)); }); for (var dataIndex = 0; dataIndex < data_1.count(); dataIndex++) { var value = []; var hasValue = false; for (var i = 0; i < dimensions_1.length; i++) { var val = data_1.get(dimensions_1[i], dataIndex); if (!isNaN(val)) hasValue = true; value.push(val); } if (hasValue) data_1.setItemLayout(dataIndex, coordSys.dataToPoint(value)); else data_1.setItemLayout(dataIndex, [NaN, NaN]); } simpleLayoutEdge(data_1.graph, seriesModel); } else if (!layout || layout === "none") simpleLayout(seriesModel); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/graphHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getNodeGlobalScale(seriesModel) { var coordSys = seriesModel.coordinateSystem; return isViewCoordSys(coordSys) ? calcCompensationScaleToPreserveNodeSize(coordSys, seriesModel) : 1; } function getSymbolSize(node) { var symbolSize = node.getVisual("symbolSize"); if (symbolSize instanceof Array) symbolSize = (symbolSize[0] + symbolSize[1]) / 2; return +symbolSize; } //#endregion //#region node_modules/echarts/lib/chart/graph/circularLayoutHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI$1 = Math.PI; var _symbolRadiansHalf = []; /** * `basedOn` can be: * 'value': * This layout is not accurate and have same bad case. For example, * if the min value is very smaller than the max value, the nodes * with the min value probably overlap even though there is enough * space to layout them. So we only use this approach in the as the * init layout of the force layout. * FIXME * Probably we do not need this method any more but use * `basedOn: 'symbolSize'` in force layout if * delay its init operations to GraphView. * 'symbolSize': * This approach work only if all of the symbol size calculated. * That is, the progressive rendering is not applied to graph. * FIXME * If progressive rendering is applied to graph some day, * probably we have to use `basedOn: 'value'`. */ function circularLayout(seriesModel, basedOn, draggingNode, pointer) { var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.type !== "view") return; var rect = coordSys.getBoundingRect(); var nodeData = seriesModel.getData(); var graph = nodeData.graph; var cx = rect.width / 2 + rect.x; var cy = rect.height / 2 + rect.y; var r = Math.min(rect.width, rect.height) / 2; var count = nodeData.count(); nodeData.setLayout({ cx, cy }); if (!count) return; if (draggingNode) { var _a = coordSys.pointToData(pointer), tempX = _a[0], tempY = _a[1]; var v = [tempX - cx, tempY - cy]; normalize$2(v, v); scale$1(v, v, r); draggingNode.setLayout([cx + v[0], cy + v[1]], true); rotateNodeLabel(draggingNode, seriesModel.get(["circular", "rotateLabel"]), cx, cy); } _layoutNodesBasedOn[basedOn](seriesModel, graph, nodeData, r, cx, cy, count); graph.eachEdge(function(edge, index) { var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), getCurvenessForEdge(edge, seriesModel, index), 0); var p1 = clone$3(edge.node1.getLayout()); var p2 = clone$3(edge.node2.getLayout()); var cp1; var x12 = (p1[0] + p2[0]) / 2; var y12 = (p1[1] + p2[1]) / 2; if (+curveness) { curveness *= 3; cp1 = [cx * curveness + x12 * (1 - curveness), cy * curveness + y12 * (1 - curveness)]; } edge.setLayout([ p1, p2, cp1 ]); }); } var _layoutNodesBasedOn = { value: function(seriesModel, graph, nodeData, r, cx, cy, count) { var angle = 0; var sum = nodeData.getSum("value"); var unitAngle = Math.PI * 2 / (sum || count); graph.eachNode(function(node) { var value = node.getValue("value"); var radianHalf = unitAngle * (sum ? value : 1) / 2; angle += radianHalf; node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]); angle += radianHalf; }); }, symbolSize: function(seriesModel, graph, nodeData, r, cx, cy, count) { var sumRadian = 0; _symbolRadiansHalf.length = count; var nodeScale = getNodeGlobalScale(seriesModel); graph.eachNode(function(node) { var symbolSize = getSymbolSize(node); isNaN(symbolSize) && (symbolSize = 2); symbolSize < 0 && (symbolSize = 0); symbolSize *= nodeScale; var symbolRadianHalf = Math.asin(symbolSize / 2 / r); isNaN(symbolRadianHalf) && (symbolRadianHalf = PI$1 / 2); _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf; sumRadian += symbolRadianHalf * 2; }); var halfRemainRadian = (2 * PI$1 - sumRadian) / count / 2; var angle = 0; graph.eachNode(function(node) { var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex]; angle += radianHalf; (!node.getLayout() || !node.getLayout().fixed) && node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]); angle += radianHalf; }); } }; function rotateNodeLabel(node, circularRotateLabel, cx, cy) { var el = node.getGraphicEl(); if (!el) return; var labelRotate = node.getModel().get(["label", "rotate"]) || 0; var symbolPath = el.getSymbolPath(); if (circularRotateLabel) { var pos = node.getLayout(); var rad = Math.atan2(pos[1] - cy, pos[0] - cx); if (rad < 0) rad = Math.PI * 2 + rad; var isLeft = pos[0] < cx; if (isLeft) rad = rad - Math.PI; var textPosition = isLeft ? "left" : "right"; symbolPath.setTextConfig({ rotation: -rad, position: textPosition, origin: "center" }); var emphasisState = symbolPath.ensureState("emphasis"); extend(emphasisState.textConfig || (emphasisState.textConfig = {}), { position: textPosition }); } else symbolPath.setTextConfig({ rotation: labelRotate *= Math.PI / 180 }); } //#endregion //#region node_modules/echarts/lib/chart/graph/circularLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphCircularLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, graphCircularLayout); function graphCircularLayout(ecModel) { ecModel.eachSeriesByType("graph", function(seriesModel) { if (seriesModel.get("layout") === "circular") circularLayout(seriesModel, "symbolSize"); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/forceHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var scaleAndAdd = scaleAndAdd$1; function forceLayout(inNodes, inEdges, opts) { var nodes = inNodes; var edges = inEdges; var rect = opts.rect; var width = rect.width; var height = rect.height; var center = [rect.x + width / 2, rect.y + height / 2]; var gravity = opts.gravity == null ? .1 : opts.gravity; for (var i = 0; i < nodes.length; i++) { var n = nodes[i]; if (!n.p) n.p = create$2(width * (Math.random() - .5) + center[0], height * (Math.random() - .5) + center[1]); n.pp = clone$3(n.p); n.edges = null; } var initialFriction = opts.friction == null ? .6 : opts.friction; var friction = initialFriction; var beforeStepCallback; var afterStepCallback; return { warmUp: function() { friction = initialFriction * .8; }, setFixed: function(idx) { nodes[idx].fixed = true; }, setUnfixed: function(idx) { nodes[idx].fixed = false; }, /** * Before step hook */ beforeStep: function(cb) { beforeStepCallback = cb; }, /** * After step hook */ afterStep: function(cb) { afterStepCallback = cb; }, /** * Some formulas were originally copied from "d3.js" * https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js * with some modifications made for this project. * See the license statement at the head of this file. */ step: function(cb) { beforeStepCallback && beforeStepCallback(nodes, edges); var v12 = []; var nLen = nodes.length; for (var i = 0; i < edges.length; i++) { var e = edges[i]; if (e.ignoreForceLayout) continue; var n1 = e.n1; var n2 = e.n2; sub(v12, n2.p, n1.p); var d = len(v12) - e.d; var w = n2.w / (n1.w + n2.w); if (isNaN(w)) w = 0; normalize$2(v12, v12); !n1.fixed && scaleAndAdd(n1.p, n1.p, v12, w * d * friction); !n2.fixed && scaleAndAdd(n2.p, n2.p, v12, -(1 - w) * d * friction); } for (var i = 0; i < nLen; i++) { var n = nodes[i]; if (!n.fixed) { sub(v12, center, n.p); scaleAndAdd(n.p, n.p, v12, gravity * friction); } } for (var i = 0; i < nLen; i++) { var n1 = nodes[i]; for (var j = i + 1; j < nLen; j++) { var n2 = nodes[j]; sub(v12, n2.p, n1.p); var d = len(v12); if (d === 0) { set$1(v12, Math.random() - .5, Math.random() - .5); d = 1; } var repFact = (n1.rep + n2.rep) / d / d; !n1.fixed && scaleAndAdd(n1.pp, n1.pp, v12, repFact); !n2.fixed && scaleAndAdd(n2.pp, n2.pp, v12, -repFact); } } var v = []; for (var i = 0; i < nLen; i++) { var n = nodes[i]; if (!n.fixed) { sub(v, n.p, n.pp); scaleAndAdd(n.p, n.p, v, friction); copy$1(n.pp, n.p); } } friction = friction * .992; var finished = friction < .01; afterStepCallback && afterStepCallback(nodes, edges, finished); cb && cb(finished); } }; } //#endregion //#region node_modules/echarts/lib/chart/graph/forceLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphForceLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, graphForceLayout); function graphForceLayout(ecModel) { ecModel.eachSeriesByType(SERIES_TYPE_GRAPH, function(graphSeries) { var coordSys = graphSeries.coordinateSystem; if (coordSys && coordSys.type !== "view") return; if (graphSeries.get("layout") === "force") { var preservedPoints_1 = graphSeries.preservedPoints || {}; var graph_1 = graphSeries.getGraph(); var nodeData_1 = graph_1.data; var edgeData = graph_1.edgeData; var forceModel = graphSeries.getModel("force"); var initLayout = forceModel.get("initLayout"); if (graphSeries.preservedPoints) nodeData_1.each(function(idx) { var id = nodeData_1.getId(idx); nodeData_1.setItemLayout(idx, preservedPoints_1[id] || [NaN, NaN]); }); else if (!initLayout || initLayout === "none") simpleLayout(graphSeries); else if (initLayout === "circular") circularLayout(graphSeries, "value"); var nodeDataExtent_1 = nodeData_1.getDataExtent("value"); var edgeDataExtent_1 = edgeData.getDataExtent("value"); var repulsion = forceModel.get("repulsion"); var edgeLength = forceModel.get("edgeLength"); var repulsionArr_1 = isArray$1(repulsion) ? repulsion : [repulsion, repulsion]; var edgeLengthArr_1 = isArray$1(edgeLength) ? edgeLength : [edgeLength, edgeLength]; edgeLengthArr_1 = [edgeLengthArr_1[1], edgeLengthArr_1[0]]; var nodes_1 = nodeData_1.mapArray("value", function(value, idx) { var point = nodeData_1.getItemLayout(idx); var rep = linearMap$2(value, nodeDataExtent_1, repulsionArr_1); if (isNaN(rep)) rep = (repulsionArr_1[0] + repulsionArr_1[1]) / 2; return { w: rep, rep, fixed: nodeData_1.getItemModel(idx).get("fixed"), p: !point || isNaN(point[0]) || isNaN(point[1]) ? null : point }; }); var forceInstance = forceLayout(nodes_1, edgeData.mapArray("value", function(value, idx) { var edge = graph_1.getEdgeByIndex(idx); var d = linearMap$2(value, edgeDataExtent_1, edgeLengthArr_1); if (isNaN(d)) d = (edgeLengthArr_1[0] + edgeLengthArr_1[1]) / 2; var edgeModel = edge.getModel(); var curveness = retrieve3(edge.getModel().get(["lineStyle", "curveness"]), -getCurvenessForEdge(edge, graphSeries, idx, true), 0); return { n1: nodes_1[edge.node1.dataIndex], n2: nodes_1[edge.node2.dataIndex], d, curveness, ignoreForceLayout: edgeModel.get("ignoreForceLayout") }; }), { rect: coordSys.getBoundingRect(), gravity: forceModel.get("gravity"), friction: forceModel.get("friction") }); forceInstance.beforeStep(function(nodes, edges) { for (var i = 0, l = nodes.length; i < l; i++) if (nodes[i].fixed) copy$1(nodes[i].p, graph_1.getNodeByIndex(i).getLayout()); }); forceInstance.afterStep(function(nodes, edges, stopped) { for (var i = 0, l = nodes.length; i < l; i++) { if (!nodes[i].fixed) graph_1.getNodeByIndex(i).setLayout(nodes[i].p); preservedPoints_1[nodeData_1.getId(i)] = nodes[i].p; } for (var i = 0, l = edges.length; i < l; i++) { var e = edges[i]; var edge = graph_1.getEdgeByIndex(i); var p1 = e.n1.p; var p2 = e.n2.p; var points = edge.getLayout(); points = points ? points.slice() : []; points[0] = points[0] || []; points[1] = points[1] || []; copy$1(points[0], p1); copy$1(points[1], p2); if (+e.curveness) points[2] = [(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness]; edge.setLayout(points); } }); graphSeries.forceLayout = forceInstance; graphSeries.preservedPoints = preservedPoints_1; forceInstance.step(); } else graphSeries.forceLayout = null; }); } //#endregion //#region node_modules/echarts/lib/chart/graph/createView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getViewRect$1(seriesModel, api, aspect) { var layoutRef = createBoxLayoutReference(seriesModel, api); return applyPreserveAspect(seriesModel, getLayoutRect(extend(seriesModel.getBoxLayoutParams(), { aspect }), layoutRef.refContainer), aspect); } function createViewCoordSys(ecModel, api) { var viewList = []; ecModel.eachSeriesByType("graph", function(seriesModel) { injectCoordSysByOption({ targetModel: seriesModel, coordSysType: "view", coordSysProvider: createViewCoordSys, isDefaultDataCoordSys: true }); function createViewCoordSys() { var data = seriesModel.getData(); var positions = data.mapArray(function(idx) { var itemModel = data.getItemModel(idx); return [+itemModel.get("x"), +itemModel.get("y")]; }); var min = []; var max = []; fromPoints(positions, min, max); if (max[0] - min[0] === 0) { max[0] += 1; min[0] -= 1; } if (max[1] - min[1] === 0) { max[1] += 1; min[1] -= 1; } var aspect = (max[0] - min[0]) / (max[1] - min[1]); var viewRect = getViewRect$1(seriesModel, api, aspect); if (isNaN(aspect)) { min = [viewRect.x, viewRect.y]; max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height]; } var bbWidth = max[0] - min[0]; var bbHeight = max[1] - min[1]; var viewCoordSys = createViewCoordSysSimply(seriesModel, api, min[0], min[1], bbWidth, bbHeight, viewRect); viewList.push(viewCoordSys); return viewCoordSys; } }); return viewList; } //#endregion //#region node_modules/echarts/lib/chart/helper/LinePath.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Line path for bezier and straight line draw */ var straightLineProto = Line$1.prototype; var bezierCurveProto = BezierCurve.prototype; var StraightLineShape = function() { function StraightLineShape() { this.x1 = 0; this.y1 = 0; this.x2 = 0; this.y2 = 0; this.percent = 1; } return StraightLineShape; }(); /** @class */ (function(_super) { __extends(CurveShape, _super); function CurveShape() { return _super !== null && _super.apply(this, arguments) || this; } return CurveShape; })(StraightLineShape); function isStraightLine(shape) { return isNaN(+shape.cpx1) || isNaN(+shape.cpy1); } var ECLinePath = function(_super) { __extends(ECLinePath, _super); function ECLinePath(opts) { var _this = _super.call(this, opts) || this; _this.type = "ec-line"; return _this; } ECLinePath.prototype.getDefaultStyle = function() { return { stroke: tokens.color.neutral99, fill: null }; }; ECLinePath.prototype.getDefaultShape = function() { return new StraightLineShape(); }; ECLinePath.prototype.buildPath = function(ctx, shape) { if (isStraightLine(shape)) straightLineProto.buildPath.call(this, ctx, shape); else bezierCurveProto.buildPath.call(this, ctx, shape); }; ECLinePath.prototype.pointAt = function(t) { if (isStraightLine(this.shape)) return straightLineProto.pointAt.call(this, t); else return bezierCurveProto.pointAt.call(this, t); }; ECLinePath.prototype.tangentAt = function(t) { var shape = this.shape; var p = isStraightLine(shape) ? [shape.x2 - shape.x1, shape.y2 - shape.y1] : bezierCurveProto.tangentAt.call(this, t); return normalize$2(p, p); }; return ECLinePath; }(Path); //#endregion //#region node_modules/echarts/lib/chart/helper/Line.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SYMBOL_CATEGORIES = ["fromSymbol", "toSymbol"]; function makeSymbolTypeKey(symbolCategory) { return "_" + symbolCategory + "Type"; } function makeSymbolTypeValue(name, lineData, idx) { var symbolType = lineData.getItemVisual(idx, name); if (!symbolType || symbolType === "none") return symbolType; var symbolSize = lineData.getItemVisual(idx, name + "Size"); var symbolRotate = lineData.getItemVisual(idx, name + "Rotate"); var symbolOffset = lineData.getItemVisual(idx, name + "Offset"); var symbolKeepAspect = lineData.getItemVisual(idx, name + "KeepAspect"); var symbolSizeArr = normalizeSymbolSize(symbolSize); var symbolOffsetArr = normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr); return symbolType + symbolSizeArr + symbolOffsetArr + (symbolRotate || "") + (symbolKeepAspect || ""); } /** * @inner */ function createSymbol(name, lineData, idx) { var symbolType = lineData.getItemVisual(idx, name); if (!symbolType || symbolType === "none") return; var symbolSize = lineData.getItemVisual(idx, name + "Size"); var symbolRotate = lineData.getItemVisual(idx, name + "Rotate"); var symbolOffset = lineData.getItemVisual(idx, name + "Offset"); var symbolKeepAspect = lineData.getItemVisual(idx, name + "KeepAspect"); var symbolSizeArr = normalizeSymbolSize(symbolSize); var symbolOffsetArr = normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr); var symbolPath = createSymbol$1(symbolType, -symbolSizeArr[0] / 2 + symbolOffsetArr[0], -symbolSizeArr[1] / 2 + symbolOffsetArr[1], symbolSizeArr[0], symbolSizeArr[1], null, symbolKeepAspect); symbolPath.__specifiedRotation = symbolRotate == null || isNaN(symbolRotate) ? void 0 : +symbolRotate * Math.PI / 180 || 0; symbolPath.name = name; return symbolPath; } function createLine(points) { var line = new ECLinePath({ name: "line", subPixelOptimize: true }); setLinePoints(line.shape, points); return line; } function setLinePoints(targetShape, points) { targetShape.x1 = points[0][0]; targetShape.y1 = points[0][1]; targetShape.x2 = points[1][0]; targetShape.y2 = points[1][1]; targetShape.percent = 1; var cp1 = points[2]; if (cp1) { targetShape.cpx1 = cp1[0]; targetShape.cpy1 = cp1[1]; } else { targetShape.cpx1 = NaN; targetShape.cpy1 = NaN; } } var Line = function(_super) { __extends(Line, _super); function Line(lineData, idx, seriesScope) { var _this = _super.call(this) || this; _this._createLine(lineData, idx, seriesScope); return _this; } Line.prototype._createLine = function(lineData, idx, seriesScope) { var seriesModel = lineData.hostModel; var linePoints = lineData.getItemLayout(idx); var z2 = lineData.getItemVisual(idx, "z2"); var line = createLine(linePoints); line.shape.percent = 0; initProps(line, { z2: retrieve2(z2, 0), shape: { percent: 1 } }, seriesModel, idx); this.add(line); each$12(SYMBOL_CATEGORIES, function(symbolCategory) { var symbol = createSymbol(symbolCategory, lineData, idx); this.add(symbol); this[makeSymbolTypeKey(symbolCategory)] = makeSymbolTypeValue(symbolCategory, lineData, idx); }, this); this._updateCommonStl(lineData, idx, seriesScope); }; Line.prototype.updateData = function(lineData, idx, seriesScope) { var seriesModel = lineData.hostModel; var line = this.childOfName("line"); var linePoints = lineData.getItemLayout(idx); var target = { shape: {} }; setLinePoints(target.shape, linePoints); updateProps$1(line, target, seriesModel, idx); each$12(SYMBOL_CATEGORIES, function(symbolCategory) { var symbolType = makeSymbolTypeValue(symbolCategory, lineData, idx); var key = makeSymbolTypeKey(symbolCategory); if (this[key] !== symbolType) { this.remove(this.childOfName(symbolCategory)); var symbol = createSymbol(symbolCategory, lineData, idx); this.add(symbol); } this[key] = symbolType; }, this); this._updateCommonStl(lineData, idx, seriesScope); }; Line.prototype.getLinePath = function() { return this.childAt(0); }; Line.prototype._updateCommonStl = function(lineData, idx, seriesScope) { var seriesModel = lineData.hostModel; var line = this.childOfName("line"); var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle; var blurLineStyle = seriesScope && seriesScope.blurLineStyle; var selectLineStyle = seriesScope && seriesScope.selectLineStyle; var labelStatesModels = seriesScope && seriesScope.labelStatesModels; var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled; var focus = seriesScope && seriesScope.focus; var blurScope = seriesScope && seriesScope.blurScope; if (!seriesScope || lineData.hasItemOption) { var itemModel = lineData.getItemModel(idx); var emphasisModel = itemModel.getModel("emphasis"); emphasisLineStyle = emphasisModel.getModel("lineStyle").getLineStyle(); blurLineStyle = itemModel.getModel(["blur", "lineStyle"]).getLineStyle(); selectLineStyle = itemModel.getModel(["select", "lineStyle"]).getLineStyle(); emphasisDisabled = emphasisModel.get("disabled"); focus = emphasisModel.get("focus"); blurScope = emphasisModel.get("blurScope"); labelStatesModels = getLabelStatesModels(itemModel); } var lineStyle = lineData.getItemVisual(idx, "style"); var visualColor = lineStyle.stroke; line.useStyle(lineStyle); line.style.fill = null; line.style.strokeNoScale = true; line.ensureState("emphasis").style = emphasisLineStyle; line.ensureState("blur").style = blurLineStyle; line.ensureState("select").style = selectLineStyle; each$12(SYMBOL_CATEGORIES, function(symbolCategory) { var symbol = this.childOfName(symbolCategory); if (symbol) { symbol.setColor(visualColor); symbol.style.opacity = lineStyle.opacity; for (var i = 0; i < SPECIAL_STATES.length; i++) { var stateName = SPECIAL_STATES[i]; var lineState = line.getState(stateName); if (lineState) { var lineStateStyle = lineState.style || {}; var state = symbol.ensureState(stateName); var stateStyle = state.style || (state.style = {}); if (lineStateStyle.stroke != null) stateStyle[symbol.__isEmptyBrush ? "stroke" : "fill"] = lineStateStyle.stroke; if (lineStateStyle.opacity != null) stateStyle.opacity = lineStateStyle.opacity; } } symbol.markRedraw(); } }, this); var rawVal = seriesModel.getRawValue(idx); setLabelStyle(this, labelStatesModels, { labelDataIndex: idx, labelFetcher: { getFormattedLabel: function(dataIndex, stateName) { return seriesModel.getFormattedLabel(dataIndex, stateName, lineData.dataType); } }, inheritColor: visualColor || tokens.color.neutral99, defaultOpacity: lineStyle.opacity, defaultText: (rawVal == null ? lineData.getName(idx) : isFinite(rawVal) ? round$3(rawVal, 10) : rawVal) + "" }); var label = this.getTextContent(); if (label) { var labelNormalModel = labelStatesModels.normal; label.__align = label.style.align; label.__verticalAlign = label.style.verticalAlign; label.__position = labelNormalModel.get("position") || "middle"; var distance = labelNormalModel.get("distance"); if (!isArray$1(distance)) distance = [distance, distance]; label.__labelDistance = distance; } this.setTextConfig({ position: null, local: true, inside: false }); toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled); }; Line.prototype.highlight = function() { enterEmphasis(this); }; Line.prototype.downplay = function() { leaveEmphasis(this); }; Line.prototype.updateLayout = function(lineData, idx) { this.childOfName("line").stopAnimation(); this.setLinePoints(lineData.getItemLayout(idx)); }; Line.prototype.setLinePoints = function(points) { var linePath = this.childOfName("line"); setLinePoints(linePath.shape, points); linePath.dirty(); }; Line.prototype.beforeUpdate = function() { var lineGroup = this; var symbolFrom = lineGroup.childOfName("fromSymbol"); var symbolTo = lineGroup.childOfName("toSymbol"); var label = lineGroup.getTextContent(); if (!symbolFrom && !symbolTo && (!label || label.ignore)) return; var invScale = 1; var parentNode = this.parent; while (parentNode) { if (parentNode.scaleX) invScale /= parentNode.scaleX; parentNode = parentNode.parent; } var line = lineGroup.childOfName("line"); if (!this.__dirty && !line.__dirty) return; var percent = line.shape.percent; var fromPos = line.pointAt(0); var toPos = line.pointAt(percent); var d = sub([], toPos, fromPos); normalize$2(d, d); function setSymbolRotation(symbol, percent) { var specifiedRotation = symbol.__specifiedRotation; if (specifiedRotation == null) { var tangent = line.tangentAt(percent); symbol.attr("rotation", (percent === 1 ? -1 : 1) * Math.PI / 2 - Math.atan2(tangent[1], tangent[0])); } else symbol.attr("rotation", specifiedRotation); } if (symbolFrom) { symbolFrom.setPosition(fromPos); setSymbolRotation(symbolFrom, 0); symbolFrom.scaleX = symbolFrom.scaleY = invScale * percent; symbolFrom.markRedraw(); } if (symbolTo) { symbolTo.setPosition(toPos); setSymbolRotation(symbolTo, 1); symbolTo.scaleX = symbolTo.scaleY = invScale * percent; symbolTo.markRedraw(); } if (label && !label.ignore) { label.x = label.y = 0; label.originX = label.originY = 0; var textAlign = void 0; var textVerticalAlign = void 0; var distance = label.__labelDistance; var distanceX = distance[0] * invScale; var distanceY = distance[1] * invScale; var halfPercent = percent / 2; var tangent = line.tangentAt(halfPercent); var n = [tangent[1], -tangent[0]]; var cp = line.pointAt(halfPercent); if (n[1] > 0) { n[0] = -n[0]; n[1] = -n[1]; } var dir = tangent[0] < 0 ? -1 : 1; if (label.__position !== "start" && label.__position !== "end") { var rotation = -Math.atan2(tangent[1], tangent[0]); if (toPos[0] < fromPos[0]) rotation = Math.PI + rotation; label.rotation = rotation; } var dy = void 0; switch (label.__position) { case "insideStartTop": case "insideMiddleTop": case "insideEndTop": case "middle": dy = -distanceY; textVerticalAlign = "bottom"; break; case "insideStartBottom": case "insideMiddleBottom": case "insideEndBottom": dy = distanceY; textVerticalAlign = "top"; break; default: dy = 0; textVerticalAlign = "middle"; } switch (label.__position) { case "end": label.x = d[0] * distanceX + toPos[0]; label.y = d[1] * distanceY + toPos[1]; textAlign = d[0] > .8 ? "left" : d[0] < -.8 ? "right" : "center"; textVerticalAlign = d[1] > .8 ? "top" : d[1] < -.8 ? "bottom" : "middle"; break; case "start": label.x = -d[0] * distanceX + fromPos[0]; label.y = -d[1] * distanceY + fromPos[1]; textAlign = d[0] > .8 ? "right" : d[0] < -.8 ? "left" : "center"; textVerticalAlign = d[1] > .8 ? "bottom" : d[1] < -.8 ? "top" : "middle"; break; case "insideStartTop": case "insideStart": case "insideStartBottom": label.x = distanceX * dir + fromPos[0]; label.y = fromPos[1] + dy; textAlign = tangent[0] < 0 ? "right" : "left"; label.originX = -distanceX * dir; label.originY = -dy; break; case "insideMiddleTop": case "insideMiddle": case "insideMiddleBottom": case "middle": label.x = cp[0]; label.y = cp[1] + dy; textAlign = "center"; label.originY = -dy; break; case "insideEndTop": case "insideEnd": case "insideEndBottom": label.x = -distanceX * dir + toPos[0]; label.y = toPos[1] + dy; textAlign = tangent[0] >= 0 ? "right" : "left"; label.originX = distanceX * dir; label.originY = -dy; } label.scaleX = label.scaleY = invScale; label.setStyle({ verticalAlign: label.__verticalAlign || textVerticalAlign, align: label.__align || textAlign }); } }; return Line; }(Group$3); //#endregion //#region node_modules/echarts/lib/chart/helper/LineDraw.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LineDraw = function() { function LineDraw(LineCtor) { this.group = new Group$3(); this._LineCtor = LineCtor || Line; } LineDraw.prototype.updateData = function(lineData) { var _this = this; this._progressiveEls = null; var lineDraw = this; var group = lineDraw.group; var oldLineData = lineDraw._lineData; lineDraw._lineData = lineData; if (!oldLineData) group.removeAll(); var seriesScope = makeSeriesScope$1(lineData); lineData.diff(oldLineData).add(function(idx) { _this._doAdd(lineData, idx, seriesScope); }).update(function(newIdx, oldIdx) { _this._doUpdate(oldLineData, lineData, oldIdx, newIdx, seriesScope); }).remove(function(idx) { group.remove(oldLineData.getItemGraphicEl(idx)); }).execute(); }; LineDraw.prototype.updateLayout = function() { var lineData = this._lineData; if (!lineData) return; lineData.eachItemGraphicEl(function(el, idx) { el.updateLayout(lineData, idx); }, this); }; LineDraw.prototype.incrementalPrepareUpdate = function(lineData) { this._seriesScope = makeSeriesScope$1(lineData); this._lineData = null; this.group.removeAll(); }; LineDraw.prototype.incrementalUpdate = function(taskParams, lineData, incrementalId) { this._progressiveEls = []; function updateIncrementalAndHover(el) { if (!el.isGroup && !isEffectObject(el)) { el.incremental = incrementalId; el.ensureState("emphasis").hoverLayer = 2; } } for (var idx = taskParams.start; idx < taskParams.end; idx++) if (lineNeedsDraw(lineData.getItemLayout(idx))) { var el = new this._LineCtor(lineData, idx, this._seriesScope); el.traverse(updateIncrementalAndHover); this.group.add(el); lineData.setItemGraphicEl(idx, el); this._progressiveEls.push(el); } }; LineDraw.prototype.remove = function() { this.group.removeAll(); }; LineDraw.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; LineDraw.prototype._doAdd = function(lineData, idx, seriesScope) { if (!lineNeedsDraw(lineData.getItemLayout(idx))) return; var el = new this._LineCtor(lineData, idx, seriesScope); lineData.setItemGraphicEl(idx, el); this.group.add(el); }; LineDraw.prototype._doUpdate = function(oldLineData, newLineData, oldIdx, newIdx, seriesScope) { var itemEl = oldLineData.getItemGraphicEl(oldIdx); if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) { this.group.remove(itemEl); return; } if (!itemEl) itemEl = new this._LineCtor(newLineData, newIdx, seriesScope); else itemEl.updateData(newLineData, newIdx, seriesScope); newLineData.setItemGraphicEl(newIdx, itemEl); this.group.add(itemEl); }; return LineDraw; }(); function isEffectObject(el) { return el.animators && el.animators.length > 0; } function makeSeriesScope$1(lineData) { var hostModel = lineData.hostModel; var emphasisModel = hostModel.getModel("emphasis"); return { lineStyle: hostModel.getModel("lineStyle").getLineStyle(), emphasisLineStyle: emphasisModel.getModel(["lineStyle"]).getLineStyle(), blurLineStyle: hostModel.getModel(["blur", "lineStyle"]).getLineStyle(), selectLineStyle: hostModel.getModel(["select", "lineStyle"]).getLineStyle(), emphasisDisabled: emphasisModel.get("disabled"), blurScope: emphasisModel.get("blurScope"), focus: emphasisModel.get("focus"), labelStatesModels: getLabelStatesModels(hostModel) }; } function isPointNaN(pt) { return isNaN(pt[0]) || isNaN(pt[1]); } function lineNeedsDraw(pts) { return pts && !isPointNaN(pts[0]) && !isPointNaN(pts[1]); } //#endregion //#region node_modules/echarts/lib/chart/graph/adjustEdge.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var v1 = []; var v2 = []; var v3 = []; var quadraticAt = quadraticAt$1; var v2DistSquare = distSquare; var mathAbs = Math.abs; function intersectCurveCircle(curvePoints, center, radius) { var p0 = curvePoints[0]; var p1 = curvePoints[1]; var p2 = curvePoints[2]; var d = Infinity; var t; var radiusSquare = radius * radius; var interval = .1; for (var _t = .1; _t <= .9; _t += .1) { v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t); v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t); var diff = mathAbs(v2DistSquare(v1, center) - radiusSquare); if (diff < d) { d = diff; t = _t; } } for (var i = 0; i < 32; i++) { var next = t + interval; v2[0] = quadraticAt(p0[0], p1[0], p2[0], t); v2[1] = quadraticAt(p0[1], p1[1], p2[1], t); v3[0] = quadraticAt(p0[0], p1[0], p2[0], next); v3[1] = quadraticAt(p0[1], p1[1], p2[1], next); var diff = v2DistSquare(v2, center) - radiusSquare; if (mathAbs(diff) < .01) break; var nextDiff = v2DistSquare(v3, center) - radiusSquare; interval /= 2; if (diff < 0) { if (nextDiff >= 0) t = t + interval; else t = t - interval; } else if (nextDiff >= 0) t = t - interval; else t = t + interval; } return t; } function adjustEdge(graph, scale) { var tmp0 = []; var quadraticSubdivide$1 = quadraticSubdivide; var pts = [ [], [], [] ]; var pts2 = [[], []]; var v = []; scale /= 2; graph.eachEdge(function(edge, idx) { var linePoints = edge.getLayout(); var fromSymbol = edge.getVisual("fromSymbol"); var toSymbol = edge.getVisual("toSymbol"); if (!linePoints.__original) { linePoints.__original = [clone$3(linePoints[0]), clone$3(linePoints[1])]; if (linePoints[2]) linePoints.__original.push(clone$3(linePoints[2])); } var originalPoints = linePoints.__original; if (linePoints[2] != null) { copy$1(pts[0], originalPoints[0]); copy$1(pts[1], originalPoints[2]); copy$1(pts[2], originalPoints[1]); if (fromSymbol && fromSymbol !== "none") { var symbolSize = getSymbolSize(edge.node1); var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale); quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); pts[0][0] = tmp0[3]; pts[1][0] = tmp0[4]; quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); pts[0][1] = tmp0[3]; pts[1][1] = tmp0[4]; } if (toSymbol && toSymbol !== "none") { var symbolSize = getSymbolSize(edge.node2); var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale); quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); pts[1][0] = tmp0[1]; pts[2][0] = tmp0[2]; quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); pts[1][1] = tmp0[1]; pts[2][1] = tmp0[2]; } copy$1(linePoints[0], pts[0]); copy$1(linePoints[1], pts[2]); copy$1(linePoints[2], pts[1]); } else { copy$1(pts2[0], originalPoints[0]); copy$1(pts2[1], originalPoints[1]); sub(v, pts2[1], pts2[0]); normalize$2(v, v); if (fromSymbol && fromSymbol !== "none") { var symbolSize = getSymbolSize(edge.node1); scaleAndAdd$1(pts2[0], pts2[0], v, symbolSize * scale); } if (toSymbol && toSymbol !== "none") { var symbolSize = getSymbolSize(edge.node2); scaleAndAdd$1(pts2[1], pts2[1], v, -symbolSize * scale); } copy$1(linePoints[0], pts2[0]); copy$1(linePoints[1], pts2[1]); } }); } //#endregion //#region node_modules/echarts/lib/component/helper/thumbnailBridge.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @caveat Do not import other `src/component/thumbnail/*` files. * This file should be decoupled from them for sake of the size consideration. */ /** * FIXME: This is a temporary implementation. May need refactor to decouple * the direct call from series.graph to thumbnail. */ var inner$11 = makeInner(); function getThumbnailBridge(model) { if (model) return inner$11(model).bridge; } function injectThumbnailBridge(model, thumbnailBridge) { if (model) inner$11(model).bridge = thumbnailBridge; } //#endregion //#region node_modules/echarts/lib/chart/graph/GraphView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GraphView = function(_super) { __extends(GraphView, _super); function GraphView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_GRAPH; return _this; } GraphView.prototype.init = function(ecModel, api) { var symbolDraw = new SymbolDraw(); var lineDraw = new LineDraw(); var group = this.group; var mainGroup = new Group$3(); this._controller = new RoamController(api.getZr()); mainGroup.add(symbolDraw.group); mainGroup.add(lineDraw.group); group.add(mainGroup); this._symbolDraw = symbolDraw; this._lineDraw = lineDraw; this._mainGroup = mainGroup; this._firstRender = true; }; GraphView.prototype.render = function(seriesModel, ecModel, api) { var _this = this; var ownCoordSys = getOwnRoamViewCoordSys(seriesModel); var isForceLayout = false; this._model = seriesModel; this._api = api; this._active = true; var mainGroup = this._mainGroup; var thumbnailInfo = this._getThumbnailInfo(); if (thumbnailInfo) thumbnailInfo.bridge.reset(api); var symbolDraw = this._symbolDraw; var lineDraw = this._lineDraw; if (ownCoordSys) applyViewCoordSysTransToElement(mainGroup, 2, ownCoordSys, this._firstRender ? null : seriesModel); adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); var data = seriesModel.getData(); symbolDraw.updateData(data); var edgeData = seriesModel.getEdgeData(); lineDraw.updateData(edgeData); this._updateNodeAndLinkScale(); if (ownCoordSys) updateRoamControllerSimply(seriesModel, api, this._controller, function(e, x, y) { return seriesModel.coordinateSystem.containPoint([x, y]); }, null); clearTimeout(this._layoutTimeout); var forceLayout = seriesModel.forceLayout; var layoutAnimation = seriesModel.get(["force", "layoutAnimation"]); if (forceLayout) { isForceLayout = true; this._startForceLayoutIteration(forceLayout, api, layoutAnimation); } var layout = seriesModel.get("layout"); data.graph.eachNode(function(node) { var idx = node.dataIndex; var el = node.getGraphicEl(); var itemModel = node.getModel(); if (!el) return; el.off("drag").off("dragend"); var draggable = itemModel.get("draggable"); if (draggable) el.on("drag", function(e) { switch (layout) { case "force": forceLayout.warmUp(); !_this._layouting && _this._startForceLayoutIteration(forceLayout, api, layoutAnimation); forceLayout.setFixed(idx); data.setItemLayout(idx, [el.x, el.y]); break; case "circular": data.setItemLayout(idx, [el.x, el.y]); node.setLayout({ fixed: true }, true); circularLayout(seriesModel, "symbolSize", node, [e.offsetX, e.offsetY]); _this.updateLayout(seriesModel); break; default: data.setItemLayout(idx, [el.x, el.y]); simpleLayoutEdge(seriesModel.getGraph(), seriesModel); _this.updateLayout(seriesModel); } }).on("dragend", function() { if (forceLayout) forceLayout.setUnfixed(idx); }); el.setDraggable(draggable, !!itemModel.get("cursor")); if (itemModel.get(["emphasis", "focus"]) === "adjacency") getECData(el).focus = node.getAdjacentDataIndices(); }); data.graph.eachEdge(function(edge) { var el = edge.getGraphicEl(); var focus = edge.getModel().get(["emphasis", "focus"]); if (!el) return; if (focus === "adjacency") getECData(el).focus = { edge: [edge.dataIndex], node: [edge.node1.dataIndex, edge.node2.dataIndex] }; }); var circularRotateLabel = seriesModel.get("layout") === "circular" && seriesModel.get(["circular", "rotateLabel"]); var cx = data.getLayout("cx"); var cy = data.getLayout("cy"); data.graph.eachNode(function(node) { rotateNodeLabel(node, circularRotateLabel, cx, cy); }); this._firstRender = false; if (!isForceLayout) this._renderThumbnail(seriesModel, api, this._symbolDraw, this._lineDraw); }; GraphView.prototype.dispose = function() { this.remove(); this._controller && this._controller.dispose(); }; GraphView.prototype._startForceLayoutIteration = function(forceLayout, api, layoutAnimation) { var self = this; var firstRendered = false; (function step() { forceLayout.step(function(stopped) { self.updateLayout(self._model); if (stopped || !firstRendered) { firstRendered = true; self._renderThumbnail(self._model, api, self._symbolDraw, self._lineDraw); } (self._layouting = !stopped) && (layoutAnimation ? self._layoutTimeout = setTimeout(step, 16) : step()); }); })(); }; /** * @implements RoamHostView['__updateOnOwnRoam'] */ GraphView.prototype.__updateOnOwnRoam = function(payload, seriesModel, api) { var ownCoordSys = getOwnRoamViewCoordSys(seriesModel); if (!this._active || !ownCoordSys) return; applyViewCoordSysTransToElement(this._mainGroup, 2, ownCoordSys, null); if (isRoamPayloadHasZoom(payload)) { this._updateNodeAndLinkScale(); adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); this._lineDraw.updateLayout(); api.updateLabelLayout(); } this._updateThumbnailWindow(); }; GraphView.prototype._updateNodeAndLinkScale = function() { var seriesModel = this._model; var data = seriesModel.getData(); var nodeScale = getNodeGlobalScale(seriesModel); data.eachItemGraphicEl(function(el, idx) { el && el.setSymbolScale(nodeScale); }); }; GraphView.prototype.updateLayout = function(seriesModel) { if (!this._active) return; adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); this._symbolDraw.updateLayout(); this._lineDraw.updateLayout(); }; GraphView.prototype.remove = function() { this._active = false; clearTimeout(this._layoutTimeout); this._layouting = false; this._layoutTimeout = null; this._symbolDraw && this._symbolDraw.remove(); this._lineDraw && this._lineDraw.remove(); this._controller && this._controller.disable(); }; /** * Get thumbnail data structure only if supported. */ GraphView.prototype._getThumbnailInfo = function() { var model = this._model; var coordSys = model.coordinateSystem; if (coordSys.type !== "view") return; var bridge = getThumbnailBridge(model); if (!bridge) return; return { bridge, coordSys }; }; GraphView.prototype._updateThumbnailWindow = function() { var info = this._getThumbnailInfo(); if (info) info.bridge.updateWindow(viewCoordSysCopyOverallMatrix(null, info.coordSys), this._api); }; GraphView.prototype._renderThumbnail = function(seriesModel, api, symbolDraw, lineDraw) { var info = this._getThumbnailInfo(); if (!info) return; var bridgeGroup = new Group$3(); var symbolNodes = symbolDraw.group.children(); var lineNodes = lineDraw.group.children(); var lineGroup = new Group$3(); var symbolGroup = new Group$3(); bridgeGroup.add(symbolGroup); bridgeGroup.add(lineGroup); for (var i = 0; i < symbolNodes.length; i++) { var node = symbolNodes[i]; var sub = node.children()[0]; var x = node.x; var y = node.y; var shape = extend(clone$4(sub.shape), { width: sub.scaleX, height: sub.scaleY, x: x - sub.scaleX / 2, y: y - sub.scaleY / 2 }); var style = clone$4(sub.style); var subThumbnail = new sub.constructor({ shape, style, z2: 151 }); symbolGroup.add(subThumbnail); } for (var i = 0; i < lineNodes.length; i++) { var node = lineNodes[i]; var line = node.children()[0]; var style = clone$4(line.style); var shape = clone$4(line.shape); var lineThumbnail = new ECLinePath({ style, shape, z2: 151 }); lineGroup.add(lineThumbnail); } info.bridge.renderContent({ api, roamType: seriesModel.get("roam"), viewportRect: null, group: bridgeGroup, targetTrans: viewCoordSysCopyOverallMatrix(null, info.coordSys) }); }; GraphView.type = SERIES_TYPE_GRAPH; return GraphView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/graph/categoryFilter.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphCategoryFilterStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, categoryFilter); function categoryFilter(ecModel) { var legendModels = ecModel.findComponents({ mainType: "legend" }); if (!legendModels || !legendModels.length) return; ecModel.eachSeriesByType(SERIES_TYPE_GRAPH, function(graphSeries) { var categoriesData = graphSeries.getCategoriesData(); var data = graphSeries.getGraph().data; var categoryNames = categoriesData.mapArray(categoriesData.getName); data.filterSelf(function(idx) { var category = data.getItemModel(idx).getShallow("category"); if (category != null) { if (isNumber(category)) category = categoryNames[category]; for (var i = 0; i < legendModels.length; i++) if (!legendModels[i].isSelected(category)) return false; } return true; }); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/categoryVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var graphCategoryVisualStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_GRAPH, categoryVisual); function categoryVisual(ecModel) { var paletteScope = {}; ecModel.eachSeriesByType(SERIES_TYPE_GRAPH, function(seriesModel) { var categoriesData = seriesModel.getCategoriesData(); var data = seriesModel.getData(); var categoryNameIdxMap = {}; categoriesData.each(function(idx) { var name = categoriesData.getName(idx); categoryNameIdxMap["ec-" + name] = idx; var itemModel = categoriesData.getItemModel(idx); var style = itemModel.getModel("itemStyle").getItemStyle(); if (!style.fill) style.fill = seriesModel.getColorFromPalette(name, paletteScope); categoriesData.setItemVisual(idx, "style", style); var symbolVisualList = [ "symbol", "symbolSize", "symbolKeepAspect" ]; for (var i = 0; i < symbolVisualList.length; i++) { var symbolVisual = itemModel.getShallow(symbolVisualList[i], true); if (symbolVisual != null) categoriesData.setItemVisual(idx, symbolVisualList[i], symbolVisual); } }); if (categoriesData.count()) data.each(function(idx) { var categoryIdx = data.getItemModel(idx).getShallow("category"); if (categoryIdx != null) { if (isString(categoryIdx)) categoryIdx = categoryNameIdxMap["ec-" + categoryIdx]; var categoryStyle = categoriesData.getItemVisual(categoryIdx, "style"); extend(data.ensureUniqueItemVisual(idx, "style"), categoryStyle); var visualList = [ "symbol", "symbolSize", "symbolKeepAspect" ]; for (var i = 0; i < visualList.length; i++) data.setItemVisual(idx, visualList[i], categoriesData.getItemVisual(categoryIdx, visualList[i])); } }); }); } //#endregion //#region node_modules/echarts/lib/chart/graph/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$44(registers) { registers.registerChartView(GraphView); registers.registerSeriesModel(GraphSeriesModel); registers.registerProcessor(graphCategoryFilterStageHandler); registers.registerVisual(graphCategoryVisualStageHandler); registers.registerVisual(graphEdgeVisualStageHandler); registers.registerLayout(graphSimpleLayoutStageHandler); registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, graphCircularLayoutStageHandler); registers.registerLayout(graphForceLayoutStageHandler); registers.registerCoordinateSystem("graphView", { dimensions: View.dimensions, create: createViewCoordSys }); registers.registerAction({ type: "focusNodeAdjacency", event: "focusNodeAdjacency", update: "series:focusNodeAdjacency" }, noop); registers.registerAction({ type: "unfocusNodeAdjacency", event: "unfocusNodeAdjacency", update: "series:unfocusNodeAdjacency" }, noop); registerRoamActionSimply(registers, COMPONENT_MAIN_TYPE_SERIES, SERIES_TYPE_GRAPH); } //#endregion //#region node_modules/echarts/lib/chart/chord/ChordSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_CHORD = "chord"; var ChordSeriesModel = function(_super) { __extends(ChordSeriesModel, _super); function ChordSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ChordSeriesModel.type; return _this; } ChordSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); this.fillDataTextStyle(option.edges || option.links); this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this)); }; ChordSeriesModel.prototype.mergeOption = function(option) { _super.prototype.mergeOption.apply(this, arguments); this.fillDataTextStyle(option.edges || option.links); }; ChordSeriesModel.prototype.getInitialData = function(option, ecModel) { var edges = option.edges || option.links || []; var nodes = option.data || option.nodes || []; if (nodes && edges) return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data; function beforeLink(nodeData, edgeData) { var oldGetModel = Model.prototype.getModel; function newGetModel(path, parentModel) { var model = oldGetModel.call(this, path, parentModel); model.resolveParentPath = resolveParentPath; return model; } edgeData.wrapMethod("getItemModel", function(model) { model.resolveParentPath = resolveParentPath; model.getModel = newGetModel; return model; }); function resolveParentPath(pathArr) { if (pathArr && (pathArr[0] === "label" || pathArr[1] === "label")) { var newPathArr = pathArr.slice(); if (pathArr[0] === "label") newPathArr[0] = "edgeLabel"; else if (pathArr[1] === "label") newPathArr[1] = "edgeLabel"; return newPathArr; } return pathArr; } } }; ChordSeriesModel.prototype.getGraph = function() { return this.getData().graph; }; ChordSeriesModel.prototype.getEdgeData = function() { return this.getGraph().edgeData; }; ChordSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var params = this.getDataParams(dataIndex, dataType); if (dataType === "edge") { var nodeData = this.getData(); var edge = nodeData.graph.getEdgeByIndex(dataIndex); var sourceName = nodeData.getName(edge.node1.dataIndex); var targetName = nodeData.getName(edge.node2.dataIndex); var nameArr = []; sourceName != null && nameArr.push(sourceName); targetName != null && nameArr.push(targetName); return createTooltipMarkup("nameValue", { name: nameArr.join(" > "), value: params.value, noValue: params.value == null }); } return createTooltipMarkup("nameValue", { name: params.name, value: params.value, noValue: params.value == null }); }; ChordSeriesModel.prototype.getDataParams = function(dataIndex, dataType) { var params = _super.prototype.getDataParams.call(this, dataIndex, dataType); if (dataType === "node") { var nodeData = this.getData(); var node = this.getGraph().getNodeByIndex(dataIndex); if (params.name == null) params.name = nodeData.getName(dataIndex); if (params.value == null) params.value = node.getLayout().value; } return params; }; ChordSeriesModel.type = "series." + SERIES_TYPE_CHORD; ChordSeriesModel.defaultOption = { z: 2, coordinateSystem: "none", legendHoverLink: true, colorBy: "data", left: 0, top: 0, right: 0, bottom: 0, width: null, height: null, center: ["50%", "50%"], radius: ["70%", "80%"], clockwise: true, startAngle: 90, endAngle: "auto", minAngle: 0, padAngle: 3, itemStyle: { borderRadius: [ 0, 0, 5, 5 ] }, lineStyle: { width: 0, color: "source", opacity: .2 }, label: { show: true, position: "outside", distance: 5 }, emphasis: { focus: "adjacency", lineStyle: { opacity: .5 } } }; return ChordSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/chord/ChordPiece.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ChordPiece = function(_super) { __extends(ChordPiece, _super); function ChordPiece(data, idx, startAngle) { var _this = _super.call(this) || this; getECData(_this).dataType = "node"; _this.z2 = 2; var text = new ZRText(); _this.setTextContent(text); _this.updateData(data, idx, startAngle, true); return _this; } ChordPiece.prototype.updateData = function(data, idx, startAngle, firstCreate) { var sector = this; var node = data.graph.getNodeByIndex(idx); var seriesModel = data.hostModel; var itemModel = node.getModel(); var emphasisModel = itemModel.getModel("emphasis"); var layout = data.getItemLayout(idx); var shape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout, true), layout); var el = this; if (isNaN(shape.startAngle)) { el.setShape(shape); return; } if (firstCreate) el.setShape(shape); else updateProps$1(el, { shape }, seriesModel, idx); var sectorShape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout, true), layout); sector.setShape(sectorShape); sector.useStyle(data.getItemVisual(idx, "style")); setStatesStylesFromModel(sector, itemModel); this._updateLabel(seriesModel, itemModel, node); data.setItemGraphicEl(idx, el); setStatesStylesFromModel(el, itemModel, "itemStyle"); var focus = emphasisModel.get("focus"); toggleHoverEmphasis(this, focus === "adjacency" ? node.getAdjacentDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; ChordPiece.prototype._updateLabel = function(seriesModel, itemModel, node) { var label = this.getTextContent(); var layout = node.getLayout(); var midAngle = (layout.startAngle + layout.endAngle) / 2; var dx = Math.cos(midAngle); var dy = Math.sin(midAngle); var normalLabelModel = itemModel.getModel("label"); label.ignore = !normalLabelModel.get("show"); var labelStateModels = getLabelStatesModels(itemModel); var style = node.getVisual("style"); setLabelStyle(label, labelStateModels, { labelFetcher: { getFormattedLabel: function(dataIndex, stateName, dataType, labelDimIndex, formatter, extendParams) { return seriesModel.getFormattedLabel(dataIndex, stateName, "node", labelDimIndex, retrieve3(formatter, labelStateModels.normal && labelStateModels.normal.get("formatter"), itemModel.get("name")), extendParams); } }, labelDataIndex: node.dataIndex, defaultText: node.dataIndex + "", inheritColor: style.fill, defaultOpacity: style.opacity, defaultOutsidePosition: "startArc" }); var labelPosition = normalLabelModel.get("position") || "outside"; var labelPadding = normalLabelModel.get("distance") || 0; var r; if (labelPosition === "outside") r = layout.r + labelPadding; else r = (layout.r + layout.r0) / 2; this.textConfig = { inside: labelPosition !== "outside" }; var align = labelPosition !== "outside" ? normalLabelModel.get("align") || "center" : dx > 0 ? "left" : "right"; var verticalAlign = labelPosition !== "outside" ? normalLabelModel.get("verticalAlign") || "middle" : dy > 0 ? "top" : "bottom"; label.attr({ x: dx * r + layout.cx, y: dy * r + layout.cy, rotation: 0, style: { align, verticalAlign } }); }; return ChordPiece; }(Sector); //#endregion //#region node_modules/echarts/lib/chart/chord/ChordEdge.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ChordEdge = function(_super) { __extends(ChordEdge, _super); function ChordEdge(nodeData, edgeData, edgeIdx, startAngle) { var _this = _super.call(this) || this; getECData(_this).dataType = "edge"; _this.updateData(nodeData, edgeData, edgeIdx, startAngle, true); return _this; } ChordEdge.prototype.buildPath = function(ctx, shape) { ctx.moveTo(shape.s1[0], shape.s1[1]); var ratio = .7; var clockwise = shape.clockwise; ctx.arc(shape.cx, shape.cy, shape.r, shape.sStartAngle, shape.sEndAngle, !clockwise); ctx.bezierCurveTo((shape.cx - shape.s2[0]) * ratio + shape.s2[0], (shape.cy - shape.s2[1]) * ratio + shape.s2[1], (shape.cx - shape.t1[0]) * ratio + shape.t1[0], (shape.cy - shape.t1[1]) * ratio + shape.t1[1], shape.t1[0], shape.t1[1]); ctx.arc(shape.cx, shape.cy, shape.r, shape.tStartAngle, shape.tEndAngle, !clockwise); ctx.bezierCurveTo((shape.cx - shape.t2[0]) * ratio + shape.t2[0], (shape.cy - shape.t2[1]) * ratio + shape.t2[1], (shape.cx - shape.s1[0]) * ratio + shape.s1[0], (shape.cy - shape.s1[1]) * ratio + shape.s1[1], shape.s1[0], shape.s1[1]); ctx.closePath(); }; ChordEdge.prototype.updateData = function(nodeData, edgeData, edgeIdx, startAngle, firstCreate) { var seriesModel = nodeData.hostModel; var edge = edgeData.graph.getEdgeByIndex(edgeIdx); var layout = edge.getLayout(); var itemModel = edge.node1.getModel(); var edgeModel = edgeData.getItemModel(edge.dataIndex); var lineStyle = edgeModel.getModel("lineStyle"); var emphasisModel = edgeModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); var shape = extend(getSectorCornerRadius(itemModel.getModel("itemStyle"), layout, true), layout); var el = this; if (isNaN(shape.sStartAngle) || isNaN(shape.tStartAngle)) { el.setShape(shape); return; } if (firstCreate) { el.setShape(shape); applyEdgeFill(el, edge, nodeData, lineStyle); } else { saveOldStyle(el); applyEdgeFill(el, edge, nodeData, lineStyle); updateProps$1(el, { shape }, seriesModel, edgeIdx); } toggleHoverEmphasis(this, focus === "adjacency" ? edge.getAdjacentDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); setStatesStylesFromModel(el, edgeModel, "lineStyle"); edgeData.setItemGraphicEl(edge.dataIndex, el); }; return ChordEdge; }(Path); function applyEdgeFill(edgeShape, edge, nodeData, lineStyleModel) { var node1 = edge.node1; var node2 = edge.node2; var edgeStyle = edgeShape.style; edgeShape.setStyle(lineStyleModel.getLineStyle()); switch (lineStyleModel.get("color")) { case "source": edgeStyle.fill = nodeData.getItemVisual(node1.dataIndex, "style").fill; edgeStyle.decal = node1.getVisual("style").decal; break; case "target": edgeStyle.fill = nodeData.getItemVisual(node2.dataIndex, "style").fill; edgeStyle.decal = node2.getVisual("style").decal; break; case "gradient": var sourceColor = nodeData.getItemVisual(node1.dataIndex, "style").fill; var targetColor = nodeData.getItemVisual(node2.dataIndex, "style").fill; if (isString(sourceColor) && isString(targetColor)) { var shape = edgeShape.shape; edgeStyle.fill = new LinearGradient((shape.s1[0] + shape.s2[0]) / 2, (shape.s1[1] + shape.s2[1]) / 2, (shape.t1[0] + shape.t2[0]) / 2, (shape.t1[1] + shape.t2[1]) / 2, [{ offset: 0, color: sourceColor }, { offset: 1, color: targetColor }], true); } } } //#endregion //#region node_modules/echarts/lib/chart/chord/ChordView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RADIAN$2 = Math.PI / 180; var ChordView = function(_super) { __extends(ChordView, _super); function ChordView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_CHORD; return _this; } ChordView.prototype.init = function(ecModel, api) {}; ChordView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; var startAngle = -seriesModel.get("startAngle") * RADIAN$2; data.diff(oldData).add(function(newIdx) { if (data.getItemLayout(newIdx)) { var el = new ChordPiece(data, newIdx, startAngle); getECData(el).dataIndex = newIdx; group.add(el); } }).update(function(newIdx, oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); if (!data.getItemLayout(newIdx)) { el && removeElementWithFadeOut(el, seriesModel, oldIdx); return; } if (!el) el = new ChordPiece(data, newIdx, startAngle); else el.updateData(data, newIdx, startAngle); group.add(el); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && removeElementWithFadeOut(el, seriesModel, oldIdx); }).execute(); if (!oldData) { var center = seriesModel.get("center"); this.group.scaleX = .01; this.group.scaleY = .01; this.group.originX = parsePercent(center[0], api.getWidth()); this.group.originY = parsePercent(center[1], api.getHeight()); initProps(this.group, { scaleX: 1, scaleY: 1 }, seriesModel); } this._data = data; this.renderEdges(seriesModel, startAngle); }; ChordView.prototype.renderEdges = function(seriesModel, startAngle) { var nodeData = seriesModel.getData(); var edgeData = seriesModel.getEdgeData(); var oldData = this._edgeData; var group = this.group; edgeData.diff(oldData).add(function(newIdx) { var el = new ChordEdge(nodeData, edgeData, newIdx, startAngle); getECData(el).dataIndex = newIdx; group.add(el); }).update(function(newIdx, oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el.updateData(nodeData, edgeData, newIdx, startAngle); group.add(el); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && removeElementWithFadeOut(el, seriesModel, oldIdx); }).execute(); this._edgeData = edgeData; }; ChordView.prototype.dispose = function() {}; ChordView.type = SERIES_TYPE_CHORD; return ChordView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/chord/chordLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RADIAN$1 = Math.PI / 180; var chordCircularLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_CHORD, chordCircularLayout); function chordCircularLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_CHORD, function(seriesModel) { chordLayout(seriesModel, api); }); } function chordLayout(seriesModel, api) { var nodeData = seriesModel.getData(); var nodeGraph = nodeData.graph; var edgeData = seriesModel.getEdgeData(); if (!edgeData.count()) return; var _a = getCircleLayout(seriesModel, api), cx = _a.cx, cy = _a.cy, r = _a.r, r0 = _a.r0; var padAngle = Math.max((seriesModel.get("padAngle") || 0) * RADIAN$1, 0); var minAngle = Math.max((seriesModel.get("minAngle") || 0) * RADIAN$1, 0); var startAngle = -seriesModel.get("startAngle") * RADIAN$1; var endAngle = startAngle + Math.PI * 2; var clockwise = seriesModel.get("clockwise"); var dir = clockwise ? 1 : -1; var angles = [startAngle, endAngle]; normalizeArcAngles(angles, !clockwise); var normalizedStartAngle = angles[0]; var totalAngle = angles[1] - normalizedStartAngle; var allZero = nodeData.getSum("value") === 0 && edgeData.getSum("value") === 0; var nodeValues = []; var renderedNodeCount = 0; nodeGraph.eachEdge(function(edge) { var value = allZero ? 1 : edge.getValue("value"); if (allZero && (value > 0 || minAngle)) renderedNodeCount += 2; var node1Index = edge.node1.dataIndex; var node2Index = edge.node2.dataIndex; nodeValues[node1Index] = (nodeValues[node1Index] || 0) + value; nodeValues[node2Index] = (nodeValues[node2Index] || 0) + value; }); var nodeValueSum = 0; nodeGraph.eachNode(function(node) { var dataValue = node.getValue("value"); if (!isNaN(dataValue)) nodeValues[node.dataIndex] = Math.max(dataValue, nodeValues[node.dataIndex] || 0); if (!allZero && (nodeValues[node.dataIndex] > 0 || minAngle)) renderedNodeCount++; nodeValueSum += nodeValues[node.dataIndex] || 0; }); if (renderedNodeCount === 0 || nodeValueSum === 0) return; if (padAngle * renderedNodeCount >= Math.abs(totalAngle)) padAngle = Math.max(0, (Math.abs(totalAngle) - minAngle * renderedNodeCount) / renderedNodeCount); if ((padAngle + minAngle) * renderedNodeCount >= Math.abs(totalAngle)) minAngle = (Math.abs(totalAngle) - padAngle * renderedNodeCount) / renderedNodeCount; var unitAngle = (totalAngle - padAngle * renderedNodeCount * dir) / nodeValueSum; var totalDeficit = 0; var totalSurplus = 0; var totalSurplusSpan = 0; var minSurplus = Infinity; nodeGraph.eachNode(function(node) { var value = nodeValues[node.dataIndex] || 0; var spanAngle = unitAngle * (nodeValueSum ? value : 1) * dir; if (Math.abs(spanAngle) < minAngle) totalDeficit += minAngle - Math.abs(spanAngle); else { minSurplus = Math.min(minSurplus, Math.abs(spanAngle) - minAngle); totalSurplus += Math.abs(spanAngle) - minAngle; totalSurplusSpan += Math.abs(spanAngle); } node.setLayout({ angle: spanAngle, value }); }); var surplusAsMuchAsPossible = false; if (totalDeficit > totalSurplus) { var scale_1 = totalDeficit / totalSurplus; nodeGraph.eachNode(function(node) { var spanAngle = node.getLayout().angle; if (Math.abs(spanAngle) >= minAngle) node.setLayout({ angle: spanAngle * scale_1, ratio: scale_1 }, true); else node.setLayout({ angle: minAngle, ratio: minAngle === 0 ? 1 : spanAngle / minAngle }, true); }); } else nodeGraph.eachNode(function(node) { if (surplusAsMuchAsPossible) return; var spanAngle = node.getLayout().angle; if (spanAngle - Math.min(spanAngle / totalSurplusSpan, 1) * totalDeficit < minAngle) surplusAsMuchAsPossible = true; }); var restDeficit = totalDeficit; nodeGraph.eachNode(function(node) { if (restDeficit <= 0) return; var spanAngle = node.getLayout().angle; if (spanAngle > minAngle && minAngle > 0) { var borrowRatio = surplusAsMuchAsPossible ? 1 : Math.min(spanAngle / totalSurplusSpan, 1); var maxBorrowAngle = spanAngle - minAngle; var borrowAngle = Math.min(maxBorrowAngle, Math.min(restDeficit, totalDeficit * borrowRatio)); restDeficit -= borrowAngle; node.setLayout({ angle: spanAngle - borrowAngle, ratio: (spanAngle - borrowAngle) / spanAngle }, true); } else if (minAngle > 0) node.setLayout({ angle: minAngle, ratio: spanAngle === 0 ? 1 : minAngle / spanAngle }, true); }); var angle = normalizedStartAngle; var edgeAccAngle = []; nodeGraph.eachNode(function(node) { var spanAngle = Math.max(node.getLayout().angle, minAngle); node.setLayout({ cx, cy, r0, r, startAngle: angle, endAngle: angle + spanAngle * dir, clockwise }, true); edgeAccAngle[node.dataIndex] = angle; angle += (spanAngle + padAngle) * dir; }); nodeGraph.eachEdge(function(edge) { var value = allZero ? 1 : edge.getValue("value"); var spanAngle = unitAngle * (nodeValueSum ? value : 1) * dir; var node1Index = edge.node1.dataIndex; var sStartAngle = edgeAccAngle[node1Index] || 0; var sEndAngle = sStartAngle + Math.abs((edge.node1.getLayout().ratio || 1) * spanAngle) * dir; var s1 = [cx + r0 * Math.cos(sStartAngle), cy + r0 * Math.sin(sStartAngle)]; var s2 = [cx + r0 * Math.cos(sEndAngle), cy + r0 * Math.sin(sEndAngle)]; var node2Index = edge.node2.dataIndex; var tStartAngle = edgeAccAngle[node2Index] || 0; var tEndAngle = tStartAngle + Math.abs((edge.node2.getLayout().ratio || 1) * spanAngle) * dir; var t1 = [cx + r0 * Math.cos(tStartAngle), cy + r0 * Math.sin(tStartAngle)]; var t2 = [cx + r0 * Math.cos(tEndAngle), cy + r0 * Math.sin(tEndAngle)]; edge.setLayout({ s1, s2, sStartAngle, sEndAngle, t1, t2, tStartAngle, tEndAngle, cx, cy, r: r0, value, clockwise }); edgeAccAngle[node1Index] = sEndAngle; edgeAccAngle[node2Index] = tEndAngle; }); } //#endregion //#region node_modules/echarts/lib/chart/chord/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$43(registers) { registers.registerChartView(ChordView); registers.registerSeriesModel(ChordSeriesModel); registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, chordCircularLayoutStageHandler); registers.registerProcessor(dataFilter$1("chord")); } //#endregion //#region node_modules/echarts/lib/chart/gauge/PointerPath.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PointerShape = function() { function PointerShape() { this.angle = 0; this.width = 10; this.r = 10; this.x = 0; this.y = 0; } return PointerShape; }(); var PointerPath = function(_super) { __extends(PointerPath, _super); function PointerPath(opts) { var _this = _super.call(this, opts) || this; _this.type = "pointer"; return _this; } PointerPath.prototype.getDefaultShape = function() { return new PointerShape(); }; PointerPath.prototype.buildPath = function(ctx, shape) { var mathCos = Math.cos; var mathSin = Math.sin; var r = shape.r; var width = shape.width; var angle = shape.angle; var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2); var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2); angle = shape.angle - Math.PI / 2; ctx.moveTo(x, y); ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width); ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r); ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width); ctx.lineTo(x, y); }; return PointerPath; }(Path); //#endregion //#region node_modules/echarts/lib/chart/gauge/GaugeView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function parsePosition(seriesModel, api) { var center = seriesModel.get("center"); var width = api.getWidth(); var height = api.getHeight(); var size = Math.min(width, height); return { cx: parsePercent(center[0], api.getWidth()), cy: parsePercent(center[1], api.getHeight()), r: parsePercent(seriesModel.get("radius"), size / 2) }; } function formatLabel$1(value, labelFormatter) { var label = value == null ? "" : value + ""; if (labelFormatter) { if (isString(labelFormatter)) label = labelFormatter.replace("{value}", label); else if (isFunction(labelFormatter)) label = labelFormatter(value); } return label; } var GaugeView = function(_super) { __extends(GaugeView, _super); function GaugeView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GaugeView.type; return _this; } GaugeView.prototype.render = function(seriesModel, ecModel, api) { this.group.removeAll(); var colorList = seriesModel.get([ "axisLine", "lineStyle", "color" ]); var posInfo = parsePosition(seriesModel, api); this._renderMain(seriesModel, ecModel, api, colorList, posInfo); this._data = seriesModel.getData(); }; GaugeView.prototype.dispose = function() {}; GaugeView.prototype._renderMain = function(seriesModel, ecModel, api, colorList, posInfo) { var group = this.group; var clockwise = seriesModel.get("clockwise"); var startAngle = -seriesModel.get("startAngle") / 180 * Math.PI; var endAngle = -seriesModel.get("endAngle") / 180 * Math.PI; var axisLineModel = seriesModel.getModel("axisLine"); var MainPath = axisLineModel.get("roundCap") ? SausagePath : Sector; var showAxis = axisLineModel.get("show"); var lineStyleModel = axisLineModel.getModel("lineStyle"); var axisLineWidth = lineStyleModel.get("width"); var angles = [startAngle, endAngle]; normalizeArcAngles(angles, !clockwise); startAngle = angles[0]; endAngle = angles[1]; var angleRangeSpan = endAngle - startAngle; var prevEndAngle = startAngle; var sectors = []; for (var i = 0; showAxis && i < colorList.length; i++) { var percent = Math.min(Math.max(colorList[i][0], 0), 1); endAngle = startAngle + angleRangeSpan * percent; var sector = new MainPath({ shape: { startAngle: prevEndAngle, endAngle, cx: posInfo.cx, cy: posInfo.cy, clockwise, r0: posInfo.r - axisLineWidth, r: posInfo.r }, silent: true }); sector.setStyle({ fill: colorList[i][1] }); sector.setStyle(lineStyleModel.getLineStyle(["color", "width"])); sectors.push(sector); prevEndAngle = endAngle; } sectors.reverse(); each$12(sectors, function(sector) { return group.add(sector); }); var getColor = function(percent) { if (percent <= 0) return colorList[0][1]; var i; for (i = 0; i < colorList.length; i++) if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) return colorList[i][1]; return colorList[i - 1][1]; }; this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); this._renderTitleAndDetail(seriesModel, ecModel, api, getColor, posInfo); this._renderAnchor(seriesModel, posInfo); this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); }; GaugeView.prototype._renderTicks = function(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { var group = this.group; var cx = posInfo.cx; var cy = posInfo.cy; var r = posInfo.r; var minVal = +seriesModel.get("min"); var maxVal = +seriesModel.get("max"); var splitLineModel = seriesModel.getModel("splitLine"); var tickModel = seriesModel.getModel("axisTick"); var labelModel = seriesModel.getModel("axisLabel"); var splitNumber = seriesModel.get("splitNumber"); var subSplitNumber = tickModel.get("splitNumber"); var splitLineLen = parsePercent(splitLineModel.get("length"), r); var tickLen = parsePercent(tickModel.get("length"), r); var angle = startAngle; var step = (endAngle - startAngle) / splitNumber; var subStep = step / subSplitNumber; var splitLineStyle = splitLineModel.getModel("lineStyle").getLineStyle(); var tickLineStyle = tickModel.getModel("lineStyle").getLineStyle(); var splitLineDistance = splitLineModel.get("distance"); var unitX; var unitY; for (var i = 0; i <= splitNumber; i++) { unitX = Math.cos(angle); unitY = Math.sin(angle); if (splitLineModel.get("show")) { var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth; var splitLine = new Line$1({ shape: { x1: unitX * (r - distance) + cx, y1: unitY * (r - distance) + cy, x2: unitX * (r - splitLineLen - distance) + cx, y2: unitY * (r - splitLineLen - distance) + cy }, style: splitLineStyle, silent: true }); if (splitLineStyle.stroke === "auto") splitLine.setStyle({ stroke: getColor(i / splitNumber) }); group.add(splitLine); } if (labelModel.get("show")) { var distance = labelModel.get("distance") + splitLineDistance; var label = formatLabel$1(round$3(i * (maxVal - minVal) / splitNumber + minVal, 14), labelModel.get("formatter")); var autoColor = getColor(i / splitNumber); var textStyleX = unitX * (r - splitLineLen - distance) + cx; var textStyleY = unitY * (r - splitLineLen - distance) + cy; var rotateType = labelModel.get("rotate"); var rotate = 0; if (rotateType === "radial") { rotate = -angle + 2 * Math.PI; if (rotate > Math.PI / 2) rotate += Math.PI; } else if (rotateType === "tangential") rotate = -angle - Math.PI / 2; else if (isNumber(rotateType)) rotate = rotateType * Math.PI / 180; if (rotate === 0) group.add(new ZRText({ style: createTextStyle$1(labelModel, { text: label, x: textStyleX, y: textStyleY, verticalAlign: unitY < -.8 ? "top" : unitY > .8 ? "bottom" : "middle", align: unitX < -.4 ? "left" : unitX > .4 ? "right" : "center" }, { inheritColor: autoColor }), silent: true })); else group.add(new ZRText({ style: createTextStyle$1(labelModel, { text: label, x: textStyleX, y: textStyleY, verticalAlign: "middle", align: "center" }, { inheritColor: autoColor }), silent: true, originX: textStyleX, originY: textStyleY, rotation: rotate })); } if (tickModel.get("show") && i !== splitNumber) { var distance = tickModel.get("distance"); distance = distance ? distance + axisLineWidth : axisLineWidth; for (var j = 0; j <= subSplitNumber; j++) { unitX = Math.cos(angle); unitY = Math.sin(angle); var tickLine = new Line$1({ shape: { x1: unitX * (r - distance) + cx, y1: unitY * (r - distance) + cy, x2: unitX * (r - tickLen - distance) + cx, y2: unitY * (r - tickLen - distance) + cy }, silent: true, style: tickLineStyle }); if (tickLineStyle.stroke === "auto") tickLine.setStyle({ stroke: getColor((i + j / subSplitNumber) / splitNumber) }); group.add(tickLine); angle += subStep; } angle -= subStep; } else angle += step; } }; GaugeView.prototype._renderPointer = function(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { var group = this.group; var oldData = this._data; var oldProgressData = this._progressEls; var progressList = []; var showPointer = seriesModel.get(["pointer", "show"]); var progressModel = seriesModel.getModel("progress"); var showProgress = progressModel.get("show"); var data = seriesModel.getData(); var valueDim = data.mapDimension("value"); var minVal = +seriesModel.get("min"); var maxVal = +seriesModel.get("max"); var valueExtent = [minVal, maxVal]; var angleExtent = [startAngle, endAngle]; function createPointer(idx, angle) { var pointerModel = data.getItemModel(idx).getModel("pointer"); var pointerWidth = parsePercent(pointerModel.get("width"), posInfo.r); var pointerLength = parsePercent(pointerModel.get("length"), posInfo.r); var pointerStr = seriesModel.get(["pointer", "icon"]); var pointerOffset = pointerModel.get("offsetCenter"); var pointerOffsetX = parsePercent(pointerOffset[0], posInfo.r); var pointerOffsetY = parsePercent(pointerOffset[1], posInfo.r); var pointerKeepAspect = pointerModel.get("keepAspect"); var pointer; if (pointerStr) pointer = createSymbol$1(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect); else pointer = new PointerPath({ shape: { angle: -Math.PI / 2, width: pointerWidth, r: pointerLength, x: pointerOffsetX, y: pointerOffsetY } }); pointer.rotation = -(angle + Math.PI / 2); pointer.x = posInfo.cx; pointer.y = posInfo.cy; return pointer; } function createProgress(idx, endAngle) { var ProgressPath = progressModel.get("roundCap") ? SausagePath : Sector; var isOverlap = progressModel.get("overlap"); var progressWidth = isOverlap ? progressModel.get("width") : axisLineWidth / data.count(); var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth; var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth; var progress = new ProgressPath({ shape: { startAngle, endAngle, cx: posInfo.cx, cy: posInfo.cy, clockwise, r0, r } }); isOverlap && (progress.z2 = linearMap$2(data.get(valueDim, idx), [minVal, maxVal], [100, 0], true)); return progress; } if (showProgress || showPointer) { data.diff(oldData).add(function(idx) { var val = data.get(valueDim, idx); if (showPointer) { var pointer = createPointer(idx, startAngle); initProps(pointer, { rotation: -((isNaN(+val) ? angleExtent[0] : linearMap$2(val, valueExtent, angleExtent, true)) + Math.PI / 2) }, seriesModel); group.add(pointer); data.setItemGraphicEl(idx, pointer); } if (showProgress) { var progress = createProgress(idx, startAngle); initProps(progress, { shape: { endAngle: linearMap$2(val, valueExtent, angleExtent, progressModel.get("clip")) } }, seriesModel); group.add(progress); setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress); progressList[idx] = progress; } }).update(function(newIdx, oldIdx) { var val = data.get(valueDim, newIdx); if (showPointer) { var previousPointer = oldData.getItemGraphicEl(oldIdx); var previousRotate = previousPointer ? previousPointer.rotation : startAngle; var pointer = createPointer(newIdx, previousRotate); pointer.rotation = previousRotate; updateProps$1(pointer, { rotation: -((isNaN(+val) ? angleExtent[0] : linearMap$2(val, valueExtent, angleExtent, true)) + Math.PI / 2) }, seriesModel); group.add(pointer); data.setItemGraphicEl(newIdx, pointer); } if (showProgress) { var previousProgress = oldProgressData[oldIdx]; var progress = createProgress(newIdx, previousProgress ? previousProgress.shape.endAngle : startAngle); updateProps$1(progress, { shape: { endAngle: linearMap$2(val, valueExtent, angleExtent, progressModel.get("clip")) } }, seriesModel); group.add(progress); setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress); progressList[newIdx] = progress; } }).execute(); data.each(function(idx) { var itemModel = data.getItemModel(idx); var emphasisModel = itemModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); var blurScope = emphasisModel.get("blurScope"); var emphasisDisabled = emphasisModel.get("disabled"); var autoColor = getColor(linearMap$2(data.get(valueDim, idx), valueExtent, [0, 1], true)); if (showPointer) { var pointer = data.getItemGraphicEl(idx); var symbolStyle = data.getItemVisual(idx, "style"); var visualColor = symbolStyle.fill; if (pointer instanceof ZRImage) { var pathStyle = pointer.style; pointer.useStyle(extend({ image: pathStyle.image, x: pathStyle.x, y: pathStyle.y, width: pathStyle.width, height: pathStyle.height }, symbolStyle)); } else { pointer.useStyle(symbolStyle); pointer.type !== "pointer" && pointer.setColor(visualColor); } pointer.setStyle(itemModel.getModel(["pointer", "itemStyle"]).getItemStyle()); if (pointer.style.fill === "auto") pointer.setStyle("fill", autoColor); pointer.z2EmphasisLift = 0; setStatesStylesFromModel(pointer, itemModel); toggleHoverEmphasis(pointer, focus, blurScope, emphasisDisabled); } if (showProgress) { var progress = progressList[idx]; progress.useStyle(data.getItemVisual(idx, "style")); progress.setStyle(itemModel.getModel(["progress", "itemStyle"]).getItemStyle()); if (progress.style.fill === "auto") progress.setStyle("fill", autoColor); progress.z2EmphasisLift = 0; setStatesStylesFromModel(progress, itemModel); toggleHoverEmphasis(progress, focus, blurScope, emphasisDisabled); } }); this._progressEls = progressList; } }; GaugeView.prototype._renderAnchor = function(seriesModel, posInfo) { var anchorModel = seriesModel.getModel("anchor"); if (anchorModel.get("show")) { var anchorSize = anchorModel.get("size"); var anchorType = anchorModel.get("icon"); var offsetCenter = anchorModel.get("offsetCenter"); var anchorKeepAspect = anchorModel.get("keepAspect"); var anchor = createSymbol$1(anchorType, posInfo.cx - anchorSize / 2 + parsePercent(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect); anchor.z2 = anchorModel.get("showAbove") ? 1 : 0; anchor.setStyle(anchorModel.getModel("itemStyle").getItemStyle()); this.group.add(anchor); } }; GaugeView.prototype._renderTitleAndDetail = function(seriesModel, ecModel, api, getColor, posInfo) { var _this = this; var data = seriesModel.getData(); var valueDim = data.mapDimension("value"); var minVal = +seriesModel.get("min"); var maxVal = +seriesModel.get("max"); var contentGroup = new Group$3(); var newTitleEls = []; var newDetailEls = []; var hasAnimation = seriesModel.isAnimationEnabled(); var showPointerAbove = seriesModel.get(["pointer", "showAbove"]); data.diff(this._data).add(function(idx) { newTitleEls[idx] = new ZRText({ silent: true }); newDetailEls[idx] = new ZRText({ silent: true }); }).update(function(idx, oldIdx) { newTitleEls[idx] = _this._titleEls[oldIdx]; newDetailEls[idx] = _this._detailEls[oldIdx]; }).execute(); data.each(function(idx) { var itemModel = data.getItemModel(idx); var value = data.get(valueDim, idx); var itemGroup = new Group$3(); var autoColor = getColor(linearMap$2(value, [minVal, maxVal], [0, 1], true)); var itemTitleModel = itemModel.getModel("title"); if (itemTitleModel.get("show")) { var titleOffsetCenter = itemTitleModel.get("offsetCenter"); var titleX = posInfo.cx + parsePercent(titleOffsetCenter[0], posInfo.r); var titleY = posInfo.cy + parsePercent(titleOffsetCenter[1], posInfo.r); var labelEl = newTitleEls[idx]; labelEl.attr({ z2: showPointerAbove ? 0 : 2, style: createTextStyle$1(itemTitleModel, { x: titleX, y: titleY, text: data.getName(idx), align: "center", verticalAlign: "middle" }, { inheritColor: autoColor }) }); itemGroup.add(labelEl); } var itemDetailModel = itemModel.getModel("detail"); if (itemDetailModel.get("show")) { var detailOffsetCenter = itemDetailModel.get("offsetCenter"); var detailX = posInfo.cx + parsePercent(detailOffsetCenter[0], posInfo.r); var detailY = posInfo.cy + parsePercent(detailOffsetCenter[1], posInfo.r); var width = parsePercent(itemDetailModel.get("width"), posInfo.r); var height = parsePercent(itemDetailModel.get("height"), posInfo.r); var detailColor = seriesModel.get(["progress", "show"]) ? data.getItemVisual(idx, "style").fill : autoColor; var labelEl = newDetailEls[idx]; var formatter_1 = itemDetailModel.get("formatter"); labelEl.attr({ z2: showPointerAbove ? 0 : 2, style: createTextStyle$1(itemDetailModel, { x: detailX, y: detailY, text: formatLabel$1(value, formatter_1), width: isNaN(width) ? null : width, height: isNaN(height) ? null : height, align: "center", verticalAlign: "middle" }, { inheritColor: detailColor }) }); setLabelValueAnimation(labelEl, { normal: itemDetailModel }, value, function(value) { return formatLabel$1(value, formatter_1); }); hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, { getFormattedLabel: function(labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) { return formatLabel$1(extendParams ? extendParams.interpolatedValue : value, formatter_1); } }); itemGroup.add(labelEl); } contentGroup.add(itemGroup); }); this.group.add(contentGroup); this._titleEls = newTitleEls; this._detailEls = newDetailEls; }; GaugeView.type = "gauge"; return GaugeView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/gauge/GaugeSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GaugeSeriesModel = function(_super) { __extends(GaugeSeriesModel, _super); function GaugeSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GaugeSeriesModel.type; _this.visualStyleAccessPath = "itemStyle"; return _this; } GaugeSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesDataSimply(this, ["value"]); }; GaugeSeriesModel.type = "series.gauge"; GaugeSeriesModel.defaultOption = { z: 2, colorBy: "data", center: ["50%", "50%"], legendHoverLink: true, radius: "75%", startAngle: 225, endAngle: -45, clockwise: true, min: 0, max: 100, splitNumber: 10, axisLine: { show: true, roundCap: false, lineStyle: { color: [[1, tokens.color.neutral10]], width: 10 } }, progress: { show: false, overlap: true, width: 10, roundCap: false, clip: true }, splitLine: { show: true, length: 10, distance: 10, lineStyle: { color: tokens.color.axisTick, width: 3, type: "solid" } }, axisTick: { show: true, splitNumber: 5, length: 6, distance: 10, lineStyle: { color: tokens.color.axisTickMinor, width: 1, type: "solid" } }, axisLabel: { show: true, distance: 15, color: tokens.color.axisLabel, fontSize: 12, rotate: 0 }, pointer: { icon: null, offsetCenter: [0, 0], show: true, showAbove: true, length: "60%", width: 6, keepAspect: false }, anchor: { show: false, showAbove: false, size: 6, icon: "circle", offsetCenter: [0, 0], keepAspect: false, itemStyle: { color: tokens.color.neutral00, borderWidth: 0, borderColor: tokens.color.theme[0] } }, title: { show: true, offsetCenter: [0, "20%"], color: tokens.color.secondary, fontSize: 16, valueAnimation: false }, detail: { show: true, backgroundColor: tokens.color.transparent, borderWidth: 0, borderColor: tokens.color.neutral40, width: 100, height: null, padding: [5, 10], offsetCenter: [0, "40%"], color: tokens.color.primary, fontSize: 30, fontWeight: "bold", lineHeight: 30, valueAnimation: false } }; return GaugeSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/gauge/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$42(registers) { registers.registerChartView(GaugeView); registers.registerSeriesModel(GaugeSeriesModel); } //#endregion //#region node_modules/echarts/lib/chart/funnel/FunnelSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_FUNNEL = "funnel"; var FunnelSeriesModel = function(_super) { __extends(FunnelSeriesModel, _super); function FunnelSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = FunnelSeriesModel.type; return _this; } FunnelSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this)); this._defaultLabelLine(option); }; FunnelSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesDataSimply(this, { coordDimensions: ["value"], encodeDefaulter: curry$1(makeSeriesEncodeForNameBased, this) }); }; FunnelSeriesModel.prototype._defaultLabelLine = function(option) { defaultEmphasis(option, "labelLine", ["show"]); var labelLineNormalOpt = option.labelLine; var labelLineEmphasisOpt = option.emphasis.labelLine; labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show; labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show; }; FunnelSeriesModel.prototype.getDataParams = function(dataIndex) { var data = this.getData(); var params = _super.prototype.getDataParams.call(this, dataIndex); var valueDim = data.mapDimension("value"); var sum = data.getSum(valueDim); params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2); params.$vars.push("percent"); return params; }; FunnelSeriesModel.type = "series." + SERIES_TYPE_FUNNEL; FunnelSeriesModel.defaultOption = { coordinateSystemUsage: "box", z: 2, legendHoverLink: true, colorBy: "data", left: 80, top: 60, right: 80, bottom: 65, minSize: "0%", maxSize: "100%", sort: "descending", orient: "vertical", gap: 0, funnelAlign: "center", label: { show: true, position: "outer" }, labelLine: { show: true, length: 20, lineStyle: { width: 1 } }, itemStyle: { borderColor: tokens.color.neutral00, borderWidth: 1 }, emphasis: { label: { show: true } }, select: { itemStyle: { borderColor: tokens.color.primary } } }; return FunnelSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/funnel/FunnelView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var opacityAccessPath$1 = ["itemStyle", "opacity"]; /** * Piece of pie including Sector, Label, LabelLine */ var FunnelPiece = function(_super) { __extends(FunnelPiece, _super); function FunnelPiece(data, idx) { var _this = _super.call(this) || this; var polygon = _this; var labelLine = new Polyline$1(); var text = new ZRText(); polygon.setTextContent(text); _this.setTextGuideLine(labelLine); _this.updateData(data, idx, true); return _this; } FunnelPiece.prototype.updateData = function(data, idx, firstCreate) { var polygon = this; var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var layout = data.getItemLayout(idx); var emphasisModel = itemModel.getModel("emphasis"); var opacity = itemModel.get(opacityAccessPath$1); opacity = opacity == null ? 1 : opacity; if (!firstCreate) saveOldStyle(polygon); polygon.useStyle(data.getItemVisual(idx, "style")); polygon.style.lineJoin = "round"; if (firstCreate) { polygon.setShape({ points: layout.points }); polygon.style.opacity = 0; initProps(polygon, { style: { opacity } }, seriesModel, idx); } else updateProps$1(polygon, { style: { opacity }, shape: { points: layout.points } }, seriesModel, idx); setStatesStylesFromModel(polygon, itemModel); this._updateLabel(data, idx); toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; FunnelPiece.prototype._updateLabel = function(data, idx) { var polygon = this; var labelLine = this.getTextGuideLine(); var labelText = polygon.getTextContent(); var seriesModel = data.hostModel; var itemModel = data.getItemModel(idx); var labelLayout = data.getItemLayout(idx).label; var style = data.getItemVisual(idx, "style"); var visualColor = style.fill; setLabelStyle(labelText, getLabelStatesModels(itemModel), { labelFetcher: data.hostModel, labelDataIndex: idx, defaultOpacity: style.opacity, defaultText: data.getName(idx) }, { normal: { align: labelLayout.textAlign, verticalAlign: labelLayout.verticalAlign } }); var overrideColor = itemModel.getModel("label").get("color") === "inherit" ? visualColor : null; polygon.setTextConfig({ local: true, inside: !!labelLayout.inside, insideStroke: overrideColor, outsideFill: overrideColor }); var linePoints = labelLayout.linePoints; labelLine.setShape({ points: linePoints }); polygon.textGuideLineConfig = { anchor: linePoints ? new Point(linePoints[0][0], linePoints[0][1]) : null }; updateProps$1(labelText, { style: { x: labelLayout.x, y: labelLayout.y } }, seriesModel, idx); labelText.attr({ rotation: labelLayout.rotation, originX: labelLayout.x, originY: labelLayout.y, z2: 10 }); setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), { stroke: visualColor }); }; return FunnelPiece; }(Polygon); var FunnelView = function(_super) { __extends(FunnelView, _super); function FunnelView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_FUNNEL; _this.ignoreLabelLineUpdate = true; return _this; } FunnelView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; data.diff(oldData).add(function(idx) { var funnelPiece = new FunnelPiece(data, idx); data.setItemGraphicEl(idx, funnelPiece); group.add(funnelPiece); }).update(function(newIdx, oldIdx) { var piece = oldData.getItemGraphicEl(oldIdx); piece.updateData(data, newIdx); group.add(piece); data.setItemGraphicEl(newIdx, piece); }).remove(function(idx) { removeElementWithFadeOut(oldData.getItemGraphicEl(idx), seriesModel, idx); }).execute(); this._data = data; }; FunnelView.prototype.remove = function() { this.group.removeAll(); this._data = null; }; FunnelView.prototype.dispose = function() {}; FunnelView.type = SERIES_TYPE_FUNNEL; return FunnelView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/funnel/funnelLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getSortedIndices(data, sort) { var valueDim = data.mapDimension("value"); var valueArr = data.mapArray(valueDim, function(val) { return val; }); var indices = []; var isAscending = sort === "ascending"; for (var i = 0, len = data.count(); i < len; i++) indices[i] = i; if (isFunction(sort)) indices.sort(sort); else if (sort !== "none") indices.sort(function(a, b) { return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a]; }); return indices; } function labelLayout(data) { var seriesModel = data.hostModel; var isHorizontal = isOrientHorizontal(seriesModel); data.each(function(idx) { var itemModel = data.getItemModel(idx); var labelPosition = itemModel.getModel("label").get("position"); var labelLineModel = itemModel.getModel("labelLine"); var layout = data.getItemLayout(idx); var points = layout.points; var isLabelInside = labelPosition === "inner" || labelPosition === "inside" || labelPosition === "center" || labelPosition === "insideLeft" || labelPosition === "insideRight"; var textAlign; var textX; var textY; var linePoints; if (isLabelInside) { if (labelPosition === "insideLeft") { textX = (points[0][0] + points[3][0]) / 2 + 5; textY = (points[0][1] + points[3][1]) / 2; textAlign = "left"; } else if (labelPosition === "insideRight") { textX = (points[1][0] + points[2][0]) / 2 - 5; textY = (points[1][1] + points[2][1]) / 2; textAlign = "right"; } else { textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4; textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4; textAlign = "center"; } linePoints = [[textX, textY], [textX, textY]]; } else { var x1 = void 0; var y1 = void 0; var x2 = void 0; var y2 = void 0; var labelLineLen = labelLineModel.get("length"); if (isString(labelPosition)) { if (!isHorizontal && indexOf(["top", "bottom"], labelPosition) > -1) { labelPosition = "left"; console.warn("Position error: Funnel chart on vertical orient dose not support top and bottom."); } if (isHorizontal && indexOf(["left", "right"], labelPosition) > -1) { labelPosition = "bottom"; console.warn("Position error: Funnel chart on horizontal orient dose not support left and right."); } } if (labelPosition === "left") { x1 = (points[3][0] + points[0][0]) / 2; y1 = (points[3][1] + points[0][1]) / 2; x2 = x1 - labelLineLen; textX = x2 - 5; textAlign = "right"; } else if (labelPosition === "right") { x1 = (points[1][0] + points[2][0]) / 2; y1 = (points[1][1] + points[2][1]) / 2; x2 = x1 + labelLineLen; textX = x2 + 5; textAlign = "left"; } else if (labelPosition === "top") { x1 = (points[3][0] + points[0][0]) / 2; y1 = (points[3][1] + points[0][1]) / 2; y2 = y1 - labelLineLen; textY = y2 - 5; textAlign = "center"; } else if (labelPosition === "bottom") { x1 = (points[1][0] + points[2][0]) / 2; y1 = (points[1][1] + points[2][1]) / 2; y2 = y1 + labelLineLen; textY = y2 + 5; textAlign = "center"; } else if (labelPosition === "rightTop") { x1 = isHorizontal ? points[3][0] : points[1][0]; y1 = isHorizontal ? points[3][1] : points[1][1]; if (isHorizontal) { y2 = y1 - labelLineLen; textY = y2 - 5; textAlign = "center"; } else { x2 = x1 + labelLineLen; textX = x2 + 5; textAlign = "top"; } } else if (labelPosition === "rightBottom") { x1 = points[2][0]; y1 = points[2][1]; if (isHorizontal) { y2 = y1 + labelLineLen; textY = y2 + 5; textAlign = "center"; } else { x2 = x1 + labelLineLen; textX = x2 + 5; textAlign = "bottom"; } } else if (labelPosition === "leftTop") { x1 = points[0][0]; y1 = isHorizontal ? points[0][1] : points[1][1]; if (isHorizontal) { y2 = y1 - labelLineLen; textY = y2 - 5; textAlign = "center"; } else { x2 = x1 - labelLineLen; textX = x2 - 5; textAlign = "right"; } } else if (labelPosition === "leftBottom") { x1 = isHorizontal ? points[1][0] : points[3][0]; y1 = isHorizontal ? points[1][1] : points[2][1]; if (isHorizontal) { y2 = y1 + labelLineLen; textY = y2 + 5; textAlign = "center"; } else { x2 = x1 - labelLineLen; textX = x2 - 5; textAlign = "right"; } } else { x1 = (points[1][0] + points[2][0]) / 2; y1 = (points[1][1] + points[2][1]) / 2; if (isHorizontal) { y2 = y1 + labelLineLen; textY = y2 + 5; textAlign = "center"; } else { x2 = x1 + labelLineLen; textX = x2 + 5; textAlign = "left"; } } if (isHorizontal) { x2 = x1; textX = x2; } else { y2 = y1; textY = y2; } linePoints = [[x1, y1], [x2, y2]]; } layout.label = { linePoints, x: textX, y: textY, verticalAlign: "middle", textAlign, inside: isLabelInside }; }); } var funnelLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_FUNNEL, funnelLayout); function funnelLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_FUNNEL, function(seriesModel) { var data = seriesModel.getData(); var valueDim = data.mapDimension("value"); var sort = seriesModel.get("sort"); var layoutRef = createBoxLayoutReference(seriesModel, api); var viewRect = getLayoutRect(seriesModel.getBoxLayoutParams(), layoutRef.refContainer); var isHorizontal = isOrientHorizontal(seriesModel); var viewWidth = viewRect.width; var viewHeight = viewRect.height; var indices = getSortedIndices(data, sort); var x = viewRect.x; var y = viewRect.y; var sizeExtent = isHorizontal ? [parsePercent(seriesModel.get("minSize"), viewHeight), parsePercent(seriesModel.get("maxSize"), viewHeight)] : [parsePercent(seriesModel.get("minSize"), viewWidth), parsePercent(seriesModel.get("maxSize"), viewWidth)]; var dataExtent = data.getDataExtent(valueDim); var min = seriesModel.get("min"); var max = seriesModel.get("max"); if (min == null) min = Math.min(dataExtent[0], 0); if (max == null) max = dataExtent[1]; var funnelAlign = seriesModel.get("funnelAlign"); var gap = seriesModel.get("gap"); var itemSize = ((isHorizontal ? viewWidth : viewHeight) - gap * (data.count() - 1)) / data.count(); var getLinePoints = function(idx, offset) { if (isHorizontal) { var itemHeight = linearMap$2(data.get(valueDim, idx) || 0, [min, max], sizeExtent, true); var y0 = void 0; switch (funnelAlign) { case "top": y0 = y; break; case "center": y0 = y + (viewHeight - itemHeight) / 2; break; case "bottom": y0 = y + (viewHeight - itemHeight); } return [[offset, y0], [offset, y0 + itemHeight]]; } var itemWidth = linearMap$2(data.get(valueDim, idx) || 0, [min, max], sizeExtent, true); var x0; switch (funnelAlign) { case "left": x0 = x; break; case "center": x0 = x + (viewWidth - itemWidth) / 2; break; case "right": x0 = x + viewWidth - itemWidth; } return [[x0, offset], [x0 + itemWidth, offset]]; }; if (sort === "ascending") { itemSize = -itemSize; gap = -gap; if (isHorizontal) x += viewWidth; else y += viewHeight; indices = indices.reverse(); } for (var i = 0; i < indices.length; i++) { var idx = indices[i]; var nextIdx = indices[i + 1]; var itemModel = data.getItemModel(idx); if (isHorizontal) { var width = itemModel.get(["itemStyle", "width"]); if (width == null) width = itemSize; else { width = parsePercent(width, viewWidth); if (sort === "ascending") width = -width; } var start = getLinePoints(idx, x); var end = getLinePoints(nextIdx, x + width); x += width + gap; data.setItemLayout(idx, { points: start.concat(end.slice().reverse()) }); } else { var height = itemModel.get(["itemStyle", "height"]); if (height == null) height = itemSize; else { height = parsePercent(height, viewHeight); if (sort === "ascending") height = -height; } var start = getLinePoints(idx, y); var end = getLinePoints(nextIdx, y + height); y += height + gap; data.setItemLayout(idx, { points: start.concat(end.slice().reverse()) }); } } labelLayout(data); }); } function isOrientHorizontal(seriesModel) { return seriesModel.get("orient") === "horizontal"; } //#endregion //#region node_modules/echarts/lib/chart/funnel/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$41(registers) { registers.registerChartView(FunnelView); registers.registerSeriesModel(FunnelSeriesModel); registers.registerLayout(funnelLayoutStageHandler); registers.registerProcessor(dataFilter$1(SERIES_TYPE_FUNNEL)); } //#endregion //#region node_modules/echarts/lib/chart/parallel/ParallelView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_SMOOTH = .3; var ParallelView$1 = function(_super) { __extends(ParallelView, _super); function ParallelView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelView.type; _this._dataGroup = new Group$3(); _this._initialized = false; return _this; } ParallelView.prototype.init = function() { this.group.add(this._dataGroup); }; /** * @override */ ParallelView.prototype.render = function(seriesModel, ecModel, api, payload) { var dataGroup = this._dataGroup; this._progressiveEls = []; dataGroup.removeAll(); var data = seriesModel.getData(); var oldData = this._data; var coordSys = seriesModel.coordinateSystem; var dimensions = coordSys.dimensions; var seriesScope = makeSeriesScope(seriesModel); data.diff(oldData).add(add).update(update).remove(remove).execute(); function add(newDataIndex) { updateElCommon(addEl(data, dataGroup, newDataIndex, dimensions, coordSys), data, newDataIndex, seriesScope); } function update(newDataIndex, oldDataIndex) { var line = oldData.getItemGraphicEl(oldDataIndex); dataGroup.add(line); var points = createLinePoints(data, newDataIndex, dimensions, coordSys); data.setItemGraphicEl(newDataIndex, line); updateProps$1(line, { shape: { points } }, seriesModel, newDataIndex); saveOldStyle(line); updateElCommon(line, data, newDataIndex, seriesScope); } function remove(oldDataIndex) { var line = oldData.getItemGraphicEl(oldDataIndex); dataGroup.remove(line); } if (!this._initialized) { this._initialized = true; var clipPath = createGridClipShape$2(coordSys, seriesModel, function() { setTimeout(function() { dataGroup.removeClipPath(); }); }); dataGroup.setClipPath(clipPath); } this._data = data; }; ParallelView.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { this._initialized = true; this._data = null; this._dataGroup.removeAll(); }; ParallelView.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) { var data = seriesModel.getData(); var coordSys = seriesModel.coordinateSystem; var progressiveEls = this._progressiveEls = []; for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) { var line = addEl(data, this._dataGroup, dataIndex, coordSys.dimensions, coordSys); line.incremental = getIncrementalId(seriesModel); updateElCommon(line, data, dataIndex, makeSeriesScope(seriesModel)); progressiveEls.push(line); } }; ParallelView.prototype.remove = function() { this._dataGroup && this._dataGroup.removeAll(); this._data = null; }; ParallelView.type = "parallel"; return ParallelView; }(ChartView); function createGridClipShape$2(coordSys, seriesModel, cb) { var parallelModel = coordSys.model; var rect = coordSys.getRect(); var rectEl = new Rect$2({ shape: { x: rect.x, y: rect.y, width: rect.width, height: rect.height } }); var dim = parallelModel.get("layout") === "horizontal" ? "width" : "height"; rectEl.setShape(dim, 0); initProps(rectEl, { shape: { width: rect.width, height: rect.height } }, seriesModel, cb); return rectEl; } function createLinePoints(data, dataIndex, dimensions, coordSys) { var points = []; for (var i = 0; i < dimensions.length; i++) { var dimName = dimensions[i]; var value = data.get(data.mapDimension(dimName), dataIndex); if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) points.push(coordSys.dataToPoint(value, dimName)); } return points; } function addEl(data, dataGroup, dataIndex, dimensions, coordSys) { var line = new Polyline$1({ shape: { points: createLinePoints(data, dataIndex, dimensions, coordSys) }, z2: 10 }); dataGroup.add(line); data.setItemGraphicEl(dataIndex, line); return line; } function makeSeriesScope(seriesModel) { var smooth = seriesModel.get("smooth", true); smooth === true && (smooth = DEFAULT_SMOOTH); smooth = numericToNumber(smooth); eqNaN(smooth) && (smooth = 0); return { smooth }; } function updateElCommon(el, data, dataIndex, seriesScope) { el.useStyle(data.getItemVisual(dataIndex, "style")); el.style.fill = null; el.setShape("smooth", seriesScope.smooth); var itemModel = data.getItemModel(dataIndex); var emphasisModel = itemModel.getModel("emphasis"); setStatesStylesFromModel(el, itemModel, "lineStyle"); toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); } function isEmptyValue(val, axisType) { return axisType === "category" ? val == null : val == null || isNaN(val); } //#endregion //#region node_modules/echarts/lib/chart/parallel/ParallelSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ParallelSeriesModel = function(_super) { __extends(ParallelSeriesModel, _super); function ParallelSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelSeriesModel.type; _this.visualStyleAccessPath = "lineStyle"; _this.visualDrawType = "stroke"; return _this; } ParallelSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this, { useEncodeDefaulter: bind$1(makeDefaultEncode, null, this) }); }; /** * User can get data raw indices on 'axisAreaSelected' event received. * * @return Raw indices */ ParallelSeriesModel.prototype.getRawIndicesByActiveState = function(activeState) { var coordSys = this.coordinateSystem; var data = this.getData(); var indices = []; coordSys.eachActiveState(data, function(theActiveState, dataIndex) { if (activeState === theActiveState) indices.push(data.getRawIndex(dataIndex)); }); return indices; }; ParallelSeriesModel.type = "series.parallel"; ParallelSeriesModel.dependencies = ["parallel"]; ParallelSeriesModel.defaultOption = { z: 2, coordinateSystem: "parallel", parallelIndex: 0, label: { show: false }, inactiveOpacity: .05, activeOpacity: 1, lineStyle: { width: 1, opacity: .45, type: "solid" }, emphasis: { label: { show: false } }, progressive: 300, smooth: false, animationEasing: "linear" }; return ParallelSeriesModel; }(SeriesModel); function makeDefaultEncode(seriesModel) { var parallelModel = seriesModel.ecModel.getComponent("parallel", seriesModel.get("parallelIndex")); if (!parallelModel) return; var encodeDefine = {}; each$12(parallelModel.dimensions, function(axisDim) { encodeDefine[axisDim] = convertDimNameToNumber(axisDim); }); return encodeDefine; } function convertDimNameToNumber(dimName) { return +dimName.replace("dim", ""); } //#endregion //#region node_modules/echarts/lib/chart/parallel/parallelVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var opacityAccessPath = ["lineStyle", "opacity"]; var parallelVisual = { seriesType: "parallel", reset: function(seriesModel, ecModel) { var coordSys = seriesModel.coordinateSystem; var opacityMap = { normal: seriesModel.get(["lineStyle", "opacity"]), active: seriesModel.get("activeOpacity"), inactive: seriesModel.get("inactiveOpacity") }; return { progress: function(params, data) { coordSys.eachActiveState(data, function(activeState, dataIndex) { var opacity = opacityMap[activeState]; if (activeState === "normal" && data.hasItemOption) { var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath, true); itemOpacity != null && (opacity = itemOpacity); } var existsStyle = data.ensureUniqueItemVisual(dataIndex, "style"); existsStyle.opacity = opacity; }, params.start, params.end); } }; } }; //#endregion //#region node_modules/echarts/lib/coord/parallel/parallelPreprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function parallelPreprocessor(option) { createParallelIfNeeded(option); mergeAxisOptionFromParallel(option); } /** * Create a parallel coordinate if not exists. * @inner */ function createParallelIfNeeded(option) { if (option.parallel) return; var hasParallelSeries = false; each$12(option.series, function(seriesOpt) { if (seriesOpt && seriesOpt.type === "parallel") hasParallelSeries = true; }); if (hasParallelSeries) option.parallel = [{}]; } /** * Merge aixs definition from parallel option (if exists) to axis option. * @inner */ function mergeAxisOptionFromParallel(option) { each$12(normalizeToArray(option.parallelAxis), function(axisOption) { if (!isObject$3(axisOption)) return; var parallelIndex = axisOption.parallelIndex || 0; var parallelOption = normalizeToArray(option.parallel)[parallelIndex]; if (parallelOption && parallelOption.parallelAxisDefault) merge(axisOption, parallelOption.parallelAxisDefault, false); }); } //#endregion //#region node_modules/echarts/lib/component/parallel/ParallelView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CLICK_THRESHOLD = 5; var ParallelView = function(_super) { __extends(ParallelView, _super); function ParallelView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelView.type; return _this; } ParallelView.prototype.render = function(parallelModel, ecModel, api) { this._model = parallelModel; this._api = api; if (!this._handlers) { this._handlers = {}; each$12(handlers$1, function(handler, eventName) { api.getZr().on(eventName, this._handlers[eventName] = bind$1(handler, this)); }, this); } createOrUpdate(this, "_throttledDispatchExpand", parallelModel.get("axisExpandRate"), "fixRate"); }; ParallelView.prototype.dispose = function(ecModel, api) { clear$1(this, "_throttledDispatchExpand"); each$12(this._handlers, function(handler, eventName) { api.getZr().off(eventName, handler); }); this._handlers = null; }; /** * @internal * @param {Object} [opt] If null, cancel the last action triggering for debounce. */ ParallelView.prototype._throttledDispatchExpand = function(opt) { this._dispatchExpand(opt); }; /** * @internal */ ParallelView.prototype._dispatchExpand = function(opt) { opt && this._api.dispatchAction(extend({ type: "parallelAxisExpand" }, opt)); }; ParallelView.type = "parallel"; return ParallelView; }(ComponentView); var handlers$1 = { mousedown: function(e) { if (checkTrigger(this, "click")) this._mouseDownPoint = [e.offsetX, e.offsetY]; }, mouseup: function(e) { var mouseDownPoint = this._mouseDownPoint; if (checkTrigger(this, "click") && mouseDownPoint) { var point = [e.offsetX, e.offsetY]; if (Math.pow(mouseDownPoint[0] - point[0], 2) + Math.pow(mouseDownPoint[1] - point[1], 2) > CLICK_THRESHOLD) return; var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]); result.behavior !== "none" && this._dispatchExpand({ axisExpandWindow: result.axisExpandWindow }); } this._mouseDownPoint = null; }, mousemove: function(e) { if (this._mouseDownPoint || !checkTrigger(this, "mousemove")) return; var model = this._model; var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]); var behavior = result.behavior; behavior === "jump" && this._throttledDispatchExpand.debounceNextCall(model.get("axisExpandDebounce")); this._throttledDispatchExpand(behavior === "none" ? null : { axisExpandWindow: result.axisExpandWindow, animation: behavior === "jump" ? null : { duration: 0 } }); } }; function checkTrigger(view, triggerOn) { var model = view._model; return model.get("axisExpandable") && model.get("axisExpandTriggerOn") === triggerOn; } //#endregion //#region node_modules/echarts/lib/coord/parallel/ParallelModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var COORD_SYS_TYPE_PARALLEL = "parallel"; var COMPONENT_TYPE_PARALLEL = COORD_SYS_TYPE_PARALLEL; var ParallelModel = function(_super) { __extends(ParallelModel, _super); function ParallelModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelModel.type; return _this; } ParallelModel.prototype.init = function() { _super.prototype.init.apply(this, arguments); this.mergeOption({}); }; ParallelModel.prototype.mergeOption = function(newOption) { var thisOption = this.option; newOption && merge(thisOption, newOption, true); this._initDimensions(); }; /** * Whether series or axis is in this coordinate system. */ ParallelModel.prototype.contains = function(model, ecModel) { var parallelIndex = model.get("parallelIndex"); return parallelIndex != null && ecModel.getComponent("parallel", parallelIndex) === this; }; ParallelModel.prototype.setAxisExpand = function(opt) { each$12([ "axisExpandable", "axisExpandCenter", "axisExpandCount", "axisExpandWidth", "axisExpandWindow" ], function(name) { if (opt.hasOwnProperty(name)) this.option[name] = opt[name]; }, this); }; ParallelModel.prototype._initDimensions = function() { var dimensions = this.dimensions = []; var parallelAxisIndex = this.parallelAxisIndex = []; each$12(filter(this.ecModel.queryComponents({ mainType: "parallelAxis" }), function(axisModel) { return (axisModel.get("parallelIndex") || 0) === this.componentIndex; }, this), function(axisModel) { dimensions.push("dim" + axisModel.get("dim")); parallelAxisIndex.push(axisModel.componentIndex); }); }; ParallelModel.type = COMPONENT_TYPE_PARALLEL; ParallelModel.dependencies = ["parallelAxis"]; ParallelModel.layoutMode = "box"; ParallelModel.defaultOption = { z: 0, left: 80, top: 60, right: 80, bottom: 60, layout: "horizontal", axisExpandable: false, axisExpandCenter: null, axisExpandCount: 0, axisExpandWidth: 50, axisExpandRate: 17, axisExpandDebounce: 50, axisExpandSlideTriggerArea: [ -.15, .05, .4 ], axisExpandTriggerOn: "click", parallelAxisDefault: null }; return ParallelModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/coord/parallel/ParallelAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ParallelAxis = function(_super) { __extends(ParallelAxis, _super); function ParallelAxis(dim, scale, coordExtent, axisType, axisIndex) { var _this = _super.call(this, dim, scale, coordExtent) || this; _this.type = axisType || "value"; _this.axisIndex = axisIndex; return _this; } ParallelAxis.prototype.isHorizontal = function() { return this.coordinateSystem.getModel().get("layout") !== "horizontal"; }; return ParallelAxis; }(Axis); //#endregion //#region node_modules/echarts/lib/component/helper/sliderMove.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Calculate slider move result. * Usage: * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`. * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`. * * [CAVEAT] * This method is inefficient due to the use of `addSafe`. * * @param delta Move length. * @param handleEnds handleEnds[0] can be bigger then handleEnds[1]. * handleEnds will be modified in this method. * @param extent handleEnds is restricted by extent. * extent[0] should less or equals than extent[1]. * @param handleIndex Can be 'all', means that both move the two handleEnds. * @param minSpan The range of dataZoom can not be smaller than that. * If not set, handle0 and cross handle1. If set as a non-negative * number (including `0`), handles will push each other when reaching * the minSpan. * @param maxSpan The range of dataZoom can not be larger than that. * @return The input handleEnds. */ function sliderMove(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) { delta = delta || 0; var extentSpan = addSafe(extent[1], -extent[0]); if (minSpan != null) minSpan = restrict$1(minSpan, [0, extentSpan]); if (maxSpan != null) maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0); if (handleIndex === "all") { var handleSpan = Math.abs(addSafe(handleEnds[1], -handleEnds[0])); handleSpan = restrict$1(handleSpan, [0, extentSpan]); minSpan = maxSpan = restrict$1(handleSpan, [minSpan, maxSpan]); handleIndex = 0; } handleEnds[0] = restrict$1(handleEnds[0], extent); handleEnds[1] = restrict$1(handleEnds[1], extent); var originalDistSign = getSpanSign(handleEnds, handleIndex); handleEnds[handleIndex] += delta; var extentMinSpan = minSpan || 0; var realExtent = extent.slice(); originalDistSign.sign < 0 ? realExtent[0] = addSafe(realExtent[0], extentMinSpan) : realExtent[1] = addSafe(realExtent[1], -extentMinSpan); handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent); var currDistSign = getSpanSign(handleEnds, handleIndex); if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) handleEnds[1 - handleIndex] = addSafe(handleEnds[handleIndex], originalDistSign.sign * minSpan); currDistSign = getSpanSign(handleEnds, handleIndex); if (maxSpan != null && currDistSign.span > maxSpan) handleEnds[1 - handleIndex] = addSafe(handleEnds[handleIndex], currDistSign.sign * maxSpan); return handleEnds; } function getSpanSign(handleEnds, handleIndex) { var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; return { span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1 }; } function restrict$1(value, extend) { return Math.min(extend[1] != null ? extend[1] : Infinity, Math.max(extend[0] != null ? extend[0] : -Infinity, value)); } //#endregion //#region node_modules/echarts/lib/coord/parallel/Parallel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Parallel Coordinates * */ var Parallel = function() { function Parallel(parallelModel, ecModel, api) { this.type = COORD_SYS_TYPE_PARALLEL; /** * key: dimension */ this._axesMap = createHashMap(); /** * key: dimension * value: {position: [], rotation, } */ this._axesLayout = {}; this.dimensions = parallelModel.dimensions; this._model = parallelModel; this._init(parallelModel, ecModel, api); } Parallel.prototype._init = function(parallelModel, ecModel, api) { var dimensions = parallelModel.dimensions; var parallelAxisIndex = parallelModel.parallelAxisIndex; each$12(dimensions, function(dim, idx) { var axisIndex = parallelAxisIndex[idx]; var axisModel = ecModel.getComponent("parallelAxis", axisIndex); var axisType = determineAxisType(axisModel); var axis = this._axesMap.set(dim, new ParallelAxis(dim, createScaleByModel(axisModel, axisType, false), [0, 0], axisType, axisIndex)); axis.onBand = isAxisOnBand(axis.scale, axisModel); axis.inverse = axisModel.get("inverse"); axisModel.axis = axis; axis.model = axisModel; axis.coordinateSystem = axisModel.coordinateSystem = this; }, this); }; /** * Update axis scale after data processed */ Parallel.prototype.update = function(ecModel, api) { each$12(this.dimensions, function(dim) { var axis = this._axesMap.get(dim); scaleRawExtentInfoCreate(axis, 1); scaleCalcNice(axis); }, this); }; Parallel.prototype.containPoint = function(point) { var layoutInfo = this._makeLayoutInfo(); var axisBase = layoutInfo.axisBase; var layoutBase = layoutInfo.layoutBase; var pixelDimIndex = layoutInfo.pixelDimIndex; var pAxis = point[1 - pixelDimIndex]; var pLayout = point[pixelDimIndex]; return pAxis >= axisBase && pAxis <= axisBase + layoutInfo.axisLength && pLayout >= layoutBase && pLayout <= layoutBase + layoutInfo.layoutLength; }; Parallel.prototype.getModel = function() { return this._model; }; /** * Resize the parallel coordinate system. */ Parallel.prototype.resize = function(parallelModel, api) { var refContainer = createBoxLayoutReference(parallelModel, api).refContainer; this._rect = getLayoutRect(parallelModel.getBoxLayoutParams(), refContainer); this._layoutAxes(); }; Parallel.prototype.getRect = function() { return this._rect; }; Parallel.prototype._makeLayoutInfo = function() { var parallelModel = this._model; var rect = this._rect; var xy = ["x", "y"]; var wh = ["width", "height"]; var layout = parallelModel.get("layout"); var pixelDimIndex = layout === "horizontal" ? 0 : 1; var layoutLength = rect[wh[pixelDimIndex]]; var layoutExtent = [0, layoutLength]; var axisCount = this.dimensions.length; var axisExpandWidth = restrict(parallelModel.get("axisExpandWidth"), layoutExtent); var axisExpandCount = restrict(parallelModel.get("axisExpandCount") || 0, [0, axisCount]); var axisExpandable = parallelModel.get("axisExpandable") && axisCount > 3 && axisCount > axisExpandCount && axisExpandCount > 1 && axisExpandWidth > 0 && layoutLength > 0; var axisExpandWindow = parallelModel.get("axisExpandWindow"); var winSize; if (!axisExpandWindow) { winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent); axisExpandWindow = [axisExpandWidth * (parallelModel.get("axisExpandCenter") || mathFloor(axisCount / 2)) - winSize / 2]; axisExpandWindow[1] = axisExpandWindow[0] + winSize; } else { winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent); axisExpandWindow[1] = axisExpandWindow[0] + winSize; } var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); axisCollapseWidth < 3 && (axisCollapseWidth = 0); var winInnerIndices = [mathFloor(round$3(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, mathCeil(round$3(axisExpandWindow[1] / axisExpandWidth, 1)) - 1]; var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0]; return { layout, pixelDimIndex, layoutBase: rect[xy[pixelDimIndex]], layoutLength, axisBase: rect[xy[1 - pixelDimIndex]], axisLength: rect[wh[1 - pixelDimIndex]], axisExpandable, axisExpandWidth, axisCollapseWidth, axisExpandWindow, axisCount, winInnerIndices, axisExpandWindow0Pos }; }; Parallel.prototype._layoutAxes = function() { var rect = this._rect; var axes = this._axesMap; var dimensions = this.dimensions; var layoutInfo = this._makeLayoutInfo(); var layout = layoutInfo.layout; axes.each(function(axis) { var axisExtent = [0, layoutInfo.axisLength]; var idx = axis.inverse ? 1 : 0; axis.setExtent(axisExtent[idx], axisExtent[1 - idx]); }); each$12(dimensions, function(dim, idx) { var posInfo = (layoutInfo.axisExpandable ? layoutAxisWithExpand : layoutAxisWithoutExpand)(idx, layoutInfo); var positionTable = { horizontal: { x: posInfo.position, y: layoutInfo.axisLength }, vertical: { x: 0, y: posInfo.position } }; var rotationTable = { horizontal: mathPI / 2, vertical: 0 }; var position = [positionTable[layout].x + rect.x, positionTable[layout].y + rect.y]; var rotation = rotationTable[layout]; var transform = create$1(); rotate(transform, transform, rotation); translate(transform, transform, position); this._axesLayout[dim] = { position, rotation, transform, axisNameAvailableWidth: posInfo.axisNameAvailableWidth, axisLabelShow: posInfo.axisLabelShow, nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth, tickDirection: 1, labelDirection: 1 }; }, this); }; /** * Get axis by dim. */ Parallel.prototype.getAxis = function(dim) { return this._axesMap.get(dim); }; /** * Convert a dim value of a single item of series data to Point. */ Parallel.prototype.dataToPoint = function(value, dim) { return this.axisCoordToPoint(this._axesMap.get(dim).dataToCoord(value), dim); }; /** * Travel data for one time, get activeState of each data item. * @param start the start dataIndex that travel from. * @param end the next dataIndex of the last dataIndex will be travel. */ Parallel.prototype.eachActiveState = function(data, callback, start, end) { start ??= 0; end ??= data.count(); var axesMap = this._axesMap; var dimensions = this.dimensions; var dataDimensions = []; var axisModels = []; each$12(dimensions, function(axisDim) { dataDimensions.push(data.mapDimension(axisDim)); axisModels.push(axesMap.get(axisDim).model); }); var hasActiveSet = this.hasAxisBrushed(); for (var dataIndex = start; dataIndex < end; dataIndex++) { var activeState = void 0; if (!hasActiveSet) activeState = "normal"; else { activeState = "active"; var values = data.getValues(dataDimensions, dataIndex); for (var j = 0, lenj = dimensions.length; j < lenj; j++) if (axisModels[j].getActiveState(values[j]) === "inactive") { activeState = "inactive"; break; } } callback(activeState, dataIndex); } }; /** * Whether has any activeSet. */ Parallel.prototype.hasAxisBrushed = function() { var dimensions = this.dimensions; var axesMap = this._axesMap; var hasActiveSet = false; for (var j = 0, lenj = dimensions.length; j < lenj; j++) if (axesMap.get(dimensions[j]).model.getActiveState() !== "normal") hasActiveSet = true; return hasActiveSet; }; /** * Convert coords of each axis to Point. * Return point. For example: [10, 20] */ Parallel.prototype.axisCoordToPoint = function(coord, dim) { var axisLayout = this._axesLayout[dim]; return applyTransform([coord, 0], axisLayout.transform); }; /** * Get axis layout. */ Parallel.prototype.getAxisLayout = function(dim) { return clone$4(this._axesLayout[dim]); }; /** * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}. */ Parallel.prototype.getSlidedAxisExpandWindow = function(point) { var layoutInfo = this._makeLayoutInfo(); var pixelDimIndex = layoutInfo.pixelDimIndex; var axisExpandWindow = layoutInfo.axisExpandWindow.slice(); var winSize = axisExpandWindow[1] - axisExpandWindow[0]; var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)]; if (!this.containPoint(point)) return { behavior: "none", axisExpandWindow }; var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; var delta; var behavior = "slide"; var axisCollapseWidth = layoutInfo.axisCollapseWidth; var triggerArea = this._model.get("axisExpandSlideTriggerArea"); var useJump = triggerArea[0] != null; if (axisCollapseWidth) { if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) { behavior = "jump"; delta = pointCoord - winSize * triggerArea[2]; } else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) { behavior = "jump"; delta = pointCoord - winSize * (1 - triggerArea[2]); } else (delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0); delta *= layoutInfo.axisExpandWidth / axisCollapseWidth; delta ? sliderMove(delta, axisExpandWindow, extent, "all") : behavior = "none"; } else { var winSize2 = axisExpandWindow[1] - axisExpandWindow[0]; axisExpandWindow = [mathMax$9(0, extent[1] * pointCoord / winSize2 - winSize2 / 2)]; axisExpandWindow[1] = mathMin$9(extent[1], axisExpandWindow[0] + winSize2); axisExpandWindow[0] = axisExpandWindow[1] - winSize2; } return { axisExpandWindow, behavior }; }; return Parallel; }(); function restrict(len, extent) { return mathMin$9(mathMax$9(len, extent[0]), extent[1]); } function layoutAxisWithoutExpand(axisIndex, layoutInfo) { var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1); return { position: step * axisIndex, axisNameAvailableWidth: step, axisLabelShow: true }; } function layoutAxisWithExpand(axisIndex, layoutInfo) { var layoutLength = layoutInfo.layoutLength; var axisExpandWidth = layoutInfo.axisExpandWidth; var axisCount = layoutInfo.axisCount; var axisCollapseWidth = layoutInfo.axisCollapseWidth; var winInnerIndices = layoutInfo.winInnerIndices; var position; var axisNameAvailableWidth = axisCollapseWidth; var axisLabelShow = false; var nameTruncateMaxWidth; if (axisIndex < winInnerIndices[0]) { position = axisIndex * axisCollapseWidth; nameTruncateMaxWidth = axisCollapseWidth; } else if (axisIndex <= winInnerIndices[1]) { position = layoutInfo.axisExpandWindow0Pos + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0]; axisNameAvailableWidth = axisExpandWidth; axisLabelShow = true; } else { position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth; nameTruncateMaxWidth = axisCollapseWidth; } return { position, axisNameAvailableWidth, axisLabelShow, nameTruncateMaxWidth }; } //#endregion //#region node_modules/echarts/lib/coord/parallel/parallelCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Parallel coordinate system creator. */ function createParallelCoordSys(ecModel, api) { var coordSysList = []; ecModel.eachComponent(COMPONENT_TYPE_PARALLEL, function(parallelModel, idx) { var coordSys = new Parallel(parallelModel, ecModel, api); coordSys.name = "parallel_" + idx; coordSys.resize(parallelModel, api); parallelModel.coordinateSystem = coordSys; coordSys.model = parallelModel; coordSysList.push(coordSys); }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.get("coordinateSystem") === "parallel") { var parallel_1 = seriesModel.coordinateSystem = seriesModel.getReferringComponents(COMPONENT_TYPE_PARALLEL, SINGLE_REFERRING).models[0].coordinateSystem; if (parallel_1) each$12(parallel_1.dimensions, function(dim) { associateSeriesWithAxis(parallel_1.getAxis(dim), seriesModel, COORD_SYS_TYPE_PARALLEL); }); } }); return coordSysList; } var parallelCoordSysCreator = { create: createParallelCoordSys }; //#endregion //#region node_modules/echarts/lib/coord/parallel/AxisModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ParallelAxisModel = function(_super) { __extends(ParallelAxisModel, _super); function ParallelAxisModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelAxisModel.type; /** * @readOnly */ _this.activeIntervals = []; return _this; } ParallelAxisModel.prototype.getAreaSelectStyle = function() { return makeStyleMapper([ ["fill", "color"], ["lineWidth", "borderWidth"], ["stroke", "borderColor"], ["width", "width"], ["opacity", "opacity"] ])(this.getModel("areaSelectStyle")); }; /** * The code of this feature is put on AxisModel but not ParallelAxis, * because axisModel can be alive after echarts updating but instance of * ParallelAxis having been disposed. this._activeInterval should be kept * when action dispatched (i.e. legend click). * * @param intervals `interval.length === 0` means set all active. */ ParallelAxisModel.prototype.setActiveIntervals = function(intervals) { var activeIntervals = this.activeIntervals = clone$4(intervals); if (activeIntervals) for (var i = activeIntervals.length - 1; i >= 0; i--) asc$1(activeIntervals[i]); }; /** * @param value When only attempting detect whether 'no activeIntervals set', * `value` is not needed to be input. */ ParallelAxisModel.prototype.getActiveState = function(value) { var activeIntervals = this.activeIntervals; if (!activeIntervals.length) return "normal"; if (value == null || isNaN(+value)) return "inactive"; if (activeIntervals.length === 1) { var interval = activeIntervals[0]; if (interval[0] <= value && value <= interval[1]) return "active"; } else for (var i = 0, len = activeIntervals.length; i < len; i++) if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) return "active"; return "inactive"; }; return ParallelAxisModel; }(ComponentModel); mixin(ParallelAxisModel, AxisModelCommonMixin); //#endregion //#region node_modules/echarts/lib/component/helper/BrushController.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BRUSH_PANEL_GLOBAL = true; var mathMin$1 = Math.min; var mathMax$1 = Math.max; var mathPow = Math.pow; var COVER_Z = 1e4; var UNSELECT_THRESHOLD = 6; var MIN_RESIZE_LINE_WIDTH = 6; var MUTEX_RESOURCE_KEY = "globalPan"; var DIRECTION_MAP = { w: [0, 0], e: [0, 1], n: [1, 0], s: [1, 1] }; var CURSOR_MAP = { w: "ew", e: "ew", n: "ns", s: "ns", ne: "nesw", sw: "nesw", nw: "nwse", se: "nwse" }; var DEFAULT_BRUSH_OPT = { brushStyle: { lineWidth: 2, stroke: tokens.color.backgroundTint, fill: tokens.color.borderTint }, transformable: true, brushMode: "single", removeOnClick: false }; var baseUID = 0; /** * params: * areas: Array., coord relates to container group, * If no container specified, to global. * opt { * isEnd: boolean, * removeOnClick: boolean * } */ var BrushController = function(_super) { __extends(BrushController, _super); function BrushController(zr) { var _this = _super.call(this) || this; /** * @internal */ _this._track = []; /** * @internal */ _this._covers = []; _this._handlers = {}; assert(zr); _this._zr = zr; _this.group = new Group$3(); _this._uid = "brushController_" + baseUID++; each$12(pointerHandlers, function(handler, eventName) { this._handlers[eventName] = bind$1(handler, this); }, _this); return _this; } /** * If set to `false`, select disabled. */ BrushController.prototype.enableBrush = function(brushOption) { assert(this._mounted); this._brushType && this._doDisableBrush(); brushOption.brushType && this._doEnableBrush(brushOption); return this; }; BrushController.prototype._doEnableBrush = function(brushOption) { var zr = this._zr; if (!this._enableGlobalPan) take(zr, MUTEX_RESOURCE_KEY, this._uid); each$12(this._handlers, function(handler, eventName) { zr.on(eventName, handler); }); this._brushType = brushOption.brushType; this._brushOption = merge(clone$4(DEFAULT_BRUSH_OPT), brushOption, true); }; BrushController.prototype._doDisableBrush = function() { var zr = this._zr; release(zr, MUTEX_RESOURCE_KEY, this._uid); each$12(this._handlers, function(handler, eventName) { zr.off(eventName, handler); }); this._brushType = this._brushOption = null; }; /** * @param panelOpts If not pass, it is global brush. */ BrushController.prototype.setPanels = function(panelOpts) { if (panelOpts && panelOpts.length) { var panels_1 = this._panels = {}; each$12(panelOpts, function(panelOpts) { panels_1[panelOpts.panelId] = clone$4(panelOpts); }); } else this._panels = null; return this; }; BrushController.prototype.mount = function(opt) { opt = opt || {}; this._mounted = true; this._enableGlobalPan = opt.enableGlobalPan; var thisGroup = this.group; this._zr.add(thisGroup); thisGroup.attr({ x: opt.x || 0, y: opt.y || 0, rotation: opt.rotation || 0, scaleX: opt.scaleX || 1, scaleY: opt.scaleY || 1 }); this._transform = thisGroup.getLocalTransform(); return this; }; /** * Update covers. * @param coverConfigList * If coverConfigList is null/undefined, all covers removed. */ BrushController.prototype.updateCovers = function(coverConfigList) { assert(this._mounted); coverConfigList = map$1(coverConfigList, function(coverConfig) { return merge(clone$4(DEFAULT_BRUSH_OPT), coverConfig, true); }); var tmpIdPrefix = "\0-brush-index-"; var oldCovers = this._covers; var newCovers = this._covers = []; var controller = this; var creatingCover = this._creatingCover; new DataDiffer(oldCovers, coverConfigList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute(); return this; function getKey(brushOption, index) { return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + "-" + brushOption.brushType; } function oldGetKey(cover, index) { return getKey(cover.__brushOption, index); } function addOrUpdate(newIndex, oldIndex) { var newBrushInternal = coverConfigList[newIndex]; if (oldIndex != null && oldCovers[oldIndex] === creatingCover) newCovers[newIndex] = oldCovers[oldIndex]; else updateCoverAfterCreation(controller, newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushInternal, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushInternal))); } function remove(oldIndex) { if (oldCovers[oldIndex] !== creatingCover) controller.group.remove(oldCovers[oldIndex]); } }; BrushController.prototype.unmount = function() { if (!this._mounted) return; this.enableBrush(false); clearCovers(this); this._zr.remove(this.group); this._mounted = false; return this; }; BrushController.prototype.dispose = function() { this.unmount(); this.off(); }; return BrushController; }(Eventful); function createCover(controller, brushOption) { var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption); cover.__brushOption = brushOption; updateZ$3(cover, brushOption); controller.group.add(cover); return cover; } function endCreating(controller, creatingCover) { var coverRenderer = getCoverRenderer(creatingCover); if (coverRenderer.endCreating) { coverRenderer.endCreating(controller, creatingCover); updateZ$3(creatingCover, creatingCover.__brushOption); } return creatingCover; } function updateCoverShape(controller, cover) { var brushOption = cover.__brushOption; getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption); } function updateZ$3(cover, brushOption) { var z = brushOption.z; z ??= COVER_Z; cover.traverse(function(el) { el.z = z; el.z2 = z; }); } function updateCoverAfterCreation(controller, cover) { getCoverRenderer(cover).updateCommon(controller, cover); updateCoverShape(controller, cover); } function getCoverRenderer(cover) { return coverRenderers[cover.__brushOption.brushType]; } function getPanelByPoint(controller, e, localCursorPoint) { var panels = controller._panels; if (!panels) return BRUSH_PANEL_GLOBAL; var panel; var transform = controller._transform; each$12(panels, function(pn) { pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn); }); return panel; } function getPanelByCover(controller, cover) { var panels = controller._panels; if (!panels) return BRUSH_PANEL_GLOBAL; var panelId = cover.__brushOption.panelId; return panelId != null ? panels[panelId] : BRUSH_PANEL_GLOBAL; } function clearCovers(controller) { var covers = controller._covers; var originalLength = covers.length; each$12(covers, function(cover) { controller.group.remove(cover); }, controller); covers.length = 0; return !!originalLength; } function trigger(controller, opt) { var areas = map$1(controller._covers, function(cover) { var brushOption = cover.__brushOption; var range = clone$4(brushOption.range); return { brushType: brushOption.brushType, panelId: brushOption.panelId, range }; }); controller.trigger("brush", { areas, isEnd: !!opt.isEnd, removeOnClick: !!opt.removeOnClick }); } function shouldShowCover(controller) { var track = controller._track; if (!track.length) return false; var p2 = track[track.length - 1]; var p1 = track[0]; var dx = p2[0] - p1[0]; var dy = p2[1] - p1[1]; return mathPow(dx * dx + dy * dy, .5) > UNSELECT_THRESHOLD; } function getTrackEnds(track) { var tail = track.length - 1; tail < 0 && (tail = 0); return [track[0], track[tail]]; } function createBaseRectCover(rectRangeConverter, controller, brushOption, edgeNameSequences) { var cover = new Group$3(); cover.add(new Rect$2({ name: "main", style: makeStyle(brushOption), silent: true, draggable: true, cursor: "move", drift: curry$1(driftRect, rectRangeConverter, controller, cover, [ "n", "s", "w", "e" ]), ondragend: curry$1(trigger, controller, { isEnd: true }) })); each$12(edgeNameSequences, function(nameSequence) { cover.add(new Rect$2({ name: nameSequence.join(""), style: { opacity: 0 }, draggable: true, silent: true, invisible: true, drift: curry$1(driftRect, rectRangeConverter, controller, cover, nameSequence), ondragend: curry$1(trigger, controller, { isEnd: true }) })); }); return cover; } function updateBaseRect(controller, cover, localRange, brushOption) { var lineWidth = brushOption.brushStyle.lineWidth || 0; var handleSize = mathMax$1(lineWidth, MIN_RESIZE_LINE_WIDTH); var x = localRange[0][0]; var y = localRange[1][0]; var xa = x - lineWidth / 2; var ya = y - lineWidth / 2; var x2 = localRange[0][1]; var y2 = localRange[1][1]; var x2a = x2 - handleSize + lineWidth / 2; var y2a = y2 - handleSize + lineWidth / 2; var width = x2 - x; var height = y2 - y; var widtha = width + lineWidth; var heighta = height + lineWidth; updateRectShape(controller, cover, "main", x, y, width, height); if (brushOption.transformable) { updateRectShape(controller, cover, "w", xa, ya, handleSize, heighta); updateRectShape(controller, cover, "e", x2a, ya, handleSize, heighta); updateRectShape(controller, cover, "n", xa, ya, widtha, handleSize); updateRectShape(controller, cover, "s", xa, y2a, widtha, handleSize); updateRectShape(controller, cover, "nw", xa, ya, handleSize, handleSize); updateRectShape(controller, cover, "ne", x2a, ya, handleSize, handleSize); updateRectShape(controller, cover, "sw", xa, y2a, handleSize, handleSize); updateRectShape(controller, cover, "se", x2a, y2a, handleSize, handleSize); } } function updateCommon$1(controller, cover) { var brushOption = cover.__brushOption; var transformable = brushOption.transformable; var mainEl = cover.childAt(0); mainEl.useStyle(makeStyle(brushOption)); mainEl.attr({ silent: !transformable, cursor: transformable ? "move" : "default" }); each$12([ ["w"], ["e"], ["n"], ["s"], ["s", "e"], ["s", "w"], ["n", "e"], ["n", "w"] ], function(nameSequence) { var el = cover.childOfName(nameSequence.join("")); var globalDir = nameSequence.length === 1 ? getGlobalDirection1(controller, nameSequence[0]) : getGlobalDirection2(controller, nameSequence); el && el.attr({ silent: !transformable, invisible: !transformable, cursor: transformable ? CURSOR_MAP[globalDir] + "-resize" : null }); }); } function updateRectShape(controller, cover, name, x, y, w, h) { var el = cover.childOfName(name); el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]]))); } function makeStyle(brushOption) { return defaults({ strokeNoScale: true }, brushOption.brushStyle); } function formatRectRange(x, y, x2, y2) { var min = [mathMin$1(x, x2), mathMin$1(y, y2)]; var max = [mathMax$1(x, x2), mathMax$1(y, y2)]; return [[min[0], max[0]], [min[1], max[1]]]; } function getTransform(controller) { return getTransform$1(controller.group); } function getGlobalDirection1(controller, localDirName) { return { left: "w", right: "e", top: "n", bottom: "s" }[transformDirection({ w: "left", e: "right", n: "top", s: "bottom" }[localDirName], getTransform(controller))]; } function getGlobalDirection2(controller, localDirNameSeq) { var globalDir = [getGlobalDirection1(controller, localDirNameSeq[0]), getGlobalDirection1(controller, localDirNameSeq[1])]; (globalDir[0] === "e" || globalDir[0] === "w") && globalDir.reverse(); return globalDir.join(""); } function driftRect(rectRangeConverter, controller, cover, dirNameSequence, dx, dy) { var brushOption = cover.__brushOption; var rectRange = rectRangeConverter.toRectRange(brushOption.range); var localDelta = toLocalDelta(controller, dx, dy); each$12(dirNameSequence, function(dirName) { var ind = DIRECTION_MAP[dirName]; rectRange[ind[0]][ind[1]] += localDelta[ind[0]]; }); brushOption.range = rectRangeConverter.fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1])); updateCoverAfterCreation(controller, cover); trigger(controller, { isEnd: false }); } function driftPolygon(controller, cover, dx, dy) { var range = cover.__brushOption.range; var localDelta = toLocalDelta(controller, dx, dy); each$12(range, function(point) { point[0] += localDelta[0]; point[1] += localDelta[1]; }); updateCoverAfterCreation(controller, cover); trigger(controller, { isEnd: false }); } function toLocalDelta(controller, dx, dy) { var thisGroup = controller.group; var localD = thisGroup.transformCoordToLocal(dx, dy); var localZero = thisGroup.transformCoordToLocal(0, 0); return [localD[0] - localZero[0], localD[1] - localZero[1]]; } function clipByPanel(controller, cover, data) { var panel = getPanelByCover(controller, cover); return panel && panel !== BRUSH_PANEL_GLOBAL ? panel.clipPath(data, controller._transform) : clone$4(data); } function pointsToRect(points) { var xmin = mathMin$1(points[0][0], points[1][0]); var ymin = mathMin$1(points[0][1], points[1][1]); var xmax = mathMax$1(points[0][0], points[1][0]); var ymax = mathMax$1(points[0][1], points[1][1]); return { x: xmin, y: ymin, width: xmax - xmin, height: ymax - ymin }; } function resetCursor(controller, e, localCursorPoint) { if (!controller._brushType || isOutsideZrArea(controller, e.offsetX, e.offsetY)) return; var zr = controller._zr; var covers = controller._covers; var currPanel = getPanelByPoint(controller, e, localCursorPoint); if (!controller._dragging) for (var i = 0; i < covers.length; i++) { var brushOption = covers[i].__brushOption; if (currPanel && (currPanel === BRUSH_PANEL_GLOBAL || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) return; } currPanel && zr.setCursorStyle("crosshair"); } function preventDefault(e) { var rawE = e.event; rawE.preventDefault && rawE.preventDefault(); } function mainShapeContain(cover, x, y) { return cover.childOfName("main").contain(x, y); } function updateCoverByMouse(controller, e, localCursorPoint, isEnd) { var creatingCover = controller._creatingCover; var panel = controller._creatingPanel; var thisBrushOption = controller._brushOption; var eventParams; controller._track.push(localCursorPoint.slice()); if (shouldShowCover(controller) || creatingCover) { if (panel && !creatingCover) { thisBrushOption.brushMode === "single" && clearCovers(controller); var brushOption = clone$4(thisBrushOption); brushOption.brushType = determineBrushType(brushOption.brushType, panel); brushOption.panelId = panel === BRUSH_PANEL_GLOBAL ? null : panel.panelId; creatingCover = controller._creatingCover = createCover(controller, brushOption); controller._covers.push(creatingCover); } if (creatingCover) { var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)]; var coverBrushOption = creatingCover.__brushOption; coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track)); if (isEnd) { endCreating(controller, creatingCover); coverRenderer.updateCommon(controller, creatingCover); } updateCoverShape(controller, creatingCover); eventParams = { isEnd }; } } else if (isEnd && thisBrushOption.brushMode === "single" && thisBrushOption.removeOnClick) { if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) eventParams = { isEnd, removeOnClick: true }; } return eventParams; } function determineBrushType(brushType, panel) { if (brushType === "auto") { assert(panel && panel.defaultBrushType, "MUST have defaultBrushType when brushType is \"atuo\""); return panel.defaultBrushType; } return brushType; } var pointerHandlers = { mousedown: function(e) { if (this._dragging) handleDragEnd(this, e); else if (!e.target || !e.target.draggable) { preventDefault(e); var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); this._creatingCover = null; if (this._creatingPanel = getPanelByPoint(this, e, localCursorPoint)) { this._dragging = true; this._track = [localCursorPoint.slice()]; } } }, mousemove: function(e) { var x = e.offsetX; var y = e.offsetY; var localCursorPoint = this.group.transformCoordToLocal(x, y); resetCursor(this, e, localCursorPoint); if (this._dragging) { preventDefault(e); var eventParams = updateCoverByMouse(this, e, localCursorPoint, false); eventParams && trigger(this, eventParams); } }, mouseup: function(e) { handleDragEnd(this, e); } }; function handleDragEnd(controller, e) { if (controller._dragging) { preventDefault(e); var x = e.offsetX; var y = e.offsetY; var eventParams = updateCoverByMouse(controller, e, controller.group.transformCoordToLocal(x, y), true); controller._dragging = false; controller._track = []; controller._creatingCover = null; eventParams && trigger(controller, eventParams); } } function isOutsideZrArea(controller, x, y) { var zr = controller._zr; return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight(); } /** * key: brushType */ var coverRenderers = { lineX: getLineRenderer(0), lineY: getLineRenderer(1), rect: { createCover: function(controller, brushOption) { function returnInput(range) { return range; } return createBaseRectCover({ toRectRange: returnInput, fromRectRange: returnInput }, controller, brushOption, [ ["w"], ["e"], ["n"], ["s"], ["s", "e"], ["s", "w"], ["n", "e"], ["n", "w"] ]); }, getCreatingRange: function(localTrack) { var ends = getTrackEnds(localTrack); return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]); }, updateCoverShape: function(controller, cover, localRange, brushOption) { updateBaseRect(controller, cover, localRange, brushOption); }, updateCommon: updateCommon$1, contain: mainShapeContain }, polygon: { createCover: function(controller, brushOption) { var cover = new Group$3(); cover.add(new Polyline$1({ name: "main", style: makeStyle(brushOption), silent: true })); return cover; }, getCreatingRange: function(localTrack) { return localTrack; }, endCreating: function(controller, cover) { cover.remove(cover.childAt(0)); cover.add(new Polygon({ name: "main", draggable: true, drift: curry$1(driftPolygon, controller, cover), ondragend: curry$1(trigger, controller, { isEnd: true }) })); }, updateCoverShape: function(controller, cover, localRange, brushOption) { cover.childAt(0).setShape({ points: clipByPanel(controller, cover, localRange) }); }, updateCommon: updateCommon$1, contain: mainShapeContain } }; function getLineRenderer(xyIndex) { return { createCover: function(controller, brushOption) { return createBaseRectCover({ toRectRange: function(range) { var rectRange = [range, [0, 100]]; xyIndex && rectRange.reverse(); return rectRange; }, fromRectRange: function(rectRange) { return rectRange[xyIndex]; } }, controller, brushOption, [[["w"], ["e"]], [["n"], ["s"]]][xyIndex]); }, getCreatingRange: function(localTrack) { var ends = getTrackEnds(localTrack); return [mathMin$1(ends[0][xyIndex], ends[1][xyIndex]), mathMax$1(ends[0][xyIndex], ends[1][xyIndex])]; }, updateCoverShape: function(controller, cover, localRange, brushOption) { var otherExtent; var panel = getPanelByCover(controller, cover); if (panel !== BRUSH_PANEL_GLOBAL && panel.getLinearBrushOtherExtent) otherExtent = panel.getLinearBrushOtherExtent(xyIndex); else { var zr = controller._zr; otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]]; } var rectRange = [localRange, otherExtent]; xyIndex && rectRange.reverse(); updateBaseRect(controller, cover, rectRange, brushOption); }, updateCommon: updateCommon$1, contain: mainShapeContain }; } //#endregion //#region node_modules/echarts/lib/component/helper/brushHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function makeRectPanelClipPath(rect) { rect = normalizeRect(rect); return function(localPoints) { return clipPointsByRect(localPoints, rect); }; } function makeLinearBrushOtherExtent(rect, specifiedXYIndex) { rect = normalizeRect(rect); return function(xyIndex) { var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex; var brushWidth = idx ? rect.width : rect.height; var base = idx ? rect.x : rect.y; return [base, base + (brushWidth || 0)]; }; } function makeRectIsTargetByCursor(rect, api, targetModel) { var boundingRect = normalizeRect(rect); return function(e, localCursorPoint) { return boundingRect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel); }; } function normalizeRect(rect) { return BoundingRect.create(rect); } //#endregion //#region node_modules/echarts/lib/component/axis/ParallelAxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ParallelAxisView = function(_super) { __extends(ParallelAxisView, _super); function ParallelAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ParallelAxisView.type; return _this; } ParallelAxisView.prototype.init = function(ecModel, api) { _super.prototype.init.apply(this, arguments); (this._brushController = new BrushController(api.getZr())).on("brush", bind$1(this._onBrush, this)); }; ParallelAxisView.prototype.render = function(axisModel, ecModel, api, payload) { if (fromAxisAreaSelect(axisModel, ecModel, payload)) return; this.axisModel = axisModel; this.api = api; this.group.removeAll(); var oldAxisGroup = this._axisGroup; this._axisGroup = new Group$3(); this.group.add(this._axisGroup); if (!axisModel.get("show")) return; var coordSysModel = getCoordSysModel(axisModel, ecModel); var coordSys = coordSysModel.coordinateSystem; var areaSelectStyle = axisModel.getAreaSelectStyle(); var areaWidth = areaSelectStyle.width; var dim = axisModel.axis.dim; var axisLayout = coordSys.getAxisLayout(dim); var builderOpt = extend({ strokeContainThreshold: areaWidth }, axisLayout); var axisBuilder = new AxisBuilder(axisModel, api, builderOpt); axisBuilder.build(); this._axisGroup.add(axisBuilder.group); this._refreshBrushController(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api); groupTransition(oldAxisGroup, this._axisGroup, axisModel); }; ParallelAxisView.prototype._refreshBrushController = function(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api) { var extent = axisModel.axis.getExtent(); var extentLen = extent[1] - extent[0]; var extra = Math.min(30, Math.abs(extentLen) * .1); var rect = BoundingRect.create({ x: extent[0], y: -areaWidth / 2, width: extentLen, height: areaWidth }); rect.x -= extra; rect.width += 2 * extra; this._brushController.mount({ enableGlobalPan: true, rotation: builderOpt.rotation, x: builderOpt.position[0], y: builderOpt.position[1] }).setPanels([{ panelId: "pl", clipPath: makeRectPanelClipPath(rect), isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel), getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0) }]).enableBrush({ brushType: "lineX", brushStyle: areaSelectStyle, removeOnClick: true }).updateCovers(getCoverInfoList(axisModel)); }; ParallelAxisView.prototype._onBrush = function(eventParam) { var coverInfoList = eventParam.areas; var axisModel = this.axisModel; var axis = axisModel.axis; var intervals = map$1(coverInfoList, function(coverInfo) { return [axis.coordToData(coverInfo.range[0], true), axis.coordToData(coverInfo.range[1], true)]; }); if (!axisModel.option.realtime === eventParam.isEnd || eventParam.removeOnClick) this.api.dispatchAction({ type: "axisAreaSelect", parallelAxisId: axisModel.id, intervals }); }; ParallelAxisView.prototype.dispose = function() { this._brushController.dispose(); }; ParallelAxisView.type = "parallelAxis"; return ParallelAxisView; }(ComponentView); function fromAxisAreaSelect(axisModel, ecModel, payload) { return payload && payload.type === "axisAreaSelect" && ecModel.findComponents({ mainType: "parallelAxis", query: payload })[0] === axisModel; } function getCoverInfoList(axisModel) { var axis = axisModel.axis; return map$1(axisModel.activeIntervals, function(interval) { return { brushType: "lineX", panelId: "pl", range: [axis.dataToCoord(interval[0], true), axis.dataToCoord(interval[1], true)] }; }); } function getCoordSysModel(axisModel, ecModel) { return ecModel.getComponent("parallel", axisModel.get("parallelIndex")); } //#endregion //#region node_modules/echarts/lib/component/axis/parallelAxisAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var actionInfo = { type: "axisAreaSelect", event: "axisAreaSelected" }; function installParallelActions(registers) { registers.registerAction(actionInfo, function(payload, ecModel) { ecModel.eachComponent({ mainType: "parallelAxis", query: payload }, function(parallelAxisModel) { parallelAxisModel.axis.model.setActiveIntervals(payload.intervals); }); }); /** * @payload */ registers.registerAction("parallelAxisExpand", function(payload, ecModel) { ecModel.eachComponent({ mainType: "parallel", query: payload }, function(parallelModel) { parallelModel.setAxisExpand(payload); }); }); } //#endregion //#region node_modules/echarts/lib/component/parallel/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var defaultAxisOption = { type: "value", areaSelectStyle: { width: 20, borderWidth: 1, borderColor: "rgba(160,197,232)", color: "rgba(160,197,232)", opacity: .3 }, realtime: true, z: 10 }; function install$40(registers) { registers.registerComponentView(ParallelView); registers.registerComponentModel(ParallelModel); registers.registerCoordinateSystem("parallel", parallelCoordSysCreator); registers.registerPreprocessor(parallelPreprocessor); registers.registerComponentModel(ParallelAxisModel); registers.registerComponentView(ParallelAxisView); axisModelCreator(registers, "parallel", ParallelAxisModel, defaultAxisOption); installParallelActions(registers); } //#endregion //#region node_modules/echarts/lib/chart/parallel/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$39(registers) { use(install$40); registers.registerChartView(ParallelView$1); registers.registerSeriesModel(ParallelSeriesModel); registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, parallelVisual); } //#endregion //#region node_modules/echarts/lib/chart/sankey/SankeySeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_SANKEY = "sankey"; var SankeySeriesModel = function(_super) { __extends(SankeySeriesModel, _super); function SankeySeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SankeySeriesModel.type; return _this; } /** * Init a graph data structure from data in option series */ SankeySeriesModel.prototype.getInitialData = function(option, ecModel) { var links = option.edges || option.links || []; var nodes = option.data || option.nodes || []; var levels = option.levels || []; this.levelModels = []; var levelModels = this.levelModels; for (var i = 0; i < levels.length; i++) if (levels[i].depth != null && levels[i].depth >= 0) levelModels[levels[i].depth] = new Model(levels[i], this, ecModel); else throw new Error("levels[i].depth is mandatory and should be natural number"); return createGraphFromNodeEdge(nodes, links, this, true, beforeLink).data; function beforeLink(nodeData, edgeData) { nodeData.wrapMethod("getItemModel", function(model, idx) { var seriesModel = model.parentModel; var layout = seriesModel.getData().getItemLayout(idx); if (layout) { var nodeDepth = layout.depth; var levelModel = seriesModel.levelModels[nodeDepth]; if (levelModel) model.parentModel = levelModel; } return model; }); edgeData.wrapMethod("getItemModel", function(model, idx) { var seriesModel = model.parentModel; var layout = seriesModel.getGraph().getEdgeByIndex(idx).node1.getLayout(); if (layout) { var depth = layout.depth; var levelModel = seriesModel.levelModels[depth]; if (levelModel) model.parentModel = levelModel; } return model; }); } }; SankeySeriesModel.prototype.setNodePosition = function(dataIndex, localPosition) { var dataItem = (this.option.data || this.option.nodes)[dataIndex]; dataItem.localX = localPosition[0]; dataItem.localY = localPosition[1]; }; /** * Return the graphic data structure * * @return graphic data structure */ SankeySeriesModel.prototype.getGraph = function() { return this.getData().graph; }; /** * Get edge data of graphic data structure * * @return data structure of list */ SankeySeriesModel.prototype.getEdgeData = function() { return this.getGraph().edgeData; }; SankeySeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { function noValue(val) { return isNaN(val) || val == null; } if (dataType === "edge") { var params = this.getDataParams(dataIndex, dataType); var rawDataOpt = params.data; var edgeValue = params.value; return createTooltipMarkup("nameValue", { name: rawDataOpt.source + " -- " + rawDataOpt.target, value: edgeValue, noValue: noValue(edgeValue) }); } else { var value = this.getGraph().getNodeByIndex(dataIndex).getLayout().value; var name_1 = this.getDataParams(dataIndex, dataType).data.name; return createTooltipMarkup("nameValue", { name: name_1 != null ? name_1 + "" : null, value, noValue: noValue(value) }); } }; SankeySeriesModel.prototype.optionUpdated = function() {}; SankeySeriesModel.prototype.getDataParams = function(dataIndex, dataType) { var params = _super.prototype.getDataParams.call(this, dataIndex, dataType); if (params.value == null && dataType === "node") params.value = this.getGraph().getNodeByIndex(dataIndex).getLayout().value; return params; }; SankeySeriesModel.prototype.__ownRoamView = function() { return this.coordinateSystem; }; SankeySeriesModel.type = "series." + SERIES_TYPE_SANKEY; SankeySeriesModel.layoutMode = "box"; SankeySeriesModel.defaultOption = { z: 2, coordinateSystemUsage: "box", left: "5%", top: "5%", right: "20%", bottom: "5%", orient: "horizontal", nodeWidth: 20, nodeGap: 8, draggable: true, layoutIterations: 32, roam: false, roamTrigger: "global", center: null, zoom: 1, label: { show: true, position: "right", fontSize: 12 }, edgeLabel: { show: false, fontSize: 12 }, levels: [], nodeAlign: "justify", lineStyle: { color: tokens.color.neutral50, opacity: .2, curveness: .5 }, emphasis: { label: { show: true }, lineStyle: { opacity: .5 } }, select: { itemStyle: { borderColor: tokens.color.primary } }, animationEasing: "linear", animationDuration: 1e3 }; return SankeySeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/sankey/SankeyView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SankeyPathShape = function() { function SankeyPathShape() { this.x1 = 0; this.y1 = 0; this.x2 = 0; this.y2 = 0; this.cpx1 = 0; this.cpy1 = 0; this.cpx2 = 0; this.cpy2 = 0; this.extent = 0; } return SankeyPathShape; }(); var SankeyPath = function(_super) { __extends(SankeyPath, _super); function SankeyPath(opts) { return _super.call(this, opts) || this; } SankeyPath.prototype.getDefaultShape = function() { return new SankeyPathShape(); }; SankeyPath.prototype.buildPath = function(ctx, shape) { var extent = shape.extent; ctx.moveTo(shape.x1, shape.y1); ctx.bezierCurveTo(shape.cpx1, shape.cpy1, shape.cpx2, shape.cpy2, shape.x2, shape.y2); if (shape.orient === "vertical") { ctx.lineTo(shape.x2 + extent, shape.y2); ctx.bezierCurveTo(shape.cpx2 + extent, shape.cpy2, shape.cpx1 + extent, shape.cpy1, shape.x1 + extent, shape.y1); } else { ctx.lineTo(shape.x2, shape.y2 + extent); ctx.bezierCurveTo(shape.cpx2, shape.cpy2 + extent, shape.cpx1, shape.cpy1 + extent, shape.x1, shape.y1 + extent); } ctx.closePath(); }; SankeyPath.prototype.highlight = function() { enterEmphasis(this); }; SankeyPath.prototype.downplay = function() { leaveEmphasis(this); }; return SankeyPath; }(Path); var SankeyView = function(_super) { __extends(SankeyView, _super); function SankeyView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_SANKEY; _this._mainGroup = new Group$3(); return _this; } SankeyView.prototype.init = function(ecModel, api) { this._controller = new RoamController(api.getZr()); this.group.add(this._mainGroup); this._firstRender = true; }; SankeyView.prototype.render = function(seriesModel, ecModel, api) { var graph = seriesModel.getGraph(); var mainGroup = this._mainGroup; var layoutInfo = seriesModel.layoutInfo; var width = layoutInfo.width; var height = layoutInfo.height; var nodeData = seriesModel.getData(); var edgeData = seriesModel.getData("edge"); var orient = seriesModel.get("orient"); mainGroup.removeAll(); mainGroup.x = layoutInfo.x; mainGroup.y = layoutInfo.y; this._updateViewCoordSys(seriesModel, api); updateRoamControllerSimply(seriesModel, api, this._controller, createIsInSelfByPointerCheckerEl(mainGroup), null); graph.eachEdge(function(edge) { var curve = new SankeyPath(); var ecData = getECData(curve); ecData.dataIndex = edge.dataIndex; ecData.seriesIndex = seriesModel.seriesIndex; ecData.dataType = "edge"; var edgeModel = edge.getModel(); var lineStyleModel = edgeModel.getModel("lineStyle"); var curvature = lineStyleModel.get("curveness"); var n1Layout = edge.node1.getLayout(); var node1Model = edge.node1.getModel(); var dragX1 = node1Model.get("localX"); var dragY1 = node1Model.get("localY"); var n2Layout = edge.node2.getLayout(); var node2Model = edge.node2.getModel(); var dragX2 = node2Model.get("localX"); var dragY2 = node2Model.get("localY"); var edgeLayout = edge.getLayout(); var x1; var y1; var x2; var y2; var cpx1; var cpy1; var cpx2; var cpy2; curve.shape.extent = Math.max(1, edgeLayout.dy); curve.shape.orient = orient; if (orient === "vertical") { x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy; y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy; x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty; y2 = dragY2 != null ? dragY2 * height : n2Layout.y; cpx1 = x1; cpy1 = y1 * (1 - curvature) + y2 * curvature; cpx2 = x2; cpy2 = y1 * curvature + y2 * (1 - curvature); } else { x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx; y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy; x2 = dragX2 != null ? dragX2 * width : n2Layout.x; y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty; cpx1 = x1 * (1 - curvature) + x2 * curvature; cpy1 = y1; cpx2 = x1 * curvature + x2 * (1 - curvature); cpy2 = y2; } curve.setShape({ x1, y1, x2, y2, cpx1, cpy1, cpx2, cpy2 }); curve.useStyle(lineStyleModel.getItemStyle()); applyCurveStyle(curve.style, orient, edge); var defaultEdgeLabelText = "" + edgeModel.get("value"); var edgeLabelStateModels = getLabelStatesModels(edgeModel, "edgeLabel"); setLabelStyle(curve, edgeLabelStateModels, { labelFetcher: { getFormattedLabel: function(dataIndex, stateName, dataType, labelDimIndex, formatter, extendParams) { return seriesModel.getFormattedLabel(dataIndex, stateName, "edge", labelDimIndex, retrieve3(formatter, edgeLabelStateModels.normal && edgeLabelStateModels.normal.get("formatter"), defaultEdgeLabelText), extendParams); } }, labelDataIndex: edge.dataIndex, defaultText: defaultEdgeLabelText }); curve.setTextConfig({ position: "inside" }); var emphasisModel = edgeModel.getModel("emphasis"); setStatesStylesFromModel(curve, edgeModel, "lineStyle", function(model) { var style = model.getItemStyle(); applyCurveStyle(style, orient, edge); return style; }); mainGroup.add(curve); edgeData.setItemGraphicEl(edge.dataIndex, curve); var focus = emphasisModel.get("focus"); toggleHoverEmphasis(curve, focus === "adjacency" ? edge.getAdjacentDataIndices() : focus === "trajectory" ? edge.getTrajectoryDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }); graph.eachNode(function(node) { var layout = node.getLayout(); var itemModel = node.getModel(); var dragX = itemModel.get("localX"); var dragY = itemModel.get("localY"); var emphasisModel = itemModel.getModel("emphasis"); var borderRadius = itemModel.get(["itemStyle", "borderRadius"]) || 0; var rect = new Rect$2({ shape: { x: dragX != null ? dragX * width : layout.x, y: dragY != null ? dragY * height : layout.y, width: layout.dx, height: layout.dy, r: borderRadius }, style: itemModel.getModel("itemStyle").getItemStyle(), z2: 10 }); setLabelStyle(rect, getLabelStatesModels(itemModel), { labelFetcher: { getFormattedLabel: function(dataIndex, stateName) { return seriesModel.getFormattedLabel(dataIndex, stateName, "node"); } }, labelDataIndex: node.dataIndex, defaultText: node.id }); rect.disableLabelAnimation = true; rect.setStyle("fill", node.getVisual("color")); rect.setStyle("decal", node.getVisual("style").decal); setStatesStylesFromModel(rect, itemModel); mainGroup.add(rect); nodeData.setItemGraphicEl(node.dataIndex, rect); getECData(rect).dataType = "node"; var focus = emphasisModel.get("focus"); toggleHoverEmphasis(rect, focus === "adjacency" ? node.getAdjacentDataIndices() : focus === "trajectory" ? node.getTrajectoryDataIndices() : focus, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }); nodeData.eachItemGraphicEl(function(el, dataIndex) { if (nodeData.getItemModel(dataIndex).get("draggable")) { el.drift = function(dx, dy) { this.shape.x += dx; this.shape.y += dy; this.dirty(); api.dispatchAction({ type: "dragNode", seriesId: seriesModel.id, dataIndex: nodeData.getRawIndex(dataIndex), localX: this.shape.x / width, localY: this.shape.y / height }); }; el.draggable = true; el.cursor = "move"; } }); if (!this._data && seriesModel.isAnimationEnabled()) mainGroup.setClipPath(createGridClipShape$1(mainGroup.getBoundingRect(), seriesModel, function() { mainGroup.removeClipPath(); })); this._data = seriesModel.getData(); this._firstRender = false; }; SankeyView.prototype.__updateOnOwnRoam = function(payload, seriesModel, api) { applyViewCoordSysTransToElement(this.group, 2, seriesModel.coordinateSystem, null); }; SankeyView.prototype.dispose = function() { this._controller && this._controller.dispose(); }; SankeyView.prototype._updateViewCoordSys = function(seriesModel, api) { var layoutInfo = seriesModel.layoutInfo; var ownCoordSys = seriesModel.coordinateSystem = createViewCoordSysSimply(seriesModel, api, layoutInfo.x, layoutInfo.y, layoutInfo.width, layoutInfo.height); applyViewCoordSysTransToElement(this.group, 2, ownCoordSys, this._firstRender ? null : seriesModel); }; SankeyView.type = SERIES_TYPE_SANKEY; return SankeyView; }(ChartView); /** * Special color, use source node color or target node color * @param curveProps curve's style to parse * @param orient direction * @param edge current curve data */ function applyCurveStyle(curveProps, orient, edge) { switch (curveProps.fill) { case "source": curveProps.fill = edge.node1.getVisual("color"); curveProps.decal = edge.node1.getVisual("style").decal; break; case "target": curveProps.fill = edge.node2.getVisual("color"); curveProps.decal = edge.node2.getVisual("style").decal; break; case "gradient": var sourceColor = edge.node1.getVisual("color"); var targetColor = edge.node2.getVisual("color"); if (isString(sourceColor) && isString(targetColor)) curveProps.fill = new LinearGradient(0, 0, +(orient === "horizontal"), +(orient === "vertical"), [{ color: sourceColor, offset: 0 }, { color: targetColor, offset: 1 }]); } } function createGridClipShape$1(rect, seriesModel, cb) { var rectEl = new Rect$2({ shape: { x: rect.x - 10, y: rect.y - 10, width: 0, height: rect.height + 20 } }); initProps(rectEl, { shape: { width: rect.width + 20 } }, seriesModel, cb); return rectEl; } //#endregion //#region node_modules/echarts/lib/chart/sankey/sankeyLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var sankeyLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_SANKEY, sankeyLayout); function sankeyLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_SANKEY, function(seriesModel) { var nodeWidth = seriesModel.get("nodeWidth"); var nodeGap = seriesModel.get("nodeGap"); var refContainer = createBoxLayoutReference(seriesModel, api).refContainer; var layoutInfo = getLayoutRect(seriesModel.getBoxLayoutParams(), refContainer); seriesModel.layoutInfo = layoutInfo; var width = layoutInfo.width; var height = layoutInfo.height; var graph = seriesModel.getGraph(); var nodes = graph.nodes; var edges = graph.edges; computeNodeValues(nodes); layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, filter(nodes, function(node) { return node.getLayout().value === 0; }).length !== 0 ? 0 : seriesModel.get("layoutIterations"), seriesModel.get("orient"), seriesModel.get("nodeAlign")); }); } function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) { computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign); computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient); computeEdgeDepths(nodes, orient); } /** * Compute the value of each node by summing the associated edge's value */ function computeNodeValues(nodes) { each$12(nodes, function(node) { var value1 = sum(node.outEdges, getEdgeValue); var value2 = sum(node.inEdges, getEdgeValue); var nodeRawValue = node.getValue() || 0; var value = Math.max(value1, value2, nodeRawValue); node.setLayout({ value }, true); }); } /** * Compute the x-position for each node. * * Here we use Kahn algorithm to detect cycle when we traverse * the node to computer the initial x position. */ function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) { var remainEdges = []; var indegreeArr = []; var zeroIndegrees = []; var nextTargetNode = []; var x = 0; for (var i = 0; i < edges.length; i++) remainEdges[i] = 1; for (var i = 0; i < nodes.length; i++) { indegreeArr[i] = nodes[i].inEdges.length; if (indegreeArr[i] === 0) zeroIndegrees.push(nodes[i]); } var maxNodeDepth = -1; while (zeroIndegrees.length) { for (var idx = 0; idx < zeroIndegrees.length; idx++) { var node = zeroIndegrees[idx]; var item = node.hostGraph.data.getRawDataItem(node.dataIndex); var isItemDepth = item.depth != null && item.depth >= 0; if (isItemDepth && item.depth > maxNodeDepth) maxNodeDepth = item.depth; node.setLayout({ depth: isItemDepth ? item.depth : x }, true); orient === "vertical" ? node.setLayout({ dy: nodeWidth }, true) : node.setLayout({ dx: nodeWidth }, true); for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) { var edge = node.outEdges[edgeIdx]; var indexEdge = indexOf(edges, edge); remainEdges[indexEdge] = 0; var targetNode = edge.node2; var nodeIndex = indexOf(nodes, targetNode); if (--indegreeArr[nodeIndex] === 0 && indexOf(nextTargetNode, targetNode) < 0) nextTargetNode.push(targetNode); } } ++x; zeroIndegrees = nextTargetNode; nextTargetNode = []; } for (var i = 0; i < remainEdges.length; i++) if (remainEdges[i] === 1) throw new Error("Sankey is a DAG, the original data has cycle!"); var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1; if (nodeAlign && nodeAlign !== "left") adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth); scaleNodeBreadths(nodes, orient === "vertical" ? (height - nodeWidth) / maxDepth : (width - nodeWidth) / maxDepth, orient); } function isNodeDepth(node) { var item = node.hostGraph.data.getRawDataItem(node.dataIndex); return item.depth != null && item.depth >= 0; } function adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) { if (nodeAlign === "right") { var nextSourceNode = []; var remainNodes = nodes; var nodeHeight = 0; while (remainNodes.length) { for (var i = 0; i < remainNodes.length; i++) { var node = remainNodes[i]; node.setLayout({ skNodeHeight: nodeHeight }, true); for (var j = 0; j < node.inEdges.length; j++) { var edge = node.inEdges[j]; if (indexOf(nextSourceNode, edge.node1) < 0) nextSourceNode.push(edge.node1); } } remainNodes = nextSourceNode; nextSourceNode = []; ++nodeHeight; } each$12(nodes, function(node) { if (!isNodeDepth(node)) node.setLayout({ depth: Math.max(0, maxDepth - node.getLayout().skNodeHeight) }, true); }); } else if (nodeAlign === "justify") moveSinksRight(nodes, maxDepth); } /** * All the node without outEgdes are assigned maximum x-position and * be aligned in the last column. * * @param nodes. node of sankey view. * @param maxDepth. use to assign to node without outEdges as x-position. */ function moveSinksRight(nodes, maxDepth) { each$12(nodes, function(node) { if (!isNodeDepth(node) && !node.outEdges.length) node.setLayout({ depth: maxDepth }, true); }); } /** * Scale node x-position to the width * * @param nodes node of sankey view * @param kx multiple used to scale nodes */ function scaleNodeBreadths(nodes, kx, orient) { each$12(nodes, function(node) { var nodeDepth = node.getLayout().depth * kx; orient === "vertical" ? node.setLayout({ y: nodeDepth }, true) : node.setLayout({ x: nodeDepth }, true); }); } /** * Using Gauss-Seidel iterations method to compute the node depth(y-position) * * @param nodes node of sankey view * @param edges edge of sankey view * @param height the whole height of the area to draw the view * @param nodeGap the vertical distance between two nodes * in the same column. * @param iterations the number of iterations for the algorithm */ function computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) { var nodesByBreadth = prepareNodesByBreadth(nodes, orient); initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient); resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); for (var alpha = 1; iterations > 0; iterations--) { alpha *= .99; relaxRightToLeft(nodesByBreadth, alpha, orient); resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); relaxLeftToRight(nodesByBreadth, alpha, orient); resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); } } function prepareNodesByBreadth(nodes, orient) { var nodesByBreadth = []; var keyAttr = orient === "vertical" ? "y" : "x"; var groupResult = groupData(nodes, function(node) { return node.getLayout()[keyAttr]; }); asc$1(groupResult.keys); each$12(groupResult.keys, function(key) { nodesByBreadth.push(groupResult.buckets.get(key)); }); return nodesByBreadth; } /** * Compute the original y-position for each node */ function initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) { var minKy = Infinity; each$12(nodesByBreadth, function(nodes) { var n = nodes.length; var sum = 0; each$12(nodes, function(node) { sum += node.getLayout().value; }); var ky = orient === "vertical" ? (width - (n - 1) * nodeGap) / sum : (height - (n - 1) * nodeGap) / sum; if (ky < minKy) minKy = ky; }); each$12(nodesByBreadth, function(nodes) { each$12(nodes, function(node, i) { var nodeDy = node.getLayout().value * minKy; if (orient === "vertical") { node.setLayout({ x: i }, true); node.setLayout({ dx: nodeDy }, true); } else { node.setLayout({ y: i }, true); node.setLayout({ dy: nodeDy }, true); } }); }); each$12(edges, function(edge) { var edgeDy = +edge.getValue() * minKy; edge.setLayout({ dy: edgeDy }, true); }); } /** * Resolve the collision of initialized depth (y-position) */ function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) { var keyAttr = orient === "vertical" ? "x" : "y"; each$12(nodesByBreadth, function(nodes) { nodes.sort(function(a, b) { return a.getLayout()[keyAttr] - b.getLayout()[keyAttr]; }); var nodeX; var node; var dy; var y0 = 0; var n = nodes.length; var nodeDyAttr = orient === "vertical" ? "dx" : "dy"; for (var i = 0; i < n; i++) { node = nodes[i]; dy = y0 - node.getLayout()[keyAttr]; if (dy > 0) { nodeX = node.getLayout()[keyAttr] + dy; orient === "vertical" ? node.setLayout({ x: nodeX }, true) : node.setLayout({ y: nodeX }, true); } y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap; } var viewWidth = orient === "vertical" ? width : height; dy = y0 - nodeGap - viewWidth; if (dy > 0) { nodeX = node.getLayout()[keyAttr] - dy; orient === "vertical" ? node.setLayout({ x: nodeX }, true) : node.setLayout({ y: nodeX }, true); y0 = nodeX; for (var i = n - 2; i >= 0; --i) { node = nodes[i]; dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0; if (dy > 0) { nodeX = node.getLayout()[keyAttr] - dy; orient === "vertical" ? node.setLayout({ x: nodeX }, true) : node.setLayout({ y: nodeX }, true); } y0 = node.getLayout()[keyAttr]; } } }); } /** * Change the y-position of the nodes, except most the right side nodes * @param nodesByBreadth * @param alpha parameter used to adjust the nodes y-position */ function relaxRightToLeft(nodesByBreadth, alpha, orient) { each$12(nodesByBreadth.slice().reverse(), function(nodes) { each$12(nodes, function(node) { if (node.outEdges.length) { var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue); if (isNaN(y)) { var len = node.outEdges.length; y = len ? sum(node.outEdges, centerTarget, orient) / len : 0; } if (orient === "vertical") { var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha; node.setLayout({ x: nodeX }, true); } else { var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha; node.setLayout({ y: nodeY }, true); } } }); }); } function weightedTarget(edge, orient) { return center(edge.node2, orient) * edge.getValue(); } function centerTarget(edge, orient) { return center(edge.node2, orient); } function weightedSource(edge, orient) { return center(edge.node1, orient) * edge.getValue(); } function centerSource(edge, orient) { return center(edge.node1, orient); } function center(node, orient) { return orient === "vertical" ? node.getLayout().x + node.getLayout().dx / 2 : node.getLayout().y + node.getLayout().dy / 2; } function getEdgeValue(edge) { return edge.getValue(); } function sum(array, cb, orient) { var sum = 0; var len = array.length; var i = -1; while (++i < len) { var value = +cb(array[i], orient); if (!isNaN(value)) sum += value; } return sum; } /** * Change the y-position of the nodes, except most the left side nodes */ function relaxLeftToRight(nodesByBreadth, alpha, orient) { each$12(nodesByBreadth, function(nodes) { each$12(nodes, function(node) { if (node.inEdges.length) { var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue); if (isNaN(y)) { var len = node.inEdges.length; y = len ? sum(node.inEdges, centerSource, orient) / len : 0; } if (orient === "vertical") { var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha; node.setLayout({ x: nodeX }, true); } else { var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha; node.setLayout({ y: nodeY }, true); } } }); }); } /** * Compute the depth(y-position) of each edge */ function computeEdgeDepths(nodes, orient) { var keyAttr = orient === "vertical" ? "x" : "y"; each$12(nodes, function(node) { node.outEdges.sort(function(a, b) { return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr]; }); node.inEdges.sort(function(a, b) { return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr]; }); }); each$12(nodes, function(node) { var sy = 0; var ty = 0; each$12(node.outEdges, function(edge) { edge.setLayout({ sy }, true); sy += edge.getLayout().dy; }); each$12(node.inEdges, function(edge) { edge.setLayout({ ty }, true); ty += edge.getLayout().dy; }); }); } //#endregion //#region node_modules/echarts/lib/chart/sankey/sankeyVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var sankeyVisualStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_SANKEY, sankeyVisual); function sankeyVisual(ecModel) { ecModel.eachSeriesByType(SERIES_TYPE_SANKEY, function(seriesModel) { var graph = seriesModel.getGraph(); var nodes = graph.nodes; var edges = graph.edges; if (nodes.length) { var minValue_1 = Infinity; var maxValue_1 = -Infinity; each$12(nodes, function(node) { var nodeValue = node.getLayout().value; if (nodeValue < minValue_1) minValue_1 = nodeValue; if (nodeValue > maxValue_1) maxValue_1 = nodeValue; }); each$12(nodes, function(node) { var mapValueToColor = new VisualMapping({ type: "color", mappingMethod: "linear", dataExtent: [minValue_1, maxValue_1], visual: seriesModel.get("color") }).mapValueToVisual(node.getLayout().value); var customColor = node.getModel().get(["itemStyle", "color"]); if (customColor != null) { node.setVisual("color", customColor); node.setVisual("style", { fill: customColor }); } else { node.setVisual("color", mapValueToColor); node.setVisual("style", { fill: mapValueToColor }); } }); } if (edges.length) each$12(edges, function(edge) { var edgeStyle = edge.getModel().get("lineStyle"); edge.setVisual("style", edgeStyle); }); }); } //#endregion //#region node_modules/echarts/lib/chart/sankey/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$38(registers) { registers.registerChartView(SankeyView); registers.registerSeriesModel(SankeySeriesModel); registers.registerLayout(sankeyLayoutStageHandler); registers.registerVisual(sankeyVisualStageHandler); registers.registerAction({ type: "dragNode", event: "dragnode", update: "update" }, function(payload, ecModel) { ecModel.eachComponent({ mainType: COMPONENT_MAIN_TYPE_SERIES, subType: SERIES_TYPE_SANKEY, query: payload }, function(seriesModel) { seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]); }); }); registerRoamActionSimply(registers, COMPONENT_MAIN_TYPE_SERIES, SERIES_TYPE_SANKEY); } //#endregion //#region node_modules/echarts/lib/chart/helper/whiskerBoxCommon.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var WhiskerBoxCommonMixin = function() { function WhiskerBoxCommonMixin() {} /** * @private */ WhiskerBoxCommonMixin.prototype._hasEncodeRule = function(key) { var encodeRules = this.getEncode(); return encodeRules && encodeRules.get(key) != null; }; /** * @override */ WhiskerBoxCommonMixin.prototype.getInitialData = function(option, ecModel) { var ordinalMeta; var xAxisModel = ecModel.getComponent("xAxis", this.get("xAxisIndex")); var yAxisModel = ecModel.getComponent("yAxis", this.get("yAxisIndex")); var xAxisType = xAxisModel.get("type"); var yAxisType = yAxisModel.get("type"); var addOrdinal; var layout = option.layout; if (xAxisType === "category") { layout = "horizontal"; ordinalMeta = xAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule("x"); } else if (yAxisType === "category") { layout = "vertical"; ordinalMeta = yAxisModel.getOrdinalMeta(); addOrdinal = !this._hasEncodeRule("y"); } if (!layout) layout = yAxisType === "time" ? "vertical" : "horizontal"; this._layout = layout; var coordDims = ["x", "y"]; var baseAxisDimIndex = layout === "horizontal" ? 0 : 1; var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex]; var otherAxisDim = coordDims[1 - baseAxisDimIndex]; var axisModels = [xAxisModel, yAxisModel]; var baseAxisType = axisModels[baseAxisDimIndex].get("type"); var otherAxisType = axisModels[1 - baseAxisDimIndex].get("type"); var data = option.data; if (data && addOrdinal) { var newOptionData_1 = []; each$12(data, function(item, index) { var newItem; if (isArray$1(item)) { newItem = item.slice(); item.unshift(index); } else if (isArray$1(item.value)) { newItem = extend({}, item); newItem.value = newItem.value.slice(); item.value.unshift(index); } else newItem = item; newOptionData_1.push(newItem); }); option.data = newOptionData_1; } var defaultValueDimensions = this.defaultValueDimensions; var coordDimensions = [{ name: baseAxisDim, type: getDimensionTypeByAxis(baseAxisType), ordinalMeta, otherDims: { tooltip: false, itemName: 0 }, dimsDef: ["base"] }, { name: otherAxisDim, type: getDimensionTypeByAxis(otherAxisType), dimsDef: defaultValueDimensions.slice() }]; return createSeriesDataSimply(this, { coordDimensions, dimensionsCount: defaultValueDimensions.length + 1, encodeDefaulter: curry$1(makeSeriesEncodeForAxisCoordSys, coordDimensions, this) }); }; /** * If horizontal, base axis is x, otherwise y. * @override */ WhiskerBoxCommonMixin.prototype.getBaseAxis = function() { var dim = this._baseAxisDim; return this.ecModel.getComponent(dim + "Axis", this.get(dim + "AxisIndex")).axis; }; WhiskerBoxCommonMixin.prototype.getWhiskerBoxesLayout = function() { return this._layout; }; return WhiskerBoxCommonMixin; }(); /** * PENDING: We do not use zr Element clipPath due to performance consideration, * although it may be further optimized. */ function resolveNormalBoxClipping(clipArea, itemLayout) { var count = itemLayout.ends.length; var containCount = 0; for (var i = 0; i < count; i++) if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) containCount++; return !containCount ? 2 : containCount < count ? 1 : 0; } //#endregion //#region node_modules/echarts/lib/chart/boxplot/BoxplotSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_BOXPLOT = "boxplot"; var BoxplotSeriesModel = function(_super) { __extends(BoxplotSeriesModel, _super); function BoxplotSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = BoxplotSeriesModel.type; /** * @see * The meanings of 'min' and 'max' depend on user, * and echarts do not need to know it. * @readOnly */ _this.defaultValueDimensions = [ { name: "min", defaultTooltip: true }, { name: "Q1", defaultTooltip: true }, { name: "median", defaultTooltip: true }, { name: "Q3", defaultTooltip: true }, { name: "max", defaultTooltip: true } ]; _this.visualDrawType = "stroke"; return _this; } BoxplotSeriesModel.type = "series." + SERIES_TYPE_BOXPLOT; BoxplotSeriesModel.dependencies = [ "xAxis", "yAxis", "grid" ]; BoxplotSeriesModel.defaultOption = { z: 2, coordinateSystem: "cartesian2d", legendHoverLink: true, layout: null, clip: true, boxWidth: [7, 50], itemStyle: { color: tokens.color.neutral00, borderWidth: 1 }, emphasis: { scale: true, itemStyle: { borderWidth: 2, shadowBlur: 5, shadowOffsetX: 1, shadowOffsetY: 1, shadowColor: tokens.color.shadow } }, animationDuration: 800 }; return BoxplotSeriesModel; }(SeriesModel); mixin(BoxplotSeriesModel, WhiskerBoxCommonMixin, true); //#endregion //#region node_modules/echarts/lib/chart/boxplot/BoxplotView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BoxplotView = function(_super) { __extends(BoxplotView, _super); function BoxplotView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_BOXPLOT; return _this; } BoxplotView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var group = this.group; var oldData = this._data; if (!this._data) group.removeAll(); var constDim = seriesModel.getWhiskerBoxesLayout() === "horizontal" ? 1 : 0; var needClip = seriesModel.get("clip", true); var coordSys = seriesModel.coordinateSystem; var clipArea = coordSys.getArea && coordSys.getArea(); var clipPath = needClip && createClipPath(coordSys, false, seriesModel); data.diff(oldData).add(function(newIdx) { if (data.hasValue(newIdx)) { var itemLayout = data.getItemLayout(newIdx); var clipKind = needClip ? resolveNormalBoxClipping(clipArea, itemLayout) : 0; if (clipKind === 2) return; var symbolEl = createNormalBox$1(itemLayout, data, newIdx, constDim, true); updateClipPath(clipKind === 1, symbolEl, clipPath); data.setItemGraphicEl(newIdx, symbolEl); group.add(symbolEl); } }).update(function(newIdx, oldIdx) { var symbolEl = oldData.getItemGraphicEl(oldIdx); if (!data.hasValue(newIdx)) { group.remove(symbolEl); return; } var itemLayout = data.getItemLayout(newIdx); var clipKind = needClip ? resolveNormalBoxClipping(clipArea, itemLayout) : 0; if (clipKind === 2) { group.remove(symbolEl); return; } if (!symbolEl) symbolEl = createNormalBox$1(itemLayout, data, newIdx, constDim); else { saveOldStyle(symbolEl); updateNormalBoxData(itemLayout, symbolEl, data, newIdx); } updateClipPath(clipKind === 1, symbolEl, clipPath); group.add(symbolEl); data.setItemGraphicEl(newIdx, symbolEl); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && group.remove(el); }).execute(); this._data = data; }; BoxplotView.prototype.remove = function(ecModel) { var group = this.group; var data = this._data; this._data = null; data && data.eachItemGraphicEl(function(el) { el && group.remove(el); }); }; BoxplotView.type = SERIES_TYPE_BOXPLOT; return BoxplotView; }(ChartView); var BoxPathShape = function() { function BoxPathShape() {} return BoxPathShape; }(); var BoxPath = function(_super) { __extends(BoxPath, _super); function BoxPath(opts) { var _this = _super.call(this, opts) || this; _this.type = "boxplotBoxPath"; return _this; } BoxPath.prototype.getDefaultShape = function() { return new BoxPathShape(); }; BoxPath.prototype.buildPath = function(ctx, shape) { var ends = shape.points; var i = 0; ctx.moveTo(ends[i][0], ends[i][1]); i++; for (; i < 4; i++) ctx.lineTo(ends[i][0], ends[i][1]); ctx.closePath(); for (; i < ends.length; i++) { ctx.moveTo(ends[i][0], ends[i][1]); i++; ctx.lineTo(ends[i][0], ends[i][1]); } }; return BoxPath; }(Path); function createNormalBox$1(itemLayout, data, dataIndex, constDim, isInit) { var ends = itemLayout.ends; var el = new BoxPath({ shape: { points: isInit ? transInit$1(ends, constDim, itemLayout) : ends } }); updateNormalBoxData(itemLayout, el, data, dataIndex, isInit); return el; } function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) { var seriesModel = data.hostModel; var updateMethod = graphic_exports$1[isInit ? "initProps" : "updateProps"]; updateMethod(el, { shape: { points: itemLayout.ends } }, seriesModel, dataIndex); el.useStyle(data.getItemVisual(dataIndex, "style")); el.style.strokeNoScale = true; el.z2 = 100; var itemModel = data.getItemModel(dataIndex); var emphasisModel = itemModel.getModel("emphasis"); setStatesStylesFromModel(el, itemModel); toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); } function transInit$1(points, dim, itemLayout) { return map$1(points, function(point) { point = point.slice(); point[dim] = itemLayout.initBaseline; return point; }); } //#endregion //#region node_modules/echarts/lib/chart/boxplot/boxplotLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce$3 = makeCallOnlyOnce(); var boxplotLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_BOXPLOT, boxplotLayout); function boxplotLayout(ecModel) { var axisStatKey = makeAxisStatKey(SERIES_TYPE_BOXPLOT); eachAxisOnKey(ecModel, axisStatKey, function(axis) { var seriesCount = countSeriesOnAxisOnKey(axis, axisStatKey); if (!seriesCount) return; var baseResult = calculateBase(axis, seriesCount); eachSeriesOnAxisOnKey(axis, axisStatKey, function(seriesModel) { var seriesIndex = seriesModel.seriesIndex; layoutSingleSeries(seriesModel, baseResult.boxOffsetList[seriesIndex], baseResult.boxWidthList[seriesIndex]); }); }); } /** * Calculate offset and box width for each series. */ function calculateBase(baseAxis, seriesCount) { var boxWidthList = []; var boxOffsetList = []; var boundList = []; var bandWidth = calcBandWidth(baseAxis, { fromStat: { key: makeAxisStatKey(SERIES_TYPE_BOXPLOT) }, min: 1 }).w; eachSeriesOnAxisOnKey(baseAxis, makeAxisStatKey(SERIES_TYPE_BOXPLOT), function(seriesModel) { var boxWidthBound = seriesModel.get("boxWidth"); if (!isArray$1(boxWidthBound)) boxWidthBound = [boxWidthBound, boxWidthBound]; boundList[seriesModel.seriesIndex] = [parsePercent(boxWidthBound[0], bandWidth) || 0, parsePercent(boxWidthBound[1], bandWidth) || 0]; }); var availableWidth = bandWidth * .8 - 2; var boxGap = availableWidth / seriesCount * .3; var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount; var base = boxWidth / 2 - availableWidth / 2; eachSeriesOnAxisOnKey(baseAxis, makeAxisStatKey(SERIES_TYPE_BOXPLOT), function(seriesModel) { var seriesIndex = seriesModel.seriesIndex; boxOffsetList[seriesIndex] = base; base += boxGap + boxWidth; boxWidthList[seriesIndex] = mathMin$9(mathMax$9(boxWidth, boundList[seriesIndex][0]), boundList[seriesIndex][1]); }); return { boxOffsetList, boxWidthList }; } /** * Calculate points location for each series. */ function layoutSingleSeries(seriesModel, offset, boxWidth) { var coordSys = seriesModel.coordinateSystem; var data = seriesModel.getData(); var halfWidth = boxWidth / 2; var cDimIdx = seriesModel.getWhiskerBoxesLayout() === "horizontal" ? 0 : 1; var vDimIdx = 1 - cDimIdx; var coordDims = ["x", "y"]; var cDim = data.mapDimension(coordDims[cDimIdx]); var vDims = data.mapDimensionsAll(coordDims[vDimIdx]); if (cDim == null || vDims.length < 5) return; for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) { var axisDimVal = data.get(cDim, dataIndex); var median = getPoint(axisDimVal, vDims[2], dataIndex); var end1 = getPoint(axisDimVal, vDims[0], dataIndex); var end2 = getPoint(axisDimVal, vDims[1], dataIndex); var end4 = getPoint(axisDimVal, vDims[3], dataIndex); var end5 = getPoint(axisDimVal, vDims[4], dataIndex); var ends = []; addBodyEnd(ends, end2, false); addBodyEnd(ends, end4, true); ends.push(end1, end2, end5, end4); layEndLine(ends, end1); layEndLine(ends, end5); layEndLine(ends, median); data.setItemLayout(dataIndex, { initBaseline: median[vDimIdx], ends }); } function getPoint(axisDimVal, dim, dataIndex) { var val = data.get(dim, dataIndex); var p = []; p[cDimIdx] = axisDimVal; p[vDimIdx] = val; var point; if (isNaN(axisDimVal) || isNaN(val)) point = [NaN, NaN]; else { point = coordSys.dataToPoint(p); point[cDimIdx] += offset; } return point; } function addBodyEnd(ends, point, start) { var point1 = point.slice(); var point2 = point.slice(); point1[cDimIdx] += halfWidth; point2[cDimIdx] -= halfWidth; start ? ends.push(point1, point2) : ends.push(point2, point1); } function layEndLine(ends, endCenter) { var from = endCenter.slice(); var to = endCenter.slice(); from[cDimIdx] -= halfWidth; to[cDimIdx] += halfWidth; ends.push(from, to); } } function registerBoxplotAxisHandlers(registers) { callOnlyOnce$3(registers, function() { var axisStatKey = makeAxisStatKey(SERIES_TYPE_BOXPLOT); requireAxisStatistics(registers, { key: axisStatKey, seriesType: SERIES_TYPE_BOXPLOT, getMetrics: createMetricsNonOrdinalLinearPositiveMinGap }); registerAxisContainShapeHandler(axisStatKey, createBandWidthBasedAxisContainShapeHandler(axisStatKey)); }); } //#endregion //#region node_modules/echarts/lib/chart/boxplot/prepareBoxplotData.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * See: * * * * Helper method for preparing data. * * @param rawData like * [ * [12,232,443], (raw data set for the first box) * [3843,5545,1232], (raw data set for the second box) * ... * ] * @param opt.boundIQR=1.5 Data less than min bound is outlier. * default 1.5, means Q1 - 1.5 * (Q3 - Q1). * If 'none'/0 passed, min bound will not be used. */ function prepareBoxplotData(rawData, opt) { opt = opt || {}; var boxData = []; var outliers = []; var boundIQR = opt.boundIQR; var useExtreme = boundIQR === "none" || boundIQR === 0; for (var i = 0; i < rawData.length; i++) { var ascList = asc$1(rawData[i].slice()); var Q1 = quantile(ascList, .25); var Q2 = quantile(ascList, .5); var Q3 = quantile(ascList, .75); var min = ascList[0]; var max = ascList[ascList.length - 1]; var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1); var low = useExtreme ? min : Math.max(min, Q1 - bound); var high = useExtreme ? max : Math.min(max, Q3 + bound); var itemNameFormatter = opt.itemNameFormatter; var itemName = isFunction(itemNameFormatter) ? itemNameFormatter({ value: i }) : isString(itemNameFormatter) ? itemNameFormatter.replace("{value}", i + "") : i + ""; boxData.push([ itemName, low, Q1, Q2, Q3, high ]); for (var j = 0; j < ascList.length; j++) { var dataItem = ascList[j]; if (dataItem < low || dataItem > high) { var outlier = [itemName, dataItem]; outliers.push(outlier); } } } return { boxData, outliers }; } //#endregion //#region node_modules/echarts/lib/chart/boxplot/boxplotTransform.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var boxplotTransform = { type: "echarts:boxplot", transform: function transform(params) { var upstream = params.upstream; if (upstream.sourceFormat !== "arrayRows") { var errMsg = ""; errMsg = makePrintable("source data is not applicable for this boxplot transform. Expect number[][]."); throwError(errMsg); } var result = prepareBoxplotData(upstream.getRawData(), params.config); return [{ dimensions: [ "ItemName", "Low", "Q1", "Q2", "Q3", "High" ], data: result.boxData }, { data: result.outliers }]; } }; //#endregion //#region node_modules/echarts/lib/chart/boxplot/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$37(registers) { registers.registerSeriesModel(BoxplotSeriesModel); registers.registerChartView(BoxplotView); registers.registerLayout(boxplotLayoutStageHandler); registers.registerTransform(boxplotTransform); registerBoxplotAxisHandlers(registers); } //#endregion //#region node_modules/echarts/lib/chart/candlestick/CandlestickSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_CANDLESTICK = "candlestick"; var CandlestickSeriesModel = function(_super) { __extends(CandlestickSeriesModel, _super); function CandlestickSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CandlestickSeriesModel.type; _this.defaultValueDimensions = [ { name: "open", defaultTooltip: true }, { name: "close", defaultTooltip: true }, { name: "lowest", defaultTooltip: true }, { name: "highest", defaultTooltip: true } ]; return _this; } /** * Get dimension for shadow in dataZoom * @return dimension name */ CandlestickSeriesModel.prototype.getShadowDim = function() { return "open"; }; CandlestickSeriesModel.prototype.brushSelector = function(dataIndex, data, selectors) { var itemLayout = data.getItemLayout(dataIndex); return itemLayout && selectors.rect(itemLayout.brushRect); }; CandlestickSeriesModel.type = "series." + SERIES_TYPE_CANDLESTICK; CandlestickSeriesModel.dependencies = [ "xAxis", "yAxis", "grid" ]; CandlestickSeriesModel.defaultOption = { z: 2, coordinateSystem: "cartesian2d", legendHoverLink: true, layout: null, clip: true, itemStyle: { color: "#eb5454", color0: "#47b262", borderColor: "#eb5454", borderColor0: "#47b262", borderColorDoji: null, borderWidth: 1 }, emphasis: { itemStyle: { borderWidth: 2 } }, barMaxWidth: null, barMinWidth: null, barWidth: null, large: true, largeThreshold: 600, progressive: 3e3, progressiveThreshold: 1e4, progressiveChunkMode: "mod", animationEasing: "linear", animationDuration: 300 }; return CandlestickSeriesModel; }(SeriesModel); mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true); //#endregion //#region node_modules/echarts/lib/chart/candlestick/candlestickVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var positiveBorderColorQuery = ["itemStyle", "borderColor"]; var negativeBorderColorQuery = ["itemStyle", "borderColor0"]; var dojiBorderColorQuery = ["itemStyle", "borderColorDoji"]; var positiveColorQuery = ["itemStyle", "color"]; var negativeColorQuery = ["itemStyle", "color0"]; function getColor(sign, model) { return model.get(sign > 0 ? positiveColorQuery : negativeColorQuery); } function getBorderColor(sign, model) { return model.get(sign === 0 ? dojiBorderColorQuery : sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery); } var candlestickVisual = { seriesType: SERIES_TYPE_CANDLESTICK, plan: createRenderPlanner(), performRawSeries: true, reset: function(seriesModel, ecModel) { if (ecModel.isSeriesFiltered(seriesModel)) return; return !seriesModel.pipelineContext.large && { progress: function(params, data) { var dataIndex; while ((dataIndex = params.next()) != null) { var itemModel = data.getItemModel(dataIndex); var sign = data.getItemLayout(dataIndex).sign; var style = itemModel.getItemStyle(); style.fill = getColor(sign, itemModel); style.stroke = getBorderColor(sign, itemModel) || style.fill; extend(data.ensureUniqueItemVisual(dataIndex, "style"), style); } } }; } }; //#endregion //#region node_modules/echarts/lib/chart/candlestick/CandlestickView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SKIP_PROPS = ["color", "borderColor"]; var CandlestickView = function(_super) { __extends(CandlestickView, _super); function CandlestickView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CandlestickView.type; return _this; } CandlestickView.prototype.render = function(seriesModel, ecModel, api) { this.group.removeClipPath(); this._progressiveEls = null; this._updateDrawMode(seriesModel); this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel); }; CandlestickView.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { this._clear(); this._updateDrawMode(seriesModel); }; CandlestickView.prototype.incrementalRender = function(params, seriesModel, ecModel, api) { this._progressiveEls = []; this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel); }; CandlestickView.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; CandlestickView.prototype._updateDrawMode = function(seriesModel) { var isLargeDraw = seriesModel.pipelineContext.large; if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) { this._isLargeDraw = isLargeDraw; this._clear(); } }; CandlestickView.prototype._renderNormal = function(seriesModel) { var data = seriesModel.getData(); var oldData = this._data; var group = this.group; var isSimpleBox = data.getLayout("isSimpleBox"); var needClip = seriesModel.get("clip", true); var coordSys = seriesModel.coordinateSystem; var clipArea = coordSys.getArea && coordSys.getArea(); var clipPath = needClip && createClipPath(coordSys, false, seriesModel); if (!this._data) group.removeAll(); var transPointDim = getTransPointDimension(seriesModel); data.diff(oldData).add(function(newIdx) { if (data.hasValue(newIdx)) { var itemLayout = data.getItemLayout(newIdx); var clipKind = needClip ? resolveNormalBoxClipping(clipArea, itemLayout) : 0; if (clipKind === 2) return; var el = createNormalBox(itemLayout, newIdx, transPointDim, true); initProps(el, { shape: { points: itemLayout.ends } }, seriesModel, newIdx); updateClipPath(clipKind === 1, el, clipPath); setBoxCommon(el, data, newIdx, isSimpleBox); group.add(el); data.setItemGraphicEl(newIdx, el); } }).update(function(newIdx, oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); if (!data.hasValue(newIdx)) { group.remove(el); return; } var itemLayout = data.getItemLayout(newIdx); var clipKind = needClip ? resolveNormalBoxClipping(clipArea, itemLayout) : 0; if (clipKind === 2) { group.remove(el); return; } if (!el) el = createNormalBox(itemLayout, newIdx, transPointDim); else { updateProps$1(el, { shape: { points: itemLayout.ends } }, seriesModel, newIdx); saveOldStyle(el); } setBoxCommon(el, data, newIdx, isSimpleBox); updateClipPath(clipKind === 1, el, clipPath); group.add(el); data.setItemGraphicEl(newIdx, el); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && group.remove(el); }).execute(); this._data = data; }; CandlestickView.prototype._renderLarge = function(seriesModel) { this._clear(); createLarge(seriesModel, this.group); var clipPath = seriesModel.get("clip", true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null; updateClipPath(!!clipPath, this.group, clipPath); }; CandlestickView.prototype._incrementalRenderNormal = function(params, seriesModel) { var data = seriesModel.getData(); var isSimpleBox = data.getLayout("isSimpleBox"); var transPointDim = getTransPointDimension(seriesModel); var dataIndex; while ((dataIndex = params.next()) != null) { var el = createNormalBox(data.getItemLayout(dataIndex), dataIndex, transPointDim); setBoxCommon(el, data, dataIndex, isSimpleBox); el.incremental = getIncrementalId(seriesModel); this.group.add(el); this._progressiveEls.push(el); } }; CandlestickView.prototype._incrementalRenderLarge = function(params, seriesModel) { createLarge(seriesModel, this.group, this._progressiveEls, true); }; CandlestickView.prototype.remove = function(ecModel) { this._clear(); }; CandlestickView.prototype._clear = function() { this.group.removeAll(); updateClipPath(false, this.group, null); this._data = null; }; CandlestickView.type = SERIES_TYPE_CANDLESTICK; return CandlestickView; }(ChartView); var NormalBoxPathShape = function() { function NormalBoxPathShape() {} return NormalBoxPathShape; }(); var NormalBoxPath = function(_super) { __extends(NormalBoxPath, _super); function NormalBoxPath(opts) { var _this = _super.call(this, opts) || this; _this.type = "normalCandlestickBox"; return _this; } NormalBoxPath.prototype.getDefaultShape = function() { return new NormalBoxPathShape(); }; NormalBoxPath.prototype.buildPath = function(ctx, shape) { var ends = shape.points; if (this.__simpleBox) { ctx.moveTo(ends[4][0], ends[4][1]); ctx.lineTo(ends[6][0], ends[6][1]); } else { ctx.moveTo(ends[0][0], ends[0][1]); ctx.lineTo(ends[1][0], ends[1][1]); ctx.lineTo(ends[2][0], ends[2][1]); ctx.lineTo(ends[3][0], ends[3][1]); ctx.closePath(); ctx.moveTo(ends[4][0], ends[4][1]); ctx.lineTo(ends[5][0], ends[5][1]); ctx.moveTo(ends[6][0], ends[6][1]); ctx.lineTo(ends[7][0], ends[7][1]); } }; return NormalBoxPath; }(Path); function createNormalBox(itemLayout, dataIndex, constDim, isInit) { var ends = itemLayout.ends; return new NormalBoxPath({ shape: { points: isInit ? transInit(ends, constDim, itemLayout) : ends }, z2: 100 }); } function setBoxCommon(el, data, dataIndex, isSimpleBox) { var itemModel = data.getItemModel(dataIndex); el.useStyle(data.getItemVisual(dataIndex, "style")); el.style.strokeNoScale = true; var cursorStyle = itemModel.getShallow("cursor"); cursorStyle && el.attr("cursor", cursorStyle); el.__simpleBox = isSimpleBox; setStatesStylesFromModel(el, itemModel); var sign = data.getItemLayout(dataIndex).sign; each$12(el.states, function(state, stateName) { var stateModel = itemModel.getModel(stateName); var color = getColor(sign, stateModel); var borderColor = getBorderColor(sign, stateModel) || color; var stateStyle = state.style || (state.style = {}); color && (stateStyle.fill = color); borderColor && (stateStyle.stroke = borderColor); }); var emphasisModel = itemModel.getModel("emphasis"); toggleHoverEmphasis(el, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); } function transInit(points, dim, itemLayout) { return map$1(points, function(point) { point = point.slice(); point[dim] = itemLayout.initBaseline; return point; }); } function getTransPointDimension(seriesModel) { return seriesModel.getWhiskerBoxesLayout() === "horizontal" ? 1 : 0; } var LargeBoxPathShape = function() { function LargeBoxPathShape() {} return LargeBoxPathShape; }(); var LargeBoxPath = function(_super) { __extends(LargeBoxPath, _super); function LargeBoxPath(opts) { var _this = _super.call(this, opts) || this; _this.type = "largeCandlestickBox"; return _this; } LargeBoxPath.prototype.getDefaultShape = function() { return new LargeBoxPathShape(); }; LargeBoxPath.prototype.buildPath = function(ctx, shape) { var points = shape.points; for (var i = 0; i < points.length;) if (this.__sign === points[i++]) { var x = points[i++]; ctx.moveTo(x, points[i++]); ctx.lineTo(x, points[i++]); } else i += 3; }; return LargeBoxPath; }(Path); function createLarge(seriesModel, group, progressiveEls, incremental) { var data = seriesModel.getData(); var largePoints = data.getLayout("largePoints"); var elP = new LargeBoxPath({ shape: { points: largePoints }, __sign: 1, ignoreCoarsePointer: true }); group.add(elP); var elN = new LargeBoxPath({ shape: { points: largePoints }, __sign: -1, ignoreCoarsePointer: true }); group.add(elN); var elDoji = new LargeBoxPath({ shape: { points: largePoints }, __sign: 0, ignoreCoarsePointer: true }); group.add(elDoji); setLargeStyle(1, elP, seriesModel, data); setLargeStyle(-1, elN, seriesModel, data); setLargeStyle(0, elDoji, seriesModel, data); if (incremental) { elP.incremental = getIncrementalId(seriesModel); elN.incremental = getIncrementalId(seriesModel); elDoji.incremental = getIncrementalId(seriesModel); } if (progressiveEls) progressiveEls.push(elP, elN, elDoji); } function setLargeStyle(sign, el, seriesModel, data) { var borderColor = getBorderColor(sign, seriesModel) || getColor(sign, seriesModel); var itemStyle = seriesModel.getModel("itemStyle").getItemStyle(SKIP_PROPS); el.useStyle(itemStyle); el.style.fill = null; el.style.stroke = borderColor; var cursorStyle = seriesModel.get("cursor"); cursorStyle && el.attr("cursor", cursorStyle); } //#endregion //#region node_modules/echarts/lib/chart/candlestick/preprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function candlestickPreprocessor(option) { if (!option || !isArray$1(option.series)) return; each$12(option.series, function(seriesItem) { if (isObject$3(seriesItem) && seriesItem.type === "k") seriesItem.type = SERIES_TYPE_CANDLESTICK; }); } //#endregion //#region node_modules/echarts/lib/chart/candlestick/candlestickLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce$2 = makeCallOnlyOnce(); var candlestickLayout = { seriesType: SERIES_TYPE_CANDLESTICK, plan: createRenderPlanner(), reset: function(seriesModel) { var coordSys = seriesModel.coordinateSystem; var data = seriesModel.getData(); var candleWidth = calculateCandleWidth(seriesModel, data); var cDimIdx = seriesModel.getWhiskerBoxesLayout() === "horizontal" ? 0 : 1; var vDimIdx = 1 - cDimIdx; var coordDims = ["x", "y"]; var cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx])); var vDimsI = map$1(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data); var openDimI = vDimsI[0]; var closeDimI = vDimsI[1]; var lowestDimI = vDimsI[2]; var highestDimI = vDimsI[3]; data.setLayout({ candleWidth, isSimpleBox: candleWidth <= 1.3 }); if (cDimI < 0 || vDimsI.length < 4) return; return { progress: seriesModel.pipelineContext.large ? largeProgress : normalProgress }; function normalProgress(params, data) { var dataIndex; var store = data.getStore(); while ((dataIndex = params.next()) != null) { var axisDimVal = store.get(cDimI, dataIndex); var openVal = store.get(openDimI, dataIndex); var closeVal = store.get(closeDimI, dataIndex); var lowestVal = store.get(lowestDimI, dataIndex); var highestVal = store.get(highestDimI, dataIndex); var ocLow = mathMin$9(openVal, closeVal); var ocHigh = mathMax$9(openVal, closeVal); var ocLowPoint = getPoint(ocLow, axisDimVal); var ocHighPoint = getPoint(ocHigh, axisDimVal); var lowestPoint = getPoint(lowestVal, axisDimVal); var highestPoint = getPoint(highestVal, axisDimVal); var ends = []; addBodyEnd(ends, ocHighPoint, 0); addBodyEnd(ends, ocLowPoint, 1); ends.push(subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint), subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint)); var hasDojiColor = !!data.getItemModel(dataIndex).get(["itemStyle", "borderColorDoji"]); data.setItemLayout(dataIndex, { sign: getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor), initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], ends, brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal) }); } function getPoint(val, axisDimVal) { var p = []; p[cDimIdx] = axisDimVal; p[vDimIdx] = val; return isNaN(axisDimVal) || isNaN(val) ? [NaN, NaN] : coordSys.dataToPoint(p); } function addBodyEnd(ends, point, start) { var point1 = point.slice(); var point2 = point.slice(); point1[cDimIdx] = subPixelOptimize(point1[cDimIdx] + candleWidth / 2, 1, false); point2[cDimIdx] = subPixelOptimize(point2[cDimIdx] - candleWidth / 2, 1, true); start ? ends.push(point1, point2) : ends.push(point2, point1); } function makeBrushRect(lowestVal, highestVal, axisDimVal) { var pmin = getPoint(lowestVal, axisDimVal); var pmax = getPoint(highestVal, axisDimVal); pmin[cDimIdx] -= candleWidth / 2; pmax[cDimIdx] -= candleWidth / 2; return { x: pmin[0], y: pmin[1], width: vDimIdx ? candleWidth : pmax[0] - pmin[0], height: vDimIdx ? pmax[1] - pmin[1] : candleWidth }; } function subPixelOptimizePoint(point) { point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1); return point; } } function largeProgress(params, data) { var points = createFloat32Array(params.count * 4); var offset = 0; var point; var tmpIn = []; var tmpOut = []; var dataIndex; var store = data.getStore(); var hasDojiColor = !!seriesModel.get(["itemStyle", "borderColorDoji"]); while ((dataIndex = params.next()) != null) { var axisDimVal = store.get(cDimI, dataIndex); var openVal = store.get(openDimI, dataIndex); var closeVal = store.get(closeDimI, dataIndex); var lowestVal = store.get(lowestDimI, dataIndex); var highestVal = store.get(highestDimI, dataIndex); if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) { points[offset++] = NaN; offset += 3; continue; } points[offset++] = getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor); tmpIn[cDimIdx] = axisDimVal; tmpIn[vDimIdx] = lowestVal; point = coordSys.dataToPoint(tmpIn, null, tmpOut); points[offset++] = point ? point[0] : NaN; points[offset++] = point ? point[1] : NaN; tmpIn[vDimIdx] = highestVal; point = coordSys.dataToPoint(tmpIn, null, tmpOut); points[offset++] = point ? point[1] : NaN; } data.setLayout("largePoints", points); } } }; /** * Get the sign of a single data. * * @returns 0 for doji with hasDojiColor: true, * 1 for positive, * -1 for negative. */ function getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor) { var sign; if (openVal > closeVal) sign = -1; else if (openVal < closeVal) sign = 1; else sign = hasDojiColor ? 0 : dataIndex > 0 ? store.get(closeDimI, dataIndex - 1) <= closeVal ? 1 : -1 : 1; return sign; } function calculateCandleWidth(seriesModel, data) { var bandWidth = calcBandWidth(seriesModel.getBaseAxis(), { fromStat: { key: makeAxisStatKey(SERIES_TYPE_CANDLESTICK) }, min: 1 }).w; var barMaxWidth = parsePercent(retrieve2(seriesModel.get("barMaxWidth"), bandWidth), bandWidth); var barMinWidth = parsePercent(retrieve2(seriesModel.get("barMinWidth"), 1), bandWidth); var barWidth = seriesModel.get("barWidth"); return barWidth != null ? parsePercent(barWidth, bandWidth) : mathMax$9(mathMin$9(bandWidth / 2, barMaxWidth), barMinWidth); } function registerCandlestickAxisHandlers(registers) { callOnlyOnce$2(registers, function() { var axisStatKey = makeAxisStatKey(SERIES_TYPE_CANDLESTICK); requireAxisStatistics(registers, { key: axisStatKey, seriesType: SERIES_TYPE_CANDLESTICK, getMetrics: createMetricsNonOrdinalLinearPositiveMinGap }); registerAxisContainShapeHandler(axisStatKey, createBandWidthBasedAxisContainShapeHandler(axisStatKey)); }); } //#endregion //#region node_modules/echarts/lib/chart/candlestick/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$36(registers) { registers.registerChartView(CandlestickView); registers.registerSeriesModel(CandlestickSeriesModel); registers.registerPreprocessor(candlestickPreprocessor); registers.registerVisual(candlestickVisual); registers.registerLayout(candlestickLayout); registerCandlestickAxisHandlers(registers); } //#endregion //#region node_modules/echarts/lib/chart/helper/EffectSymbol.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function updateRipplePath(rippleGroup, effectCfg) { var color = effectCfg.rippleEffectColor || effectCfg.color; rippleGroup.eachChild(function(ripplePath) { ripplePath.attr({ z: effectCfg.z, zlevel: effectCfg.zlevel, style: { stroke: effectCfg.brushType === "stroke" ? color : null, fill: effectCfg.brushType === "fill" ? color : null } }); }); } var EffectSymbol = function(_super) { __extends(EffectSymbol, _super); function EffectSymbol(data, idx) { var _this = _super.call(this) || this; var symbol = new Symbol$1(data, idx); var rippleGroup = new Group$3(); _this.add(symbol); _this.add(rippleGroup); _this.updateData(data, idx); return _this; } EffectSymbol.prototype.stopEffectAnimation = function() { this.childAt(1).removeAll(); }; EffectSymbol.prototype.startEffectAnimation = function(effectCfg) { var symbolType = effectCfg.symbolType; var color = effectCfg.color; var rippleNumber = effectCfg.rippleNumber; var rippleGroup = this.childAt(1); for (var i = 0; i < rippleNumber; i++) { var ripplePath = createSymbol$1(symbolType, -1, -1, 2, 2, color); ripplePath.attr({ style: { strokeNoScale: true }, z2: 99, silent: true, scaleX: .5, scaleY: .5 }); var delay = -i / rippleNumber * effectCfg.period + effectCfg.effectOffset; ripplePath.animate("", true).when(effectCfg.period, { scaleX: effectCfg.rippleScale / 2, scaleY: effectCfg.rippleScale / 2 }).delay(delay).start(); ripplePath.animateStyle(true).when(effectCfg.period, { opacity: 0 }).delay(delay).start(); rippleGroup.add(ripplePath); } updateRipplePath(rippleGroup, effectCfg); }; /** * Update effect symbol */ EffectSymbol.prototype.updateEffectAnimation = function(effectCfg) { var oldEffectCfg = this._effectCfg; var rippleGroup = this.childAt(1); var DIFFICULT_PROPS = [ "symbolType", "period", "rippleScale", "rippleNumber" ]; for (var i = 0; i < DIFFICULT_PROPS.length; i++) { var propName = DIFFICULT_PROPS[i]; if (oldEffectCfg[propName] !== effectCfg[propName]) { this.stopEffectAnimation(); this.startEffectAnimation(effectCfg); return; } } updateRipplePath(rippleGroup, effectCfg); }; /** * Highlight symbol */ EffectSymbol.prototype.highlight = function() { enterEmphasis(this); }; /** * Downplay symbol */ EffectSymbol.prototype.downplay = function() { leaveEmphasis(this); }; EffectSymbol.prototype.getSymbolType = function() { var symbol = this.childAt(0); return symbol && symbol.getSymbolType(); }; /** * Update symbol properties */ EffectSymbol.prototype.updateData = function(data, idx) { var _this = this; var seriesModel = data.hostModel; this.childAt(0).updateData(data, idx); var rippleGroup = this.childAt(1); var itemModel = data.getItemModel(idx); var symbolType = data.getItemVisual(idx, "symbol"); var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, "symbolSize")); var symbolStyle = data.getItemVisual(idx, "style"); var color = symbolStyle && symbolStyle.fill; var emphasisModel = itemModel.getModel("emphasis"); rippleGroup.setScale(symbolSize); rippleGroup.traverse(function(ripplePath) { ripplePath.setStyle("fill", color); }); var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, "symbolOffset"), symbolSize); if (symbolOffset) { rippleGroup.x = symbolOffset[0]; rippleGroup.y = symbolOffset[1]; } rippleGroup.rotation = (data.getItemVisual(idx, "symbolRotate") || 0) * Math.PI / 180 || 0; var effectCfg = {}; effectCfg.showEffectOn = seriesModel.get("showEffectOn"); effectCfg.rippleScale = itemModel.get(["rippleEffect", "scale"]); effectCfg.brushType = itemModel.get(["rippleEffect", "brushType"]); effectCfg.period = itemModel.get(["rippleEffect", "period"]) * 1e3; effectCfg.effectOffset = idx / data.count(); effectCfg.z = seriesModel.getShallow("z") || 0; effectCfg.zlevel = seriesModel.getShallow("zlevel") || 0; effectCfg.symbolType = symbolType; effectCfg.color = color; effectCfg.rippleEffectColor = itemModel.get(["rippleEffect", "color"]); effectCfg.rippleNumber = itemModel.get(["rippleEffect", "number"]); if (effectCfg.showEffectOn === "render") { this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg); this._effectCfg = effectCfg; } else { this._effectCfg = null; this.stopEffectAnimation(); this.onHoverStateChange = function(toState) { if (toState === "emphasis") { if (effectCfg.showEffectOn !== "render") _this.startEffectAnimation(effectCfg); } else if (toState === "normal") { if (effectCfg.showEffectOn !== "render") _this.stopEffectAnimation(); } }; } this._effectCfg = effectCfg; toggleHoverEmphasis(this, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; EffectSymbol.prototype.fadeOut = function(cb) { cb && cb(); }; return EffectSymbol; }(Group$3); //#endregion //#region node_modules/echarts/lib/chart/effectScatter/EffectScatterView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var EffectScatterView = function(_super) { __extends(EffectScatterView, _super); function EffectScatterView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = EffectScatterView.type; return _this; } EffectScatterView.prototype.init = function() { this._symbolDraw = new SymbolDraw(EffectSymbol); }; EffectScatterView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var effectSymbolDraw = this._symbolDraw; effectSymbolDraw.updateData(data, createSymbolDrawOpt(seriesModel)); this.group.add(effectSymbolDraw.group); }; EffectScatterView.prototype.updateTransform = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); this.group.dirty(); var res = pointsLayout("").reset(seriesModel, ecModel, api); if (res.progress) res.progress({ start: 0, end: data.count(), count: data.count() }, data); this._symbolDraw.updateLayout(createSymbolDrawOpt(seriesModel)); }; EffectScatterView.prototype._updateGroupTransform = function(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.getRoamTransform) { this.group.transform = clone$2(coordSys.getRoamTransform()); this.group.decomposeTransform(); } }; EffectScatterView.prototype.remove = function(ecModel, api) { this._symbolDraw && this._symbolDraw.remove(true); }; EffectScatterView.type = "effectScatter"; return EffectScatterView; }(ChartView); function createSymbolDrawOpt(seriesModel) { return { clipShape: createCoordSysClipAreaSimply(seriesModel) }; } //#endregion //#region node_modules/echarts/lib/chart/effectScatter/EffectScatterSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var EffectScatterSeriesModel = function(_super) { __extends(EffectScatterSeriesModel, _super); function EffectScatterSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = EffectScatterSeriesModel.type; _this.hasSymbolVisual = true; return _this; } EffectScatterSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this, { useEncodeDefaulter: true }); }; EffectScatterSeriesModel.prototype.brushSelector = function(dataIndex, data, selectors) { return selectors.point(data.getItemLayout(dataIndex)); }; EffectScatterSeriesModel.type = "series.effectScatter"; EffectScatterSeriesModel.dependencies = ["grid", "polar"]; EffectScatterSeriesModel.defaultOption = { coordinateSystem: "cartesian2d", z: 2, legendHoverLink: true, effectType: "ripple", progressive: 0, showEffectOn: "render", clip: true, rippleEffect: { period: 4, scale: 2.5, brushType: "fill", number: 3 }, universalTransition: { divideShape: "clone" }, symbolSize: 10 }; return EffectScatterSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/effectScatter/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$35(registers) { registers.registerChartView(EffectScatterView); registers.registerSeriesModel(EffectScatterSeriesModel); registers.registerLayout(pointsLayout("effectScatter")); } //#endregion //#region node_modules/echarts/lib/chart/helper/EffectLine.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Provide effect for line */ var EffectLine = function(_super) { __extends(EffectLine, _super); function EffectLine(lineData, idx, seriesScope) { var _this = _super.call(this) || this; _this.add(_this.createLine(lineData, idx, seriesScope)); _this._updateEffectSymbol(lineData, idx); return _this; } EffectLine.prototype.createLine = function(lineData, idx, seriesScope) { return new Line(lineData, idx, seriesScope); }; EffectLine.prototype._updateEffectSymbol = function(lineData, idx) { var effectModel = lineData.getItemModel(idx).getModel("effect"); var size = effectModel.get("symbolSize"); var symbolType = effectModel.get("symbol"); if (!isArray$1(size)) size = [size, size]; var lineStyle = lineData.getItemVisual(idx, "style"); var color = effectModel.get("color") || lineStyle && lineStyle.stroke; var symbol = this.childAt(1); if (this._symbolType !== symbolType) { this.remove(symbol); symbol = createSymbol$1(symbolType, -.5, -.5, 1, 1, color); symbol.z2 = 100; symbol.culling = true; this.add(symbol); } if (!symbol) return; symbol.setStyle("shadowColor", color); symbol.setStyle(effectModel.getItemStyle(["color"])); symbol.scaleX = size[0]; symbol.scaleY = size[1]; symbol.setColor(color); this._symbolType = symbolType; this._symbolScale = size; this._updateEffectAnimation(lineData, effectModel, idx); }; EffectLine.prototype._updateEffectAnimation = function(lineData, effectModel, idx) { var symbol = this.childAt(1); if (!symbol) return; var points = lineData.getItemLayout(idx); var period = effectModel.get("period") * 1e3; var loop = effectModel.get("loop"); var roundTrip = effectModel.get("roundTrip"); var constantSpeed = effectModel.get("constantSpeed"); var delayExpr = retrieve(effectModel.get("delay"), function(idx) { return idx / lineData.count() * period / 3; }); symbol.ignore = true; this._updateAnimationPoints(symbol, points); if (constantSpeed > 0) period = this._getLineLength(symbol) / constantSpeed * 1e3; if (period !== this._period || loop !== this._loop || roundTrip !== this._roundTrip) { symbol.stopAnimation(); var delayNum = void 0; if (isFunction(delayExpr)) delayNum = delayExpr(idx); else delayNum = delayExpr; if (symbol.__t > 0) delayNum = -period * symbol.__t; this._animateSymbol(symbol, period, delayNum, loop, roundTrip); } this._period = period; this._loop = loop; this._roundTrip = roundTrip; }; EffectLine.prototype._animateSymbol = function(symbol, period, delayNum, loop, roundTrip) { if (period > 0) { symbol.__t = 0; var self_1 = this; var animator = symbol.animate("", loop).when(roundTrip ? period * 2 : period, { __t: roundTrip ? 2 : 1 }).delay(delayNum).during(function() { self_1._updateSymbolPosition(symbol); }); if (!loop) animator.done(function() { self_1.remove(symbol); }); animator.start(); } }; EffectLine.prototype._getLineLength = function(symbol) { return dist$1(symbol.__p1, symbol.__cp1) + dist$1(symbol.__cp1, symbol.__p2); }; EffectLine.prototype._updateAnimationPoints = function(symbol, points) { symbol.__p1 = points[0]; symbol.__p2 = points[1]; symbol.__cp1 = points[2] || [(points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2]; }; EffectLine.prototype.updateData = function(lineData, idx, seriesScope) { this.childAt(0).updateData(lineData, idx, seriesScope); this._updateEffectSymbol(lineData, idx); }; EffectLine.prototype._updateSymbolPosition = function(symbol) { var p1 = symbol.__p1; var p2 = symbol.__p2; var cp1 = symbol.__cp1; var t = symbol.__t <= 1 ? symbol.__t : 2 - symbol.__t; var pos = [symbol.x, symbol.y]; var lastPos = pos.slice(); var quadraticAt = quadraticAt$1; var quadraticDerivativeAt$1 = quadraticDerivativeAt; pos[0] = quadraticAt(p1[0], cp1[0], p2[0], t); pos[1] = quadraticAt(p1[1], cp1[1], p2[1], t); var tx = symbol.__t <= 1 ? quadraticDerivativeAt$1(p1[0], cp1[0], p2[0], t) : quadraticDerivativeAt$1(p2[0], cp1[0], p1[0], 1 - t); var ty = symbol.__t <= 1 ? quadraticDerivativeAt$1(p1[1], cp1[1], p2[1], t) : quadraticDerivativeAt$1(p2[1], cp1[1], p1[1], 1 - t); symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; if (this._symbolType === "line" || this._symbolType === "rect" || this._symbolType === "roundRect") { if (symbol.__lastT !== void 0 && symbol.__lastT < symbol.__t) { symbol.scaleY = dist$1(lastPos, pos) * 1.05; if (t === 1) { pos[0] = lastPos[0] + (pos[0] - lastPos[0]) / 2; pos[1] = lastPos[1] + (pos[1] - lastPos[1]) / 2; } } else if (symbol.__lastT === 1) symbol.scaleY = 2 * dist$1(p1, pos); else symbol.scaleY = this._symbolScale[1]; } symbol.__lastT = symbol.__t; symbol.ignore = false; symbol.x = pos[0]; symbol.y = pos[1]; }; EffectLine.prototype.updateLayout = function(lineData, idx) { this.childAt(0).updateLayout(lineData, idx); var effectModel = lineData.getItemModel(idx).getModel("effect"); this._updateEffectAnimation(lineData, effectModel, idx); }; return EffectLine; }(Group$3); //#endregion //#region node_modules/echarts/lib/chart/helper/Polyline.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Polyline = function(_super) { __extends(Polyline, _super); function Polyline(lineData, idx, seriesScope) { var _this = _super.call(this) || this; _this._createPolyline(lineData, idx, seriesScope); return _this; } Polyline.prototype._createPolyline = function(lineData, idx, seriesScope) { var line = new Polyline$1({ shape: { points: lineData.getItemLayout(idx) } }); this.add(line); this._updateCommonStl(lineData, idx, seriesScope); }; Polyline.prototype.updateData = function(lineData, idx, seriesScope) { var seriesModel = lineData.hostModel; updateProps$1(this.childAt(0), { shape: { points: lineData.getItemLayout(idx) } }, seriesModel, idx); this._updateCommonStl(lineData, idx, seriesScope); }; Polyline.prototype._updateCommonStl = function(lineData, idx, seriesScope) { var line = this.childAt(0); var itemModel = lineData.getItemModel(idx); var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle; var focus = seriesScope && seriesScope.focus; var blurScope = seriesScope && seriesScope.blurScope; var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled; if (!seriesScope || lineData.hasItemOption) { var emphasisModel = itemModel.getModel("emphasis"); emphasisLineStyle = emphasisModel.getModel("lineStyle").getLineStyle(); emphasisDisabled = emphasisModel.get("disabled"); focus = emphasisModel.get("focus"); blurScope = emphasisModel.get("blurScope"); } line.useStyle(lineData.getItemVisual(idx, "style")); line.style.fill = null; line.style.strokeNoScale = true; var lineEmphasisState = line.ensureState("emphasis"); lineEmphasisState.style = emphasisLineStyle; toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled); }; Polyline.prototype.updateLayout = function(lineData, idx) { var polyline = this.childAt(0); polyline.stopAnimation(); polyline.setShape("points", lineData.getItemLayout(idx)); }; return Polyline; }(Group$3); //#endregion //#region node_modules/echarts/lib/chart/helper/EffectPolyline.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var EffectPolyline = function(_super) { __extends(EffectPolyline, _super); function EffectPolyline() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._lastFrame = 0; _this._lastFramePercent = 0; return _this; } EffectPolyline.prototype.createLine = function(lineData, idx, seriesScope) { return new Polyline(lineData, idx, seriesScope); }; EffectPolyline.prototype._updateAnimationPoints = function(symbol, points) { this._points = points; var accLenArr = [0]; var len = 0; for (var i = 1; i < points.length; i++) { var p1 = points[i - 1]; var p2 = points[i]; len += dist$1(p1, p2); accLenArr.push(len); } if (len === 0) { this._length = 0; return; } for (var i = 0; i < accLenArr.length; i++) accLenArr[i] /= len; this._offsets = accLenArr; this._length = len; }; EffectPolyline.prototype._getLineLength = function() { return this._length; }; EffectPolyline.prototype._updateSymbolPosition = function(symbol) { var t = symbol.__t <= 1 ? symbol.__t : 2 - symbol.__t; var points = this._points; var offsets = this._offsets; var len = points.length; if (!offsets) return; var lastFrame = this._lastFrame; var frame; if (t < this._lastFramePercent) { for (frame = Math.min(lastFrame + 1, len - 1); frame >= 0; frame--) if (offsets[frame] <= t) break; frame = Math.min(frame, len - 2); } else { for (frame = lastFrame; frame < len; frame++) if (offsets[frame] > t) break; frame = Math.min(frame - 1, len - 2); } var p = (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]); var p0 = points[frame]; var p1 = points[frame + 1]; symbol.x = p0[0] * (1 - p) + p * p1[0]; symbol.y = p0[1] * (1 - p) + p * p1[1]; var tx = symbol.__t <= 1 ? p1[0] - p0[0] : p0[0] - p1[0]; var ty = symbol.__t <= 1 ? p1[1] - p0[1] : p0[1] - p1[1]; symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; this._lastFrame = frame; this._lastFramePercent = t; symbol.ignore = false; }; return EffectPolyline; }(EffectLine); //#endregion //#region node_modules/echarts/lib/chart/helper/LargeLineDraw.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LargeLinesPathShape = function() { function LargeLinesPathShape() { this.polyline = false; this.curveness = 0; this.segs = []; } return LargeLinesPathShape; }(); var LargeLinesPath = function(_super) { __extends(LargeLinesPath, _super); function LargeLinesPath(opts) { var _this = _super.call(this, opts) || this; _this._off = 0; _this.hoverDataIdx = -1; return _this; } LargeLinesPath.prototype.reset = function() { this.notClear = false; this._off = 0; }; LargeLinesPath.prototype.beforeBrush = function(param) { if (param && !param.contentRetained) this.reset(); }; LargeLinesPath.prototype.getDefaultStyle = function() { return { stroke: tokens.color.neutral99, fill: null }; }; LargeLinesPath.prototype.getDefaultShape = function() { return new LargeLinesPathShape(); }; LargeLinesPath.prototype.buildPath = function(ctx, shape) { var segs = shape.segs; var curveness = shape.curveness; var i; if (shape.polyline) for (i = this._off; i < segs.length;) { var count = segs[i++]; if (count > 0) { ctx.moveTo(segs[i++], segs[i++]); for (var k = 1; k < count; k++) ctx.lineTo(segs[i++], segs[i++]); } } else for (i = this._off; i < segs.length;) { var x0 = segs[i++]; var y0 = segs[i++]; var x1 = segs[i++]; var y1 = segs[i++]; ctx.moveTo(x0, y0); if (curveness > 0) { var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness; var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness; ctx.quadraticCurveTo(x2, y2, x1, y1); } else ctx.lineTo(x1, y1); } if (this.incremental) { this._off = i; this.notClear = true; } }; LargeLinesPath.prototype.findDataIndex = function(x, y) { var shape = this.shape; var segs = shape.segs; var curveness = shape.curveness; var lineWidth = this.style.lineWidth; if (shape.polyline) { var dataIndex = 0; for (var i = 0; i < segs.length;) { var count = segs[i++]; if (count > 0) { var x0 = segs[i++]; var y0 = segs[i++]; for (var k = 1; k < count; k++) { var x1 = segs[i++]; var y1 = segs[i++]; if (containStroke$4(x0, y0, x1, y1, lineWidth, x, y)) return dataIndex; } } dataIndex++; } } else { var dataIndex = 0; for (var i = 0; i < segs.length;) { var x0 = segs[i++]; var y0 = segs[i++]; var x1 = segs[i++]; var y1 = segs[i++]; if (curveness > 0) { if (containStroke$2(x0, y0, (x0 + x1) / 2 - (y0 - y1) * curveness, (y0 + y1) / 2 - (x1 - x0) * curveness, x1, y1, lineWidth, x, y)) return dataIndex; } else if (containStroke$4(x0, y0, x1, y1, lineWidth, x, y)) return dataIndex; dataIndex++; } } return -1; }; LargeLinesPath.prototype.contain = function(x, y) { var localPos = this.transformCoordToLocal(x, y); var rect = this.getBoundingRect(); x = localPos[0]; y = localPos[1]; if (rect.contain(x, y)) return (this.hoverDataIdx = this.findDataIndex(x, y)) >= 0; this.hoverDataIdx = -1; return false; }; LargeLinesPath.prototype.getBoundingRect = function() { var rect = this._rect; if (!rect) { var points = this.shape.segs; var minX = Infinity; var minY = Infinity; var maxX = -Infinity; var maxY = -Infinity; for (var i = 0; i < points.length;) { var x = points[i++]; var y = points[i++]; minX = Math.min(x, minX); maxX = Math.max(x, maxX); minY = Math.min(y, minY); maxY = Math.max(y, maxY); } rect = this._rect = new BoundingRect(minX, minY, maxX, maxY); } return rect; }; return LargeLinesPath; }(Path); var LargeLineDraw = function() { function LargeLineDraw() { this.group = new Group$3(); } /** * Update symbols draw by new data */ LargeLineDraw.prototype.updateData = function(data) { this._clear(); var lineEl = this._create(); lineEl.setShape({ segs: data.getLayout("linesPoints") }); this._setCommon(lineEl, data); }; LargeLineDraw.prototype.incrementalPrepareUpdate = function(data) { this.group.removeAll(); this._clear(); }; LargeLineDraw.prototype.incrementalUpdate = function(taskParams, data, incrementalId) { var lastAdded = this._newAdded[0]; var linePoints = data.getLayout("linesPoints"); var oldSegs = lastAdded && lastAdded.shape.segs; if (oldSegs && oldSegs.length < 2e4) { var oldLen = oldSegs.length; var newSegs = new Float32Array(oldLen + linePoints.length); newSegs.set(oldSegs); newSegs.set(linePoints, oldLen); lastAdded.setShape({ segs: newSegs }); } else { this._newAdded = []; var lineEl = this._create(); lineEl.incremental = incrementalId; lineEl.setShape({ segs: linePoints }); this._setCommon(lineEl, data); lineEl.__startIndex = taskParams.start; } }; /** * @override */ LargeLineDraw.prototype.remove = function() { this._clear(); }; LargeLineDraw.prototype.eachRendered = function(cb) { this._newAdded[0] && cb(this._newAdded[0]); }; LargeLineDraw.prototype._create = function() { var lineEl = new LargeLinesPath({ cursor: "default", ignoreCoarsePointer: true }); this._newAdded.push(lineEl); this.group.add(lineEl); return lineEl; }; LargeLineDraw.prototype._setCommon = function(lineEl, data, isIncremental) { var hostModel = data.hostModel; lineEl.setShape({ polyline: hostModel.get("polyline"), curveness: hostModel.get(["lineStyle", "curveness"]) }); lineEl.useStyle(hostModel.getModel("lineStyle").getLineStyle()); lineEl.style.strokeNoScale = true; var style = data.getVisual("style"); if (style && style.stroke) lineEl.setStyle("stroke", style.stroke); lineEl.setStyle("fill", null); var ecData = getECData(lineEl); ecData.seriesIndex = hostModel.seriesIndex; lineEl.on("mousemove", function(e) { ecData.dataIndex = null; var dataIndex = lineEl.hoverDataIdx; if (dataIndex > 0) ecData.dataIndex = dataIndex + lineEl.__startIndex; }); }; LargeLineDraw.prototype._clear = function() { this._newAdded = []; this.group.removeAll(); }; return LargeLineDraw; }(); //#endregion //#region node_modules/echarts/lib/chart/lines/linesLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var linesLayout = { seriesType: "lines", plan: createRenderPlanner(), reset: function(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (!coordSys) { error("The lines series must have a coordinate system."); return; } var isPolyline = seriesModel.get("polyline"); var isLarge = seriesModel.pipelineContext.large; return { progress: function(params, lineData) { var lineCoords = []; if (isLarge) { var points = void 0; var segCount = params.end - params.start; if (isPolyline) { var totalCoordsCount = 0; for (var i = params.start; i < params.end; i++) totalCoordsCount += seriesModel.getLineCoordsCount(i); points = new Float32Array(segCount + totalCoordsCount * 2); } else points = new Float32Array(segCount * 4); var offset = 0; var pt = []; for (var i = params.start; i < params.end; i++) { var len = seriesModel.getLineCoords(i, lineCoords); if (isPolyline) points[offset++] = len; for (var k = 0; k < len; k++) { pt = coordSys.dataToPoint(lineCoords[k], false, pt); points[offset++] = pt[0]; points[offset++] = pt[1]; } } lineData.setLayout("linesPoints", points); } else for (var i = params.start; i < params.end; i++) { var itemModel = lineData.getItemModel(i); var len = seriesModel.getLineCoords(i, lineCoords); var pts = []; if (isPolyline) for (var j = 0; j < len; j++) pts.push(coordSys.dataToPoint(lineCoords[j])); else { pts[0] = coordSys.dataToPoint(lineCoords[0]); pts[1] = coordSys.dataToPoint(lineCoords[1]); var curveness = itemModel.get(["lineStyle", "curveness"]); if (+curveness) pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness]; } lineData.setItemLayout(i, pts); } } }; } }; //#endregion //#region node_modules/echarts/lib/chart/lines/LinesView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LinesView = function(_super) { __extends(LinesView, _super); function LinesView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = LinesView.type; return _this; } LinesView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var lineDraw = this._updateLineDraw(data, seriesModel); var zlevel = seriesModel.get("zlevel"); var trailLength = seriesModel.get(["effect", "trailLength"]); var zr = api.getZr(); var isCanvas = !!getCurrentCanvasPainter(api); if (isCanvas) zr.painter.getLayer(zlevel).clear(true); if (this._lastZlevel != null && isCanvas) zr.configLayer(this._lastZlevel, { motionBlur: false }); if (this._showEffect(seriesModel) && trailLength > 0) { if (isCanvas) zr.configLayer(zlevel, { motionBlur: true, lastFrameAlpha: Math.max(Math.min(trailLength / 10 + .9, 1), 0) }); else console.warn("SVG render mode doesn't support lines with trail effect"); } lineDraw.updateData(data); var clipPath = seriesModel.get("clip", true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel); if (clipPath) this.group.setClipPath(clipPath); else this.group.removeClipPath(); this._lastZlevel = zlevel; this._finished = true; }; LinesView.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); this._updateLineDraw(data, seriesModel).incrementalPrepareUpdate(data); this._clearLayer(api); this._finished = false; }; LinesView.prototype.incrementalRender = function(taskParams, seriesModel, ecModel) { this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData(), getIncrementalId(seriesModel)); this._finished = taskParams.end === seriesModel.getData().count(); }; LinesView.prototype.eachRendered = function(cb) { this._lineDraw && this._lineDraw.eachRendered(cb); }; LinesView.prototype.updateTransform = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var lineDraw = this._lineDraw; if (!this._finished || !lineDraw || !lineDraw.updateLayout) return { update: true }; else { var res = linesLayout.reset(seriesModel, ecModel, api); if (res.progress) res.progress({ start: 0, end: data.count(), count: data.count() }, data); lineDraw.updateLayout(); this._clearLayer(api); } }; LinesView.prototype._updateLineDraw = function(data, seriesModel) { var lineDraw = this._lineDraw; var hasEffect = this._showEffect(seriesModel); var isPolyline = !!seriesModel.get("polyline"); var isLargeDraw = seriesModel.pipelineContext.large; if (hasEffect && isLargeDraw) console.warn("Large lines not support effect"); if (!lineDraw || hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLargeDraw !== this._isLargeDraw) { if (lineDraw) lineDraw.remove(); lineDraw = this._lineDraw = isLargeDraw ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line); this._hasEffet = hasEffect; this._isPolyline = isPolyline; this._isLargeDraw = isLargeDraw; } this.group.add(lineDraw.group); return lineDraw; }; LinesView.prototype._showEffect = function(seriesModel) { return !!seriesModel.get(["effect", "show"]); }; LinesView.prototype._clearLayer = function(api) { var painter = getCurrentCanvasPainter(api); if (painter && this._lastZlevel != null) painter.getLayer(this._lastZlevel).clear(true); }; LinesView.prototype.remove = function(ecModel, api) { this._lineDraw && this._lineDraw.remove(); this._lineDraw = null; this._clearLayer(api); }; LinesView.prototype.dispose = function(ecModel, api) { this.remove(ecModel, api); }; LinesView.type = "lines"; return LinesView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/lines/LinesSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Uint32Arr = typeof Uint32Array === "undefined" ? Array : Uint32Array; var Float64Arr = typeof Float64Array === "undefined" ? Array : Float64Array; function compatEc2(seriesOpt) { var data = seriesOpt.data; if (data && data[0] && data[0][0] && data[0][0].coord) { console.warn("Lines data configuration has been changed to { coords:[[1,2],[2,3]] }"); seriesOpt.data = map$1(data, function(itemOpt) { var target = { coords: [itemOpt[0].coord, itemOpt[1].coord] }; if (itemOpt[0].name) target.fromName = itemOpt[0].name; if (itemOpt[1].name) target.toName = itemOpt[1].name; return mergeAll([ target, itemOpt[0], itemOpt[1] ]); }); } } var LinesSeriesModel = function(_super) { __extends(LinesSeriesModel, _super); function LinesSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = LinesSeriesModel.type; _this.visualStyleAccessPath = "lineStyle"; _this.visualDrawType = "stroke"; return _this; } LinesSeriesModel.prototype.init = function(option) { option.data = option.data || []; compatEc2(option); var result = this._processFlatCoordsArray(option.data); this._flatCoords = result.flatCoords; this._flatCoordsOffset = result.flatCoordsOffset; if (result.flatCoords) option.data = new Float32Array(result.count); _super.prototype.init.apply(this, arguments); }; LinesSeriesModel.prototype.mergeOption = function(option) { compatEc2(option); if (option.data) { var result = this._processFlatCoordsArray(option.data); this._flatCoords = result.flatCoords; this._flatCoordsOffset = result.flatCoordsOffset; if (result.flatCoords) option.data = new Float32Array(result.count); } _super.prototype.mergeOption.apply(this, arguments); }; LinesSeriesModel.prototype.appendData = function(params) { var result = this._processFlatCoordsArray(params.data); if (result.flatCoords) { if (!this._flatCoords) { this._flatCoords = result.flatCoords; this._flatCoordsOffset = result.flatCoordsOffset; } else { this._flatCoords = concatArray(this._flatCoords, result.flatCoords); this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset); } params.data = new Float32Array(result.count); } this.getRawData().appendData(params.data); }; LinesSeriesModel.prototype._getCoordsFromItemModel = function(idx) { var itemModel = this.getData().getItemModel(idx); var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.getShallow("coords"); if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) throw new Error("Invalid coords " + JSON.stringify(coords) + ". Lines must have 2d coords array in data item."); return coords; }; LinesSeriesModel.prototype.getLineCoordsCount = function(idx) { if (this._flatCoordsOffset) return this._flatCoordsOffset[idx * 2 + 1]; else return this._getCoordsFromItemModel(idx).length; }; LinesSeriesModel.prototype.getLineCoords = function(idx, out) { if (this._flatCoordsOffset) { var offset = this._flatCoordsOffset[idx * 2]; var len = this._flatCoordsOffset[idx * 2 + 1]; for (var i = 0; i < len; i++) { out[i] = out[i] || []; out[i][0] = this._flatCoords[offset + i * 2]; out[i][1] = this._flatCoords[offset + i * 2 + 1]; } return len; } else { var coords = this._getCoordsFromItemModel(idx); for (var i = 0; i < coords.length; i++) { out[i] = out[i] || []; out[i][0] = coords[i][0]; out[i][1] = coords[i][1]; } return coords.length; } }; LinesSeriesModel.prototype._processFlatCoordsArray = function(data) { var startOffset = 0; if (this._flatCoords) startOffset = this._flatCoords.length; if (isNumber(data[0])) { var len = data.length; var coordsOffsetAndLenStorage = new Uint32Arr(len); var coordsStorage = new Float64Arr(len); var coordsCursor = 0; var offsetCursor = 0; var dataCount = 0; for (var i = 0; i < len;) { dataCount++; var count = data[i++]; coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset; coordsOffsetAndLenStorage[offsetCursor++] = count; for (var k = 0; k < count; k++) { var x = data[i++]; var y = data[i++]; coordsStorage[coordsCursor++] = x; coordsStorage[coordsCursor++] = y; if (i > len) throw new Error("Invalid data format."); } } return { flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor), flatCoords: coordsStorage, count: dataCount }; } return { flatCoordsOffset: null, flatCoords: null, count: data.length }; }; LinesSeriesModel.prototype.getInitialData = function(option, ecModel) { if (!CoordinateSystemManager.get(option.coordinateSystem)) throw new Error("Unknown coordinate system " + option.coordinateSystem); var lineData = new SeriesData(["value"], this); lineData.hasItemOption = false; lineData.initData(option.data, [], function(dataItem, dimName, dataIndex, dimIndex) { if (dataItem instanceof Array) return NaN; else { lineData.hasItemOption = true; var value = dataItem.value; if (value != null) return value instanceof Array ? value[dimIndex] : value; } }); return lineData; }; LinesSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); var value = this.getRawValue(dataIndex); var itemModel = data.getItemModel(dataIndex); var itemName = itemModel.get("name"); if (!itemName) { var fromName = itemModel.get("fromName"); var toName = itemModel.get("toName"); var nameArr = []; fromName != null && nameArr.push(fromName); toName != null && nameArr.push(toName); itemName = nameArr.join(" > "); } return createTooltipMarkup("nameValue", { name: itemName, value, noValue: value == null || isNaN(value) }); }; LinesSeriesModel.prototype.preventIncremental = function() { return !!this.get(["effect", "show"]); }; LinesSeriesModel.prototype.getProgressive = function() { var progressive = this.option.progressive; if (progressive == null) return this.option.large ? 1e4 : this.get("progressive"); return progressive; }; LinesSeriesModel.prototype.getProgressiveThreshold = function() { var progressiveThreshold = this.option.progressiveThreshold; if (progressiveThreshold == null) return this.option.large ? 2e4 : this.get("progressiveThreshold"); return progressiveThreshold; }; LinesSeriesModel.prototype.getZLevelKey = function() { var effectModel = this.getModel("effect"); var trailLength = effectModel.get("trailLength"); return this.getData().count() > this.getProgressiveThreshold() ? this.id : effectModel.get("show") && trailLength > 0 ? trailLength + "" : ""; }; LinesSeriesModel.type = "series.lines"; LinesSeriesModel.dependencies = [ "grid", "polar", "geo", "calendar" ]; LinesSeriesModel.defaultOption = { coordinateSystem: "geo", z: 2, legendHoverLink: true, xAxisIndex: 0, yAxisIndex: 0, symbol: ["none", "none"], symbolSize: [10, 10], geoIndex: 0, effect: { show: false, period: 4, constantSpeed: 0, symbol: "circle", symbolSize: 3, loop: true, trailLength: .2 }, large: false, largeThreshold: 2e3, polyline: false, clip: true, label: { show: false, position: "end" }, lineStyle: { opacity: .5 } }; return LinesSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/lines/linesVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function normalize(a) { if (!(a instanceof Array)) a = [a, a]; return a; } var linesVisual = { seriesType: "lines", reset: function(seriesModel) { var symbolType = normalize(seriesModel.get("symbol")); var symbolSize = normalize(seriesModel.get("symbolSize")); var data = seriesModel.getData(); data.setVisual("fromSymbol", symbolType && symbolType[0]); data.setVisual("toSymbol", symbolType && symbolType[1]); data.setVisual("fromSymbolSize", symbolSize && symbolSize[0]); data.setVisual("toSymbolSize", symbolSize && symbolSize[1]); function dataEach(data, idx) { var itemModel = data.getItemModel(idx); var symbolType = normalize(itemModel.getShallow("symbol", true)); var symbolSize = normalize(itemModel.getShallow("symbolSize", true)); symbolType[0] && data.setItemVisual(idx, "fromSymbol", symbolType[0]); symbolType[1] && data.setItemVisual(idx, "toSymbol", symbolType[1]); symbolSize[0] && data.setItemVisual(idx, "fromSymbolSize", symbolSize[0]); symbolSize[1] && data.setItemVisual(idx, "toSymbolSize", symbolSize[1]); } return { dataEach: data.hasItemOption ? dataEach : null }; } }; //#endregion //#region node_modules/echarts/lib/chart/lines/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$34(registers) { registers.registerChartView(LinesView); registers.registerSeriesModel(LinesSeriesModel); registers.registerLayout(linesLayout); registers.registerVisual(linesVisual); } //#endregion //#region node_modules/echarts/lib/chart/heatmap/HeatmapLayer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var GRADIENT_LEVELS = 256; var HeatmapLayer = function() { function HeatmapLayer() { this.blurSize = 30; this.pointSize = 20; this.maxOpacity = 1; this.minOpacity = 0; this._gradientPixels = { inRange: null, outOfRange: null }; var canvas = platformApi.createCanvas(); this.canvas = canvas; } /** * Renders Heatmap and returns the rendered canvas * @param data array of data, each has x, y, value * @param width canvas width * @param height canvas height */ HeatmapLayer.prototype.update = function(data, width, height, normalize, colorFunc, isInRange) { var brush = this._getBrush(); var gradientInRange = this._getGradient(colorFunc, "inRange"); var gradientOutOfRange = this._getGradient(colorFunc, "outOfRange"); var r = this.pointSize + this.blurSize; var canvas = this.canvas; var ctx = canvas.getContext("2d"); var len = data.length; canvas.width = width; canvas.height = height; for (var i = 0; i < len; ++i) { var p = data[i]; var x = p[0]; var y = p[1]; var value = p[2]; var alpha = normalize(value); ctx.globalAlpha = alpha; ctx.drawImage(brush, x - r, y - r); } if (!canvas.width || !canvas.height) return canvas; var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); var pixels = imageData.data; var offset = 0; var pixelLen = pixels.length; var minOpacity = this.minOpacity; var diffOpacity = this.maxOpacity - minOpacity; while (offset < pixelLen) { var alpha = pixels[offset + 3] / 256; var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4; if (alpha > 0) { var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; alpha > 0 && (alpha = alpha * diffOpacity + minOpacity); pixels[offset++] = gradient[gradientOffset]; pixels[offset++] = gradient[gradientOffset + 1]; pixels[offset++] = gradient[gradientOffset + 2]; pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256; } else offset += 4; } ctx.putImageData(imageData, 0, 0); return canvas; }; /** * get canvas of a black circle brush used for canvas to draw later */ HeatmapLayer.prototype._getBrush = function() { var brushCanvas = this._brushCanvas || (this._brushCanvas = platformApi.createCanvas()); var r = this.pointSize + this.blurSize; var d = r * 2; brushCanvas.width = d; brushCanvas.height = d; var ctx = brushCanvas.getContext("2d"); ctx.clearRect(0, 0, d, d); ctx.shadowOffsetX = d; ctx.shadowBlur = this.blurSize; ctx.shadowColor = tokens.color.neutral99; ctx.beginPath(); ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true); ctx.closePath(); ctx.fill(); return brushCanvas; }; /** * get gradient color map * @private */ HeatmapLayer.prototype._getGradient = function(colorFunc, state) { var gradientPixels = this._gradientPixels; var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = /* @__PURE__ */ new Uint8ClampedArray(1024)); var color = [ 0, 0, 0, 0 ]; var off = 0; for (var i = 0; i < 256; i++) { colorFunc[state](i / 255, true, color); pixelsSingleState[off++] = color[0]; pixelsSingleState[off++] = color[1]; pixelsSingleState[off++] = color[2]; pixelsSingleState[off++] = color[3]; } return pixelsSingleState; }; return HeatmapLayer; }(); //#endregion //#region node_modules/echarts/lib/chart/heatmap/HeatmapView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function getIsInPiecewiseRange(dataExtent, pieceList, selected) { var dataSpan = dataExtent[1] - dataExtent[0]; pieceList = map$1(pieceList, function(piece) { return { interval: [(piece.interval[0] - dataExtent[0]) / dataSpan, (piece.interval[1] - dataExtent[0]) / dataSpan] }; }); var len = pieceList.length; var lastIndex = 0; return function(val) { var i; for (i = lastIndex; i < len; i++) { var interval = pieceList[i].interval; if (interval[0] <= val && val <= interval[1]) { lastIndex = i; break; } } if (i === len) for (i = lastIndex - 1; i >= 0; i--) { var interval = pieceList[i].interval; if (interval[0] <= val && val <= interval[1]) { lastIndex = i; break; } } return i >= 0 && i < len && selected[i]; }; } function getIsInContinuousRange(dataExtent, range) { var dataSpan = dataExtent[1] - dataExtent[0]; range = [(range[0] - dataExtent[0]) / dataSpan, (range[1] - dataExtent[0]) / dataSpan]; return function(val) { return val >= range[0] && val <= range[1]; }; } var HeatmapView = function(_super) { __extends(HeatmapView, _super); function HeatmapView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = HeatmapView.type; return _this; } HeatmapView.prototype.render = function(seriesModel, ecModel, api) { var visualMapOfThisSeries; ecModel.eachComponent("visualMap", function(visualMap) { visualMap.eachTargetSeries(function(targetSeries) { if (targetSeries === seriesModel) visualMapOfThisSeries = visualMap; }); }); if (!visualMapOfThisSeries) throw new Error("Heatmap must use with visualMap"); this._progressiveEls = null; this.group.removeAll(); var coordSys = seriesModel.coordinateSystem; if (coordSys.type === "cartesian2d" || coordSys.type === "calendar" || coordSys.type === "matrix") this._renderOnGridLike(seriesModel, api, 0, seriesModel.getData().count()); else if (isGeoLikeCoordSys(coordSys)) this._renderOnGeo(coordSys, seriesModel, visualMapOfThisSeries, api); }; HeatmapView.prototype.incrementalPrepareRender = function(seriesModel, ecModel, api) { this.group.removeAll(); }; HeatmapView.prototype.incrementalRender = function(params, seriesModel, ecModel, api) { var coordSys = seriesModel.coordinateSystem; if (coordSys) { if (isGeoLikeCoordSys(coordSys)) this.render(seriesModel, ecModel, api); else { this._progressiveEls = []; this._renderOnGridLike(seriesModel, api, params.start, params.end, true); } } }; HeatmapView.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; HeatmapView.prototype._renderOnGridLike = function(seriesModel, api, start, end, useIncremental) { var coordSys = seriesModel.coordinateSystem; var isCartesian2d = isCoordinateSystemType(coordSys, "cartesian2d"); var isMatrix = isCoordinateSystemType(coordSys, "matrix"); var width; var height; var xAxisExtent; var yAxisExtent; if (isCartesian2d) { var xAxis = coordSys.getAxis("x"); var yAxis = coordSys.getAxis("y"); if (!(xAxis.type === "category" && yAxis.type === "category")) throw new Error("Heatmap on cartesian must have two category axes"); if (!(xAxis.onBand && yAxis.onBand)) throw new Error("Heatmap on cartesian must have two axes with boundaryGap true"); width = calcBandWidth(xAxis).w + .5; height = calcBandWidth(yAxis).w + .5; xAxisExtent = xAxis.scale.getExtent(); yAxisExtent = yAxis.scale.getExtent(); } var group = this.group; var data = seriesModel.getData(); var emphasisStyle = seriesModel.getModel(["emphasis", "itemStyle"]).getItemStyle(); var blurStyle = seriesModel.getModel(["blur", "itemStyle"]).getItemStyle(); var selectStyle = seriesModel.getModel(["select", "itemStyle"]).getItemStyle(); var borderRadius = seriesModel.get(["itemStyle", "borderRadius"]); var labelStatesModels = getLabelStatesModels(seriesModel); var emphasisModel = seriesModel.getModel("emphasis"); var focus = emphasisModel.get("focus"); var blurScope = emphasisModel.get("blurScope"); var emphasisDisabled = emphasisModel.get("disabled"); var dataDims = isCartesian2d || isMatrix ? [ data.mapDimension("x"), data.mapDimension("y"), data.mapDimension("value") ] : [data.mapDimension("time"), data.mapDimension("value")]; for (var idx = start; idx < end; idx++) { var rect = void 0; var style = data.getItemVisual(idx, "style"); if (isCartesian2d) { var dataDimX = data.get(dataDims[0], idx); var dataDimY = data.get(dataDims[1], idx); if (isNaN(data.get(dataDims[2], idx)) || isNaN(dataDimX) || isNaN(dataDimY) || dataDimX < xAxisExtent[0] || dataDimX > xAxisExtent[1] || dataDimY < yAxisExtent[0] || dataDimY > yAxisExtent[1]) continue; var point = coordSys.dataToPoint([dataDimX, dataDimY]); rect = new Rect$2({ shape: { x: point[0] - width / 2, y: point[1] - height / 2, width, height }, style }); } else if (isMatrix) { var shape = coordSys.dataToLayout([data.get(dataDims[0], idx), data.get(dataDims[1], idx)]).rect; if (eqNaN(shape.x)) continue; rect = new Rect$2({ z2: 1, shape, style }); } else { if (isNaN(data.get(dataDims[1], idx))) continue; var layout = coordSys.dataToLayout([data.get(dataDims[0], idx)]); var shape = layout.contentRect || layout.rect; if (eqNaN(shape.x) || eqNaN(shape.y)) continue; rect = new Rect$2({ z2: 1, shape, style }); } if (data.hasItemOption) { var itemModel = data.getItemModel(idx); var emphasisModel_1 = itemModel.getModel("emphasis"); emphasisStyle = emphasisModel_1.getModel("itemStyle").getItemStyle(); blurStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle(); selectStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle(); borderRadius = itemModel.get(["itemStyle", "borderRadius"]); focus = emphasisModel_1.get("focus"); blurScope = emphasisModel_1.get("blurScope"); emphasisDisabled = emphasisModel_1.get("disabled"); labelStatesModels = getLabelStatesModels(itemModel); } rect.shape.r = borderRadius; var rawValue = seriesModel.getRawValue(idx); var defaultText = "-"; if (rawValue && rawValue[2] != null) defaultText = rawValue[2] + ""; setLabelStyle(rect, labelStatesModels, { labelFetcher: seriesModel, labelDataIndex: idx, defaultOpacity: style.opacity, defaultText }); rect.ensureState("emphasis").style = emphasisStyle; rect.ensureState("blur").style = blurStyle; rect.ensureState("select").style = selectStyle; toggleHoverEmphasis(rect, focus, blurScope, emphasisDisabled); rect.incremental = getIncrementalId(seriesModel, useIncremental); if (useIncremental) rect.states.emphasis.hoverLayer = 2; group.add(rect); data.setItemGraphicEl(idx, rect); if (this._progressiveEls) this._progressiveEls.push(rect); } }; HeatmapView.prototype._renderOnGeo = function(geo, seriesModel, visualMapModel, api) { var inRangeVisuals = visualMapModel.targetVisuals.inRange; var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; var data = seriesModel.getData(); var hmLayer = this._hmLayer || this._hmLayer || new HeatmapLayer(); hmLayer.blurSize = seriesModel.get("blurSize"); hmLayer.pointSize = seriesModel.get("pointSize"); hmLayer.minOpacity = seriesModel.get("minOpacity"); hmLayer.maxOpacity = seriesModel.get("maxOpacity"); var rect = geo.getViewRect().clone(); var roamTransform = geo.getRoamTransform(); rect.applyTransform(roamTransform); var x = Math.max(rect.x, 0); var y = Math.max(rect.y, 0); var x2 = Math.min(rect.width + rect.x, api.getWidth()); var y2 = Math.min(rect.height + rect.y, api.getHeight()); var width = x2 - x; var height = y2 - y; var dims = [ data.mapDimension("lng"), data.mapDimension("lat"), data.mapDimension("value") ]; var points = data.mapArray(dims, function(lng, lat, value) { var pt = geo.dataToPoint([lng, lat]); pt[0] -= x; pt[1] -= y; pt.push(value); return pt; }); var dataExtent = visualMapModel.getExtent(); var isInRange = visualMapModel.type === "visualMap.continuous" ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) : getIsInPiecewiseRange(dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected); hmLayer.update(points, width, height, inRangeVisuals.color.getNormalizer(), { inRange: inRangeVisuals.color.getColorMapper(), outOfRange: outOfRangeVisuals.color.getColorMapper() }, isInRange); var img = new ZRImage({ style: { width, height, x, y, image: hmLayer.canvas }, silent: true }); this.group.add(img); }; HeatmapView.type = "heatmap"; return HeatmapView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/heatmap/HeatmapSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var HeatmapSeriesModel = function(_super) { __extends(HeatmapSeriesModel, _super); function HeatmapSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = HeatmapSeriesModel.type; return _this; } HeatmapSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this, { generateCoord: "value" }); }; HeatmapSeriesModel.prototype.preventIncremental = function() { var coordSysCreator = CoordinateSystemManager.get(this.get("coordinateSystem")); if (coordSysCreator && coordSysCreator.dimensions) return coordSysCreator.dimensions[0] === "lng" && coordSysCreator.dimensions[1] === "lat"; }; HeatmapSeriesModel.type = "series.heatmap"; HeatmapSeriesModel.dependencies = [ "grid", "geo", "calendar", "matrix" ]; HeatmapSeriesModel.defaultOption = { coordinateSystem: "cartesian2d", z: 2, geoIndex: 0, blurSize: 30, pointSize: 20, maxOpacity: 1, minOpacity: 0, select: { itemStyle: { borderColor: tokens.color.primary } } }; return HeatmapSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/heatmap/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$33(registers) { registers.registerChartView(HeatmapView); registers.registerSeriesModel(HeatmapSeriesModel); } //#endregion //#region node_modules/echarts/lib/chart/bar/PictorialBarView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BAR_BORDER_WIDTH_QUERY = ["itemStyle", "borderWidth"]; var LAYOUT_ATTRS = [{ xy: "x", wh: "width", index: 0, posDesc: ["left", "right"] }, { xy: "y", wh: "height", index: 1, posDesc: ["top", "bottom"] }]; var pathForLineWidth = new Circle(); var PictorialBarView = function(_super) { __extends(PictorialBarView, _super); function PictorialBarView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_PICTORIAL_BAR; return _this; } PictorialBarView.prototype.render = function(seriesModel, ecModel, api) { var group = this.group; var data = seriesModel.getData(); var oldData = this._data; var cartesian = seriesModel.coordinateSystem; var isHorizontal = cartesian.getBaseAxis().isHorizontal(); var coordSysRect = cartesian.master.getRect(); var opt = { ecSize: { width: api.getWidth(), height: api.getHeight() }, seriesModel, coordSys: cartesian, coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]], isHorizontal, valueDim: LAYOUT_ATTRS[+isHorizontal], categoryDim: LAYOUT_ATTRS[1 - +isHorizontal] }; data.diff(oldData).add(function(dataIndex) { if (!data.hasValue(dataIndex)) return; var symbolMeta = getSymbolMeta(data, dataIndex, getItemModel(data, dataIndex), opt); var bar = createBar(data, opt, symbolMeta); data.setItemGraphicEl(dataIndex, bar); group.add(bar); updateCommon(bar, opt, symbolMeta); }).update(function(newIndex, oldIndex) { var bar = oldData.getItemGraphicEl(oldIndex); if (!data.hasValue(newIndex)) { group.remove(bar); return; } var symbolMeta = getSymbolMeta(data, newIndex, getItemModel(data, newIndex), opt); var pictorialShapeStr = getShapeStr(data, symbolMeta); if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) { group.remove(bar); data.setItemGraphicEl(newIndex, null); bar = null; } if (bar) updateBar(bar, opt, symbolMeta); else bar = createBar(data, opt, symbolMeta, true); data.setItemGraphicEl(newIndex, bar); bar.__pictorialSymbolMeta = symbolMeta; group.add(bar); updateCommon(bar, opt, symbolMeta); }).remove(function(dataIndex) { var bar = oldData.getItemGraphicEl(dataIndex); bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar); }).execute(); var clipPath = seriesModel.get("clip", true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null; if (clipPath) group.setClipPath(clipPath); else group.removeClipPath(); this._data = data; return this.group; }; PictorialBarView.prototype.remove = function(ecModel, api) { var group = this.group; var data = this._data; if (ecModel.get("animation")) { if (data) data.eachItemGraphicEl(function(bar) { removeBar(data, getECData(bar).dataIndex, ecModel, bar); }); } else group.removeAll(); }; PictorialBarView.type = SERIES_TYPE_PICTORIAL_BAR; return PictorialBarView; }(ChartView); function getSymbolMeta(data, dataIndex, itemModel, opt) { var layout = data.getItemLayout(dataIndex); var symbolRepeat = itemModel.get("symbolRepeat"); var symbolClip = itemModel.get("symbolClip"); var symbolPosition = itemModel.get("symbolPosition") || "start"; var rotation = (itemModel.get("symbolRotate") || 0) * Math.PI / 180 || 0; var symbolPatternSize = itemModel.get("symbolPatternSize") || 2; var isAnimationEnabled = itemModel.isAnimationEnabled(); var symbolMeta = { dataIndex, layout, itemModel, symbolType: data.getItemVisual(dataIndex, "symbol") || "circle", style: data.getItemVisual(dataIndex, "style"), symbolClip, symbolRepeat, symbolRepeatDirection: itemModel.get("symbolRepeatDirection"), symbolPatternSize, rotation, animationModel: isAnimationEnabled ? itemModel : null, hoverScale: isAnimationEnabled && itemModel.get(["emphasis", "scale"]), z2: itemModel.getShallow("z", true) || 0 }; prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta); prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta); prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta); var symbolSize = symbolMeta.symbolSize; prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, normalizeSymbolOffset(itemModel.get("symbolOffset"), symbolSize), symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta); return symbolMeta; } function prepareBarLength(itemModel, symbolRepeat, layout, opt, outputSymbolMeta) { var valueDim = opt.valueDim; var symbolBoundingData = itemModel.get("symbolBoundingData"); var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis()); var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)); var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0); var boundingLength; if (isArray$1(symbolBoundingData)) { var symbolBoundingExtent = [convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx]; symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse(); boundingLength = symbolBoundingExtent[pxSignIdx]; } else if (symbolBoundingData != null) boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx; else if (symbolRepeat) boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx; else boundingLength = layout[valueDim.wh]; outputSymbolMeta.boundingLength = boundingLength; if (symbolRepeat) outputSymbolMeta.repeatCutLength = layout[valueDim.wh]; var isXAxis = valueDim.xy === "x"; var isInverse = valueAxis.inverse; outputSymbolMeta.pxSign = isXAxis && !isInverse || !isXAxis && isInverse ? boundingLength >= 0 ? 1 : -1 : boundingLength > 0 ? 1 : -1; } function convertToCoordOnAxis(axis, value) { return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value))); } function prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, outputSymbolMeta) { var valueDim = opt.valueDim; var categoryDim = opt.categoryDim; var categorySize = Math.abs(layout[categoryDim.wh]); var symbolSize = data.getItemVisual(dataIndex, "symbolSize"); var parsedSymbolSize; if (isArray$1(symbolSize)) parsedSymbolSize = symbolSize.slice(); else if (symbolSize == null) parsedSymbolSize = ["100%", "100%"]; else parsedSymbolSize = [symbolSize, symbolSize]; parsedSymbolSize[categoryDim.index] = parsePercent(parsedSymbolSize[categoryDim.index], categorySize); parsedSymbolSize[valueDim.index] = parsePercent(parsedSymbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength)); outputSymbolMeta.symbolSize = parsedSymbolSize; var symbolScale = outputSymbolMeta.symbolScale = [parsedSymbolSize[0] / symbolPatternSize, parsedSymbolSize[1] / symbolPatternSize]; symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign; } function prepareLineWidth(itemModel, symbolScale, rotation, opt, outputSymbolMeta) { var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0; if (valueLineWidth) { pathForLineWidth.attr({ scaleX: symbolScale[0], scaleY: symbolScale[1], rotation }); pathForLineWidth.updateTransform(); valueLineWidth /= pathForLineWidth.getLineScale(); valueLineWidth *= symbolScale[opt.valueDim.index]; } outputSymbolMeta.valueLineWidth = valueLineWidth || 0; } function prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, outputSymbolMeta) { var categoryDim = opt.categoryDim; var valueDim = opt.valueDim; var pxSign = outputSymbolMeta.pxSign; var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0); var pathLen = unitLength; if (symbolRepeat) { var absBoundingLength = Math.abs(boundingLength); var symbolMargin = retrieve(itemModel.get("symbolMargin"), "15%") + ""; var hasEndGap = false; if (symbolMargin.lastIndexOf("!") === symbolMargin.length - 1) { hasEndGap = true; symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1); } var symbolMarginNumeric = parsePercent(symbolMargin, symbolSize[valueDim.index]); var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0); var endFix = hasEndGap ? 0 : symbolMarginNumeric * 2; var repeatSpecified = isNumeric(symbolRepeat); var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); symbolMarginNumeric = (absBoundingLength - repeatTimes * unitLength) / 2 / (hasEndGap ? repeatTimes : Math.max(repeatTimes - 1, 1)); uLenWithMargin = unitLength + symbolMarginNumeric * 2; endFix = hasEndGap ? 0 : symbolMarginNumeric * 2; if (!repeatSpecified && symbolRepeat !== "fixed") repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 0; pathLen = repeatTimes * uLenWithMargin - endFix; outputSymbolMeta.repeatTimes = repeatTimes; outputSymbolMeta.symbolMargin = symbolMarginNumeric; } var sizeFix = pxSign * (pathLen / 2); var pathPosition = outputSymbolMeta.pathPosition = []; pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2; pathPosition[valueDim.index] = symbolPosition === "start" ? sizeFix : symbolPosition === "end" ? boundingLength - sizeFix : boundingLength / 2; if (symbolOffset) { pathPosition[0] += symbolOffset[0]; pathPosition[1] += symbolOffset[1]; } var bundlePosition = outputSymbolMeta.bundlePosition = []; bundlePosition[categoryDim.index] = layout[categoryDim.xy]; bundlePosition[valueDim.index] = layout[valueDim.xy]; var barRectShape = outputSymbolMeta.barRectShape = extend({}, layout); barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)); barRectShape[categoryDim.wh] = layout[categoryDim.wh]; var clipShape = outputSymbolMeta.clipShape = {}; clipShape[categoryDim.xy] = -layout[categoryDim.xy]; clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh]; clipShape[valueDim.xy] = 0; clipShape[valueDim.wh] = layout[valueDim.wh]; } function createPath(symbolMeta) { var symbolPatternSize = symbolMeta.symbolPatternSize; var path = createSymbol$1(symbolMeta.symbolType, -symbolPatternSize / 2, -symbolPatternSize / 2, symbolPatternSize, symbolPatternSize); path.attr({ culling: true }); path.type !== "image" && path.setStyle({ strokeNoScale: true }); return path; } function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) { var bundle = bar.__pictorialBundle; var symbolSize = symbolMeta.symbolSize; var valueLineWidth = symbolMeta.valueLineWidth; var pathPosition = symbolMeta.pathPosition; var valueDim = opt.valueDim; var repeatTimes = symbolMeta.repeatTimes || 0; var index = 0; var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2; eachPath(bar, function(path) { path.__pictorialAnimationIndex = index; path.__pictorialRepeatTimes = repeatTimes; if (index < repeatTimes) updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate); else updateAttr(path, null, { scaleX: 0, scaleY: 0 }, symbolMeta, isUpdate, function() { bundle.remove(path); }); index++; }); for (; index < repeatTimes; index++) { var path = createPath(symbolMeta); path.__pictorialAnimationIndex = index; path.__pictorialRepeatTimes = repeatTimes; bundle.add(path); var target = makeTarget(index); updateAttr(path, { x: target.x, y: target.y, scaleX: 0, scaleY: 0 }, { scaleX: target.scaleX, scaleY: target.scaleY, rotation: target.rotation }, symbolMeta, isUpdate); } function makeTarget(index) { var position = pathPosition.slice(); var pxSign = symbolMeta.pxSign; var i = index; if (symbolMeta.symbolRepeatDirection === "start" ? pxSign > 0 : pxSign < 0) i = repeatTimes - 1 - index; position[valueDim.index] = unit * (i - repeatTimes / 2 + .5) + pathPosition[valueDim.index]; return { x: position[0], y: position[1], scaleX: symbolMeta.symbolScale[0], scaleY: symbolMeta.symbolScale[1], rotation: symbolMeta.rotation }; } } function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) { var bundle = bar.__pictorialBundle; var mainPath = bar.__pictorialMainPath; if (!mainPath) { mainPath = bar.__pictorialMainPath = createPath(symbolMeta); bundle.add(mainPath); updateAttr(mainPath, { x: symbolMeta.pathPosition[0], y: symbolMeta.pathPosition[1], scaleX: 0, scaleY: 0, rotation: symbolMeta.rotation }, { scaleX: symbolMeta.symbolScale[0], scaleY: symbolMeta.symbolScale[1] }, symbolMeta, isUpdate); } else updateAttr(mainPath, null, { x: symbolMeta.pathPosition[0], y: symbolMeta.pathPosition[1], scaleX: symbolMeta.symbolScale[0], scaleY: symbolMeta.symbolScale[1], rotation: symbolMeta.rotation }, symbolMeta, isUpdate); } function createOrUpdateBarRect(bar, symbolMeta, isUpdate) { var rectShape = extend({}, symbolMeta.barRectShape); var barRect = bar.__pictorialBarRect; if (!barRect) { barRect = bar.__pictorialBarRect = new Rect$2({ z2: 2, shape: rectShape, silent: true, style: { stroke: "transparent", fill: "transparent", lineWidth: 0 } }); barRect.disableMorphing = true; bar.add(barRect); } else updateAttr(barRect, null, { shape: rectShape }, symbolMeta, isUpdate); } function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) { if (symbolMeta.symbolClip) { var clipPath = bar.__pictorialClipPath; var clipShape = extend({}, symbolMeta.clipShape); var valueDim = opt.valueDim; var animationModel = symbolMeta.animationModel; var dataIndex = symbolMeta.dataIndex; if (clipPath) updateProps$1(clipPath, { shape: clipShape }, animationModel, dataIndex); else { clipShape[valueDim.wh] = 0; clipPath = new Rect$2({ shape: clipShape }); bar.__pictorialBundle.setClipPath(clipPath); bar.__pictorialClipPath = clipPath; var target = {}; target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh]; graphic_exports$1[isUpdate ? "updateProps" : "initProps"](clipPath, { shape: target }, animationModel, dataIndex); } } } function getItemModel(data, dataIndex) { var itemModel = data.getItemModel(dataIndex); itemModel.getAnimationDelayParams = getAnimationDelayParams; itemModel.isAnimationEnabled = isAnimationEnabled; return itemModel; } function getAnimationDelayParams(path) { return { index: path.__pictorialAnimationIndex, count: path.__pictorialRepeatTimes }; } function isAnimationEnabled() { return this.parentModel.isAnimationEnabled() && !!this.getShallow("animation"); } function createBar(data, opt, symbolMeta, isUpdate) { var bar = new Group$3(); var bundle = new Group$3(); bar.add(bundle); bar.__pictorialBundle = bundle; bundle.x = symbolMeta.bundlePosition[0]; bundle.y = symbolMeta.bundlePosition[1]; if (symbolMeta.symbolRepeat) createOrUpdateRepeatSymbols(bar, opt, symbolMeta); else createOrUpdateSingleSymbol(bar, opt, symbolMeta); createOrUpdateBarRect(bar, symbolMeta, isUpdate); createOrUpdateClip(bar, opt, symbolMeta, isUpdate); bar.__pictorialShapeStr = getShapeStr(data, symbolMeta); bar.__pictorialSymbolMeta = symbolMeta; return bar; } function updateBar(bar, opt, symbolMeta) { var animationModel = symbolMeta.animationModel; var dataIndex = symbolMeta.dataIndex; var bundle = bar.__pictorialBundle; updateProps$1(bundle, { x: symbolMeta.bundlePosition[0], y: symbolMeta.bundlePosition[1] }, animationModel, dataIndex); if (symbolMeta.symbolRepeat) createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true); else createOrUpdateSingleSymbol(bar, opt, symbolMeta, true); createOrUpdateBarRect(bar, symbolMeta, true); createOrUpdateClip(bar, opt, symbolMeta, true); } function removeBar(data, dataIndex, animationModel, bar) { var labelRect = bar.__pictorialBarRect; labelRect && labelRect.removeTextContent(); var paths = []; eachPath(bar, function(path) { paths.push(path); }); bar.__pictorialMainPath && paths.push(bar.__pictorialMainPath); bar.__pictorialClipPath && (animationModel = null); each$12(paths, function(path) { removeElement(path, { scaleX: 0, scaleY: 0 }, animationModel, dataIndex, function() { bar.parent && bar.parent.remove(bar); }); }); data.setItemGraphicEl(dataIndex, null); } function getShapeStr(data, symbolMeta) { return [ data.getItemVisual(symbolMeta.dataIndex, "symbol") || "none", !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip ].join(":"); } function eachPath(bar, cb, context) { each$12(bar.__pictorialBundle.children(), function(el) { el !== bar.__pictorialBarRect && cb.call(context, el); }); } function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) { immediateAttrs && el.attr(immediateAttrs); if (symbolMeta.symbolClip && !isUpdate) animationAttrs && el.attr(animationAttrs); else animationAttrs && graphic_exports$1[isUpdate ? "updateProps" : "initProps"](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb); } function updateCommon(bar, opt, symbolMeta) { var dataIndex = symbolMeta.dataIndex; var itemModel = symbolMeta.itemModel; var emphasisModel = itemModel.getModel("emphasis"); var emphasisStyle = emphasisModel.getModel("itemStyle").getItemStyle(); var blurStyle = itemModel.getModel(["blur", "itemStyle"]).getItemStyle(); var selectStyle = itemModel.getModel(["select", "itemStyle"]).getItemStyle(); var cursorStyle = itemModel.getShallow("cursor"); var focus = emphasisModel.get("focus"); var blurScope = emphasisModel.get("blurScope"); var hoverScale = emphasisModel.get("scale"); eachPath(bar, function(path) { if (path instanceof ZRImage) { var pathStyle = path.style; path.useStyle(extend({ image: pathStyle.image, x: pathStyle.x, y: pathStyle.y, width: pathStyle.width, height: pathStyle.height }, symbolMeta.style)); } else path.useStyle(symbolMeta.style); var emphasisState = path.ensureState("emphasis"); emphasisState.style = emphasisStyle; if (hoverScale) { emphasisState.scaleX = path.scaleX * 1.1; emphasisState.scaleY = path.scaleY * 1.1; } path.ensureState("blur").style = blurStyle; path.ensureState("select").style = selectStyle; cursorStyle && (path.cursor = cursorStyle); path.z2 = symbolMeta.z2; }); var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)]; var barRect = bar.__pictorialBarRect; barRect.ignoreClip = true; setLabelStyle(barRect, getLabelStatesModels(itemModel), { labelFetcher: opt.seriesModel, labelDataIndex: dataIndex, defaultText: getDefaultLabel(opt.seriesModel.getData(), dataIndex), inheritColor: symbolMeta.style.fill, defaultOpacity: symbolMeta.style.opacity, defaultOutsidePosition: barPositionOutside }); toggleHoverEmphasis(bar, focus, blurScope, emphasisModel.get("disabled")); } function toIntTimes(times) { var roundedTimes = Math.round(times); return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times); } //#endregion //#region node_modules/echarts/lib/chart/bar/PictorialBarSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PictorialBarSeriesModel = function(_super) { __extends(PictorialBarSeriesModel, _super); function PictorialBarSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PictorialBarSeriesModel.type; _this.hasSymbolVisual = true; _this.defaultSymbol = "roundRect"; return _this; } PictorialBarSeriesModel.prototype.getInitialData = function(option) { option.stack = null; return _super.prototype.getInitialData.apply(this, arguments); }; PictorialBarSeriesModel.type = "series." + SERIES_TYPE_PICTORIAL_BAR; PictorialBarSeriesModel.dependencies = ["grid"]; PictorialBarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, { symbol: "circle", symbolSize: null, symbolRotate: null, symbolPosition: null, symbolOffset: null, symbolMargin: null, symbolRepeat: false, symbolRepeatDirection: "end", symbolClip: false, symbolBoundingData: null, symbolPatternSize: 400, barGap: "-100%", clip: false, progressive: 0, emphasis: { scale: false }, select: { itemStyle: { borderColor: tokens.color.primary } } }); return PictorialBarSeriesModel; }(BaseBarSeriesModel); //#endregion //#region node_modules/echarts/lib/chart/bar/installPictorialBar.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$32(registers) { registers.registerChartView(PictorialBarView); registers.registerSeriesModel(PictorialBarSeriesModel); registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, createCrossSeriesLayoutHandler(SERIES_TYPE_PICTORIAL_BAR)); registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout(SERIES_TYPE_PICTORIAL_BAR)); registerBarGridAxisHandlers(registers); } //#endregion //#region node_modules/echarts/lib/chart/themeRiver/ThemeRiverSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DATA_NAME_INDEX = 2; var SERIES_TYPE_THEME_RIVER = "themeRiver"; var ThemeRiverSeriesModel = function(_super) { __extends(ThemeRiverSeriesModel, _super); function ThemeRiverSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ThemeRiverSeriesModel.type; return _this; } /** * @override */ ThemeRiverSeriesModel.prototype.init = function(option) { _super.prototype.init.apply(this, arguments); this.legendVisualProvider = new LegendVisualProvider(bind$1(this.getData, this), bind$1(this.getRawData, this)); }; /** * If there is no value of a certain point in the time for some event,set it value to 0. * * @param {Array} data initial data in the option * @return {Array} */ ThemeRiverSeriesModel.prototype.fixData = function(data) { var rawDataLength = data.length; /** * Make sure every layer data get the same keys. * The value index tells which layer has visited. * { * 2014/01/01: -1 * } */ var timeValueKeys = {}; var groupResult = groupData(data, function(item) { if (!timeValueKeys.hasOwnProperty(item[0] + "")) timeValueKeys[item[0] + ""] = -1; return item[2]; }); var layerData = []; groupResult.buckets.each(function(items, key) { layerData.push({ name: key, dataList: items }); }); var layerNum = layerData.length; for (var k = 0; k < layerNum; ++k) { var name_1 = layerData[k].name; for (var j = 0; j < layerData[k].dataList.length; ++j) { var timeValue = layerData[k].dataList[j][0] + ""; timeValueKeys[timeValue] = k; } for (var timeValue in timeValueKeys) if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) { timeValueKeys[timeValue] = k; data[rawDataLength] = [ timeValue, 0, name_1 ]; rawDataLength++; } } return data; }; /** * @override * @param option the initial option that user gave * @param ecModel the model object for themeRiver option */ ThemeRiverSeriesModel.prototype.getInitialData = function(option, ecModel) { var axisType = this.getReferringComponents("singleAxis", SINGLE_REFERRING).models[0].get("type"); var filterData = filter(option.data, function(dataItem) { return dataItem[2] !== void 0; }); var data = this.fixData(filterData || []); var nameList = []; var nameMap = this.nameMap = createHashMap(); var count = 0; for (var i = 0; i < data.length; ++i) { nameList.push(data[i][DATA_NAME_INDEX]); if (!nameMap.get(data[i][DATA_NAME_INDEX])) { nameMap.set(data[i][DATA_NAME_INDEX], count); count++; } } var dimensions = prepareSeriesDataSchema(data, { coordDimensions: ["single"], dimensionsDefine: [ { name: "time", type: getDimensionTypeByAxis(axisType) }, { name: "value", type: "float" }, { name: "name", type: "ordinal" } ], encodeDefine: { single: 0, value: 1, itemName: 2 } }).dimensions; var list = new SeriesData(dimensions, this); list.initData(data); return list; }; /** * The raw data is divided into multiple layers and each layer * has same name. */ ThemeRiverSeriesModel.prototype.getLayerSeries = function() { var data = this.getData(); var lenCount = data.count(); var indexArr = []; for (var i = 0; i < lenCount; ++i) indexArr[i] = i; var timeDim = data.mapDimension("single"); var groupResult = groupData(indexArr, function(index) { return data.get("name", index); }); var layerSeries = []; groupResult.buckets.each(function(items, key) { items.sort(function(index1, index2) { return data.get(timeDim, index1) - data.get(timeDim, index2); }); layerSeries.push({ name: key, indices: items }); }); return layerSeries; }; /** * Get data indices for show tooltip content */ ThemeRiverSeriesModel.prototype.getAxisTooltipData = function(dim, value, baseAxis) { if (!isArray$1(dim)) dim = dim ? [dim] : []; var data = this.getData(); var layerSeries = this.getLayerSeries(); var indices = []; var layerNum = layerSeries.length; var nestestValue; for (var i = 0; i < layerNum; ++i) { var minDist = Number.MAX_VALUE; var nearestIdx = -1; var pointNum = layerSeries[i].indices.length; for (var j = 0; j < pointNum; ++j) { var theValue = data.get(dim[0], layerSeries[i].indices[j]); var dist = Math.abs(theValue - value); if (dist <= minDist) { nestestValue = theValue; minDist = dist; nearestIdx = layerSeries[i].indices[j]; } } indices.push(nearestIdx); } return { dataIndices: indices, nestestValue }; }; ThemeRiverSeriesModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); return createTooltipMarkup("nameValue", { name: data.getName(dataIndex), value: data.get(data.mapDimension("value"), dataIndex) }); }; ThemeRiverSeriesModel.type = "series." + SERIES_TYPE_THEME_RIVER; ThemeRiverSeriesModel.dependencies = ["singleAxis"]; ThemeRiverSeriesModel.defaultOption = { z: 2, colorBy: "data", coordinateSystem: "singleAxis", boundaryGap: ["10%", "10%"], singleAxisIndex: 0, animationEasing: "linear", label: { margin: 4, show: true, position: "left", fontSize: 11 }, emphasis: { label: { show: true } } }; return ThemeRiverSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/chart/themeRiver/ThemeRiverView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ThemeRiverView = function(_super) { __extends(ThemeRiverView, _super); function ThemeRiverView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_THEME_RIVER; _this._layers = []; return _this; } ThemeRiverView.prototype.render = function(seriesModel, ecModel, api) { var data = seriesModel.getData(); var self = this; var group = this.group; var layersSeries = seriesModel.getLayerSeries(); var layoutInfo = data.getLayout("layoutInfo"); var rect = layoutInfo.rect; var boundaryGap = layoutInfo.boundaryGap; group.x = 0; group.y = rect.y + boundaryGap[0]; function keyGetter(item) { return item.name; } var dataDiffer = new DataDiffer(this._layersSeries || [], layersSeries, keyGetter, keyGetter); var newLayersGroups = []; dataDiffer.add(bind$1(process, this, "add")).update(bind$1(process, this, "update")).remove(bind$1(process, this, "remove")).execute(); function process(status, idx, oldIdx) { var oldLayersGroups = self._layers; if (status === "remove") { group.remove(oldLayersGroups[idx]); return; } var points0 = []; var points1 = []; var style; var indices = layersSeries[idx].indices; var j = 0; for (; j < indices.length; j++) { var layout = data.getItemLayout(indices[j]); var x = layout.x; var y0 = layout.y0; var y = layout.y; points0.push(x, y0); points1.push(x, y0 + y); style = data.getItemVisual(indices[j], "style"); } var polygon; var textLayout = data.getItemLayout(indices[0]); var margin = seriesModel.getModel("label").get("margin"); var emphasisModel = seriesModel.getModel("emphasis"); if (status === "add") { var layerGroup = newLayersGroups[idx] = new Group$3(); polygon = new ECPolygon({ shape: { points: points0, stackedOnPoints: points1, smooth: .4, stackedOnSmooth: .4, smoothConstraint: false }, z2: 0 }); layerGroup.add(polygon); group.add(layerGroup); if (seriesModel.isAnimationEnabled()) polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function() { polygon.removeClipPath(); })); } else { var layerGroup = oldLayersGroups[oldIdx]; polygon = layerGroup.childAt(0); group.add(layerGroup); newLayersGroups[idx] = layerGroup; updateProps$1(polygon, { shape: { points: points0, stackedOnPoints: points1 } }, seriesModel); saveOldStyle(polygon); } setLabelStyle(polygon, getLabelStatesModels(seriesModel), { labelDataIndex: indices[j - 1], defaultText: data.getName(indices[j - 1]), inheritColor: style.fill }, { normal: { verticalAlign: "middle" } }); polygon.setTextConfig({ position: null, local: true }); var labelEl = polygon.getTextContent(); if (labelEl) { labelEl.x = textLayout.x - margin; labelEl.y = textLayout.y0 + textLayout.y / 2; } polygon.useStyle(style); data.setItemGraphicEl(idx, polygon); setStatesStylesFromModel(polygon, seriesModel); toggleHoverEmphasis(polygon, emphasisModel.get("focus"), emphasisModel.get("blurScope"), emphasisModel.get("disabled")); } this._layersSeries = layersSeries; this._layers = newLayersGroups; }; ThemeRiverView.type = SERIES_TYPE_THEME_RIVER; return ThemeRiverView; }(ChartView); function createGridClipShape(rect, seriesModel, cb) { var rectEl = new Rect$2({ shape: { x: rect.x - 10, y: rect.y - 10, width: 0, height: rect.height + 20 } }); initProps(rectEl, { shape: { x: rect.x - 50, width: rect.width + 100, height: rect.height + 20 } }, seriesModel, cb); return rectEl; } //#endregion //#region node_modules/echarts/lib/chart/themeRiver/themeRiverLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var themeRiverLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_THEME_RIVER, themeRiverLayout); function themeRiverLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_THEME_RIVER, function(seriesModel) { var data = seriesModel.getData(); var single = seriesModel.coordinateSystem; var layoutInfo = {}; var rect = single.getRect(); layoutInfo.rect = rect; var boundaryGap = seriesModel.get("boundaryGap"); var axis = single.getAxis(); layoutInfo.boundaryGap = boundaryGap; if (axis.orient === "horizontal") { boundaryGap[0] = parsePercent(boundaryGap[0], rect.height); boundaryGap[1] = parsePercent(boundaryGap[1], rect.height); doThemeRiverLayout(data, seriesModel, rect.height - boundaryGap[0] - boundaryGap[1]); } else { boundaryGap[0] = parsePercent(boundaryGap[0], rect.width); boundaryGap[1] = parsePercent(boundaryGap[1], rect.width); doThemeRiverLayout(data, seriesModel, rect.width - boundaryGap[0] - boundaryGap[1]); } data.setLayout("layoutInfo", layoutInfo); }); } /** * The layout information about themeriver * * @param data data in the series * @param seriesModel the model object of themeRiver series * @param height value used to compute every series height */ function doThemeRiverLayout(data, seriesModel, height) { if (!data.count()) return; var coordSys = seriesModel.coordinateSystem; var layerSeries = seriesModel.getLayerSeries(); var timeDim = data.mapDimension("single"); var valueDim = data.mapDimension("value"); var layerPoints = map$1(layerSeries, function(singleLayer) { return map$1(singleLayer.indices, function(idx) { var pt = coordSys.dataToPoint(data.get(timeDim, idx)); pt[1] = data.get(valueDim, idx); return pt; }); }); var base = computeBaseline(layerPoints); var baseLine = base.y0; var ky = height / base.max; var n = layerSeries.length; var m = layerSeries[0].indices.length; var baseY0; for (var j = 0; j < m; ++j) { baseY0 = baseLine[j] * ky; data.setItemLayout(layerSeries[0].indices[j], { layerIndex: 0, x: layerPoints[0][j][0], y0: baseY0, y: layerPoints[0][j][1] * ky }); for (var i = 1; i < n; ++i) { baseY0 += layerPoints[i - 1][j][1] * ky; data.setItemLayout(layerSeries[i].indices[j], { layerIndex: i, x: layerPoints[i][j][0], y0: baseY0, y: layerPoints[i][j][1] * ky }); } } } /** * Compute the baseLine of the rawdata * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics * * @param data the points in each layer */ function computeBaseline(data) { var layerNum = data.length; var pointNum = data[0].length; var sums = []; var y0 = []; var max = 0; for (var i = 0; i < pointNum; ++i) { var temp = 0; for (var j = 0; j < layerNum; ++j) temp += data[j][i][1]; if (temp > max) max = temp; sums.push(temp); } for (var k = 0; k < pointNum; ++k) y0[k] = (max - sums[k]) / 2; max = 0; for (var l = 0; l < pointNum; ++l) { var sum = sums[l] + y0[l]; if (sum > max) max = sum; } return { y0, max }; } //#endregion //#region node_modules/echarts/lib/chart/themeRiver/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$31(registers) { registers.registerChartView(ThemeRiverView); registers.registerSeriesModel(ThemeRiverSeriesModel); registers.registerLayout(themeRiverLayoutStageHandler); registers.registerProcessor(dataFilter$1(SERIES_TYPE_THEME_RIVER)); } //#endregion //#region node_modules/echarts/lib/chart/sunburst/SunburstPiece.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_SECTOR_Z = 2; var DEFAULT_TEXT_Z = 4; /** * Sunburstce of Sunburst including Sector, Label, LabelLine */ var SunburstPiece = function(_super) { __extends(SunburstPiece, _super); function SunburstPiece(node, seriesModel, ecModel, api) { var _this = _super.call(this) || this; _this.z2 = DEFAULT_SECTOR_Z; _this.textConfig = { inside: true }; getECData(_this).seriesIndex = seriesModel.seriesIndex; var text = new ZRText({ z2: DEFAULT_TEXT_Z, silent: node.getModel().get(["label", "silent"]) }); _this.setTextContent(text); _this.updateData(true, node, seriesModel, ecModel, api); return _this; } SunburstPiece.prototype.updateData = function(firstCreate, node, seriesModel, ecModel, api) { this.node = node; node.piece = this; seriesModel = seriesModel || this._seriesModel; ecModel = ecModel || this._ecModel; var sector = this; getECData(sector).dataIndex = node.dataIndex; var itemModel = node.getModel(); var emphasisModel = itemModel.getModel("emphasis"); var layout = node.getLayout(); var sectorShape = extend({}, layout); sectorShape.label = null; var normalStyle = node.getVisual("style"); normalStyle.lineJoin = "bevel"; var decal = node.getVisual("decal"); if (decal) normalStyle.decal = createOrUpdatePatternFromDecal(decal, api); extend(sectorShape, getSectorCornerRadius(itemModel.getModel("itemStyle"), sectorShape, true)); each$12(SPECIAL_STATES, function(stateName) { var state = sector.ensureState(stateName); var itemStyleModel = itemModel.getModel([stateName, "itemStyle"]); state.style = itemStyleModel.getItemStyle(); var cornerRadius = getSectorCornerRadius(itemStyleModel, sectorShape); if (cornerRadius) state.shape = cornerRadius; }); if (firstCreate) { sector.setShape(sectorShape); sector.shape.r = layout.r0; initProps(sector, { shape: { r: layout.r } }, seriesModel, node.dataIndex); } else { updateProps$1(sector, { shape: sectorShape }, seriesModel); saveOldStyle(sector); } sector.useStyle(normalStyle); this._updateLabel(seriesModel); var cursorStyle = itemModel.getShallow("cursor"); cursorStyle && sector.attr("cursor", cursorStyle); this._seriesModel = seriesModel || this._seriesModel; this._ecModel = ecModel || this._ecModel; var focus = emphasisModel.get("focus"); var focusOrIndices = focus === "relative" ? concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === "ancestor" ? node.getAncestorsIndices() : focus === "descendant" ? node.getDescendantIndices() : focus; toggleHoverEmphasis(this, focusOrIndices, emphasisModel.get("blurScope"), emphasisModel.get("disabled")); }; SunburstPiece.prototype._updateLabel = function(seriesModel) { var _this = this; var itemModel = this.node.getModel(); var normalLabelModel = itemModel.getModel("label"); var layout = this.node.getLayout(); var angle = layout.endAngle - layout.startAngle; var midAngle = (layout.startAngle + layout.endAngle) / 2; var dx = Math.cos(midAngle); var dy = Math.sin(midAngle); var sector = this; var label = sector.getTextContent(); var dataIndex = this.node.dataIndex; var labelMinAngle = normalLabelModel.get("minAngle") / 180 * Math.PI; label.ignore = !(normalLabelModel.get("show") && !(labelMinAngle != null && Math.abs(angle) < labelMinAngle)); each$12(DISPLAY_STATES, function(stateName) { var labelStateModel = stateName === "normal" ? itemModel.getModel("label") : itemModel.getModel([stateName, "label"]); var isNormal = stateName === "normal"; var state = isNormal ? label : label.ensureState(stateName); var text = seriesModel.getFormattedLabel(dataIndex, stateName); if (isNormal) text = text || _this.node.name; state.style = createTextStyle$1(labelStateModel, {}, null, stateName !== "normal", true); if (text) state.style.text = text; var isShown = labelStateModel.get("show"); if (isShown != null && !isNormal) state.ignore = !isShown; var labelPosition = getLabelAttr(labelStateModel, "position"); var sectorState = isNormal ? sector : sector.states[stateName]; var labelColor = sectorState.style.fill; sectorState.textConfig = { outsideFill: labelStateModel.get("color") === "inherit" ? labelColor : null, inside: labelPosition !== "outside" }; var r; var labelPadding = getLabelAttr(labelStateModel, "distance") || 0; var textAlign = getLabelAttr(labelStateModel, "align"); var rotateType = getLabelAttr(labelStateModel, "rotate"); var flipStartAngle = Math.PI * .5; var flipEndAngle = Math.PI * 1.5; var midAngleNormal = normalizeRadian(rotateType === "tangential" ? Math.PI / 2 - midAngle : midAngle); var needsFlip = midAngleNormal > flipStartAngle && !isRadianAroundZero(midAngleNormal - flipStartAngle) && midAngleNormal < flipEndAngle; if (labelPosition === "outside") { r = layout.r + labelPadding; textAlign = needsFlip ? "right" : "left"; } else if (!textAlign || textAlign === "center") { if (layout.r0 === 0 && isRadianAroundZero(angle - 2 * Math.PI)) r = 0; else r = (layout.r + layout.r0) / 2; textAlign = "center"; } else if (textAlign === "left") { r = layout.r0 + labelPadding; textAlign = needsFlip ? "right" : "left"; } else if (textAlign === "right") { r = layout.r - labelPadding; textAlign = needsFlip ? "left" : "right"; } state.style.align = textAlign; state.style.verticalAlign = getLabelAttr(labelStateModel, "verticalAlign") || "middle"; state.x = r * dx + layout.cx; state.y = r * dy + layout.cy; var rotate = 0; if (rotateType === "radial") rotate = normalizeRadian(-midAngle) + (needsFlip ? Math.PI : 0); else if (rotateType === "tangential") rotate = normalizeRadian(Math.PI / 2 - midAngle) + (needsFlip ? Math.PI : 0); else if (isNumber(rotateType)) rotate = rotateType * Math.PI / 180; state.rotation = normalizeRadian(rotate); }); function getLabelAttr(model, name) { var stateAttr = model.get(name); if (stateAttr == null) return normalLabelModel.get(name); return stateAttr; } label.dirtyStyle(); }; return SunburstPiece; }(Sector); //#endregion //#region node_modules/echarts/lib/chart/sunburst/SunburstSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SERIES_TYPE_SUNBURST = "sunburst"; var SunburstSeriesModel = function(_super) { __extends(SunburstSeriesModel, _super); function SunburstSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SunburstSeriesModel.type; _this.ignoreStyleOnData = true; return _this; } SunburstSeriesModel.prototype.getInitialData = function(option, ecModel) { var root = { name: option.name, children: option.data }; completeTreeValue(root); var levelModels = this._levelModels = map$1(option.levels || [], function(levelDefine) { return new Model(levelDefine, this, ecModel); }, this); var tree = Tree.createTree(root, this, beforeLink); function beforeLink(nodeData) { nodeData.wrapMethod("getItemModel", function(model, idx) { var levelModel = levelModels[tree.getNodeByDataIndex(idx).depth]; levelModel && (model.parentModel = levelModel); return model; }); } return tree.data; }; SunburstSeriesModel.prototype.optionUpdated = function() { this.resetViewRoot(); }; SunburstSeriesModel.prototype.getDataParams = function(dataIndex) { var params = _super.prototype.getDataParams.apply(this, arguments); params.treePathInfo = wrapTreePathInfo(this.getData().tree.getNodeByDataIndex(dataIndex), this); return params; }; SunburstSeriesModel.prototype.getLevelModel = function(node) { return this._levelModels && this._levelModels[node.depth]; }; SunburstSeriesModel.prototype.getViewRoot = function() { return this._viewRoot; }; SunburstSeriesModel.prototype.resetViewRoot = function(viewRoot) { viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot; var root = this.getRawData().tree.root; if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) this._viewRoot = root; }; SunburstSeriesModel.prototype.enableAriaDecal = function() { enableAriaDecalForTree(this); }; SunburstSeriesModel.type = "series." + SERIES_TYPE_SUNBURST; SunburstSeriesModel.defaultOption = { z: 2, center: ["50%", "50%"], radius: [0, "75%"], clockwise: true, startAngle: 90, minAngle: 0, stillShowZeroSum: true, nodeClick: "rootToNode", renderLabelForZeroData: false, label: { rotate: "radial", show: true, opacity: 1, align: "center", position: "inside", distance: 5, silent: true }, itemStyle: { borderWidth: 1, borderColor: "white", borderType: "solid", shadowBlur: 0, shadowColor: "rgba(0, 0, 0, 0.2)", shadowOffsetX: 0, shadowOffsetY: 0, opacity: 1 }, emphasis: { focus: "descendant" }, blur: { itemStyle: { opacity: .2 }, label: { opacity: .1 } }, animationType: "expansion", animationDuration: 1e3, animationDurationUpdate: 500, data: [], /** * Sort order. * * Valid values: 'desc', 'asc', null, or callback function. * 'desc' and 'asc' for descend and ascendant order; * null for not sorting; * example of callback function: * function(nodeA, nodeB) { * return nodeA.getValue() - nodeB.getValue(); * } */ sort: "desc" }; return SunburstSeriesModel; }(SeriesModel); function completeTreeValue(dataNode) { var sum = 0; each$12(dataNode.children, function(child) { completeTreeValue(child); var childValue = child.value; isArray$1(childValue) && (childValue = childValue[0]); sum += childValue; }); var thisValue = dataNode.value; if (isArray$1(thisValue)) thisValue = thisValue[0]; if (thisValue == null || isNaN(thisValue)) thisValue = sum; if (thisValue < 0) thisValue = 0; isArray$1(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue; } //#endregion //#region node_modules/echarts/lib/chart/sunburst/sunburstAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ROOT_TO_NODE_ACTION = "sunburstRootToNode"; var HIGHLIGHT_ACTION = "sunburstHighlight"; var UNHIGHLIGHT_ACTION = "sunburstUnhighlight"; function installSunburstAction(registers) { registers.registerAction({ type: ROOT_TO_NODE_ACTION, update: "updateView" }, function(payload, ecModel) { ecModel.eachComponent({ mainType: "series", subType: "sunburst", query: payload }, handleRootToNode); function handleRootToNode(model, index) { var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION], model); if (targetInfo) { var originViewRoot = model.getViewRoot(); if (originViewRoot) payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? "rollUp" : "drillDown"; model.resetViewRoot(targetInfo.node); } } }); registers.registerAction({ type: HIGHLIGHT_ACTION, update: "none" }, function(payload, ecModel, api) { payload = extend({}, payload); ecModel.eachComponent({ mainType: "series", subType: "sunburst", query: payload }, handleHighlight); function handleHighlight(model) { var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model); if (targetInfo) payload.dataIndex = targetInfo.node.dataIndex; } deprecateReplaceLog("sunburstHighlight", "highlight"); api.dispatchAction(extend(payload, { type: "highlight" })); }); registers.registerAction({ type: UNHIGHLIGHT_ACTION, update: "updateView" }, function(payload, ecModel, api) { payload = extend({}, payload); deprecateReplaceLog("sunburstUnhighlight", "downplay"); api.dispatchAction(extend(payload, { type: "downplay" })); }); } //#endregion //#region node_modules/echarts/lib/chart/sunburst/SunburstView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SunburstView = function(_super) { __extends(SunburstView, _super); function SunburstView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SERIES_TYPE_SUNBURST; return _this; } SunburstView.prototype.render = function(seriesModel, ecModel, api, payload) { var self = this; this.seriesModel = seriesModel; this.api = api; this.ecModel = ecModel; var data = seriesModel.getData(); var virtualRoot = data.tree.root; var newRoot = seriesModel.getViewRoot(); var group = this.group; var renderLabelForZeroData = seriesModel.get("renderLabelForZeroData"); var newChildren = []; newRoot.eachNode(function(node) { newChildren.push(node); }); dualTravel(newChildren, this._oldChildren || []); renderRollUp(virtualRoot, newRoot); this._initEvents(); this._oldChildren = newChildren; function dualTravel(newChildren, oldChildren) { if (newChildren.length === 0 && oldChildren.length === 0) return; new DataDiffer(oldChildren, newChildren, getKey, getKey).add(processNode).update(processNode).remove(curry$1(processNode, null)).execute(); function getKey(node) { return node.getId(); } function processNode(newIdx, oldIdx) { doRenderNode(newIdx == null ? null : newChildren[newIdx], oldIdx == null ? null : oldChildren[oldIdx]); } } function doRenderNode(newNode, oldNode) { if (!renderLabelForZeroData && newNode && !newNode.getValue()) newNode = null; if (newNode !== virtualRoot && oldNode !== virtualRoot) { if (oldNode && oldNode.piece) { if (newNode) { oldNode.piece.updateData(false, newNode, seriesModel, ecModel, api); data.setItemGraphicEl(newNode.dataIndex, oldNode.piece); } else removeNode(oldNode); } else if (newNode) { var piece = new SunburstPiece(newNode, seriesModel, ecModel, api); group.add(piece); data.setItemGraphicEl(newNode.dataIndex, piece); } } } function removeNode(node) { if (!node) return; if (node.piece) { group.remove(node.piece); node.piece = null; } } function renderRollUp(virtualRoot, viewRoot) { if (viewRoot.depth > 0) { if (self.virtualPiece) self.virtualPiece.updateData(false, virtualRoot, seriesModel, ecModel, api); else { self.virtualPiece = new SunburstPiece(virtualRoot, seriesModel, ecModel, api); group.add(self.virtualPiece); } viewRoot.piece.off("click"); self.virtualPiece.on("click", function(e) { self._rootToNode(viewRoot.parentNode); }); } else if (self.virtualPiece) { group.remove(self.virtualPiece); self.virtualPiece = null; } } }; /** * @private */ SunburstView.prototype._initEvents = function() { var _this = this; this.group.off("click"); this.group.on("click", function(e) { var targetFound = false; _this.seriesModel.getViewRoot().eachNode(function(node) { if (!targetFound && node.piece && node.piece === e.target) { var nodeClick = node.getModel().get("nodeClick"); if (nodeClick === "rootToNode") _this._rootToNode(node); else if (nodeClick === "link") { var itemModel = node.getModel(); var link = itemModel.get("link"); if (link) windowOpen(link, itemModel.get("target", true) || "_blank"); } targetFound = true; } }); }); }; /** * @private */ SunburstView.prototype._rootToNode = function(node) { if (node !== this.seriesModel.getViewRoot()) this.api.dispatchAction({ type: ROOT_TO_NODE_ACTION, from: this.uid, seriesId: this.seriesModel.id, targetNode: node }); }; /** * @implement */ SunburstView.prototype.containPoint = function(point, seriesModel) { var itemLayout = seriesModel.getData().getItemLayout(0); if (itemLayout) { var dx = point[0] - itemLayout.cx; var dy = point[1] - itemLayout.cy; var radius = Math.sqrt(dx * dx + dy * dy); return radius <= itemLayout.r && radius >= itemLayout.r0; } }; SunburstView.type = SERIES_TYPE_SUNBURST; return SunburstView; }(ChartView); //#endregion //#region node_modules/echarts/lib/chart/sunburst/sunburstVisual.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var sunburstVisualStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_SUNBURST, sunburstVisual); function sunburstVisual(ecModel) { var paletteScope = {}; function pickColor(node, seriesModel, treeHeight) { if (node.depth === 0) return tokens.color.neutral50; var current = node; while (current && current.depth > 1) current = current.parentNode; var color = seriesModel.getColorFromPalette(current.name || current.dataIndex + "", paletteScope); if (node.depth > 1 && isString(color)) color = lift(color, (node.depth - 1) / (treeHeight - 1) * .5); return color; } ecModel.eachSeriesByType(SERIES_TYPE_SUNBURST, function(seriesModel) { var data = seriesModel.getData(); var tree = data.tree; tree.eachNode(function(node) { var style = node.getModel().getModel("itemStyle").getItemStyle(); if (!style.fill) style.fill = pickColor(node, seriesModel, tree.root.height); extend(data.ensureUniqueItemVisual(node.dataIndex, "style"), style); }); }); } //#endregion //#region node_modules/echarts/lib/chart/sunburst/sunburstLayout.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RADIAN = Math.PI / 180; var sunburstLayoutStageHandler = createSimpleOverallStageHandler(SERIES_TYPE_SUNBURST, sunburstLayout); function sunburstLayout(ecModel, api) { ecModel.eachSeriesByType(SERIES_TYPE_SUNBURST, function(seriesModel) { var center = seriesModel.get("center"); var radius = seriesModel.get("radius"); if (!isArray$1(radius)) radius = [0, radius]; if (!isArray$1(center)) center = [center, center]; var width = api.getWidth(); var height = api.getHeight(); var size = Math.min(width, height); var cx = parsePercent(center[0], width); var cy = parsePercent(center[1], height); var r0 = parsePercent(radius[0], size / 2); var r = parsePercent(radius[1], size / 2); var startAngle = -seriesModel.get("startAngle") * RADIAN; var minAngle = seriesModel.get("minAngle") * RADIAN; var virtualRoot = seriesModel.getData().tree.root; var treeRoot = seriesModel.getViewRoot(); var rootDepth = treeRoot.depth; var sort = seriesModel.get("sort"); if (sort != null) initChildren(treeRoot, sort); var validDataCount = 0; each$12(treeRoot.children, function(child) { !isNaN(child.getValue()) && validDataCount++; }); var sum = treeRoot.getValue(); var unitRadian = Math.PI / (sum || validDataCount) * 2; var renderRollupNode = treeRoot.depth > 0; var levels = treeRoot.height - (renderRollupNode ? -1 : 1); var rPerLevel = (r - r0) / (levels || 1); var clockwise = seriesModel.get("clockwise"); var stillShowZeroSum = seriesModel.get("stillShowZeroSum"); var dir = clockwise ? 1 : -1; /** * Render a tree * @return increased angle */ var renderNode = function(node, startAngle) { if (!node) return; var endAngle = startAngle; if (node !== virtualRoot) { var value = node.getValue(); var angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian; if (angle < minAngle) angle = minAngle; endAngle = startAngle + dir * angle; var depth = node.depth - rootDepth - (renderRollupNode ? -1 : 1); var rStart = r0 + rPerLevel * depth; var rEnd = r0 + rPerLevel * (depth + 1); var levelModel = seriesModel.getLevelModel(node); if (levelModel) { var r0_1 = levelModel.get("r0", true); var r_1 = levelModel.get("r", true); var radius_1 = levelModel.get("radius", true); if (radius_1 != null) { r0_1 = radius_1[0]; r_1 = radius_1[1]; } r0_1 != null && (rStart = parsePercent(r0_1, size / 2)); r_1 != null && (rEnd = parsePercent(r_1, size / 2)); } node.setLayout({ angle, startAngle, endAngle, clockwise, cx, cy, r0: rStart, r: rEnd }); } if (node.children && node.children.length) { var siblingAngle_1 = 0; each$12(node.children, function(node) { siblingAngle_1 += renderNode(node, startAngle + siblingAngle_1); }); } return endAngle - startAngle; }; if (renderRollupNode) { var rStart = r0; var rEnd = r0 + rPerLevel; var angle = Math.PI * 2; virtualRoot.setLayout({ angle, startAngle, endAngle: startAngle + angle, clockwise, cx, cy, r0: rStart, r: rEnd }); } renderNode(treeRoot, startAngle); }); } /** * Init node children by order and update visual */ function initChildren(node, sortOrder) { var children = node.children || []; node.children = sort(children, sortOrder); if (children.length) each$12(node.children, function(child) { initChildren(child, sortOrder); }); } /** * Sort children nodes * * @param {TreeNode[]} children children of node to be sorted * @param {string | function | null} sort sort method * See SunburstSeries.js for details. */ function sort(children, sortOrder) { if (isFunction(sortOrder)) { var sortTargets = map$1(children, function(child, idx) { var value = child.getValue(); return { params: { depth: child.depth, height: child.height, dataIndex: child.dataIndex, getValue: function() { return value; } }, index: idx }; }); sortTargets.sort(function(a, b) { return sortOrder(a.params, b.params); }); return map$1(sortTargets, function(target) { return children[target.index]; }); } else { var isAsc_1 = sortOrder === "asc"; return children.sort(function(a, b) { var diff = (a.getValue() - b.getValue()) * (isAsc_1 ? 1 : -1); return diff === 0 ? (a.dataIndex - b.dataIndex) * (isAsc_1 ? -1 : 1) : diff; }); } } //#endregion //#region node_modules/echarts/lib/chart/sunburst/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$30(registers) { registers.registerChartView(SunburstView); registers.registerSeriesModel(SunburstSeriesModel); registers.registerLayout(sunburstLayoutStageHandler); registers.registerVisual(sunburstVisualStageHandler); installSunburstAction(registers); } //#endregion //#region node_modules/echarts/lib/chart/custom/CustomSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var STYLE_VISUAL_TYPE = { color: "fill", borderColor: "stroke" }; var NON_STYLE_VISUAL_PROPS = { symbol: 1, symbolSize: 1, symbolKeepAspect: 1, legendIcon: 1, visualMeta: 1, liftZ: 1, decal: 1 }; var customInnerStore = makeInner(); var CustomSeriesModel = function(_super) { __extends(CustomSeriesModel, _super); function CustomSeriesModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CustomSeriesModel.type; return _this; } CustomSeriesModel.prototype.optionUpdated = function() { this.currentZLevel = this.get("zlevel", true); this.currentZ = this.get("z", true); }; CustomSeriesModel.prototype.getInitialData = function(option, ecModel) { return createSeriesData(null, this); }; CustomSeriesModel.prototype.getDataParams = function(dataIndex, dataType, el) { var params = _super.prototype.getDataParams.call(this, dataIndex, dataType); el && (params.info = customInnerStore(el).info); return params; }; CustomSeriesModel.type = "series.custom"; CustomSeriesModel.dependencies = [ "grid", "polar", "geo", "singleAxis", "calendar", "matrix" ]; CustomSeriesModel.defaultOption = { coordinateSystem: "cartesian2d", z: 2, legendHoverLink: true, clip: false }; return CustomSeriesModel; }(SeriesModel); //#endregion //#region node_modules/echarts/lib/coord/cartesian/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataToCoordSize$3(dataSize, dataItem) { dataItem = dataItem || [0, 0]; return map$1(["x", "y"], function(dim, dimIdx) { var axis = this.getAxis(dim); var val = dataItem[dimIdx]; var halfSize = dataSize[dimIdx] / 2; return axis.type === "category" ? calcBandWidth(axis).w : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); }, this); } function cartesianPrepareCustom(coordSys) { var rect = coordSys.master.getRect(); return { coordSys: { type: "cartesian2d", x: rect.x, y: rect.y, width: rect.width, height: rect.height }, api: { coord: function(data) { return coordSys.dataToPoint(data); }, size: bind$1(dataToCoordSize$3, coordSys) } }; } //#endregion //#region node_modules/echarts/lib/coord/geo/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataToCoordSize$2(dataSize, dataItem) { dataItem = dataItem || [0, 0]; return map$1([0, 1], function(dimIdx) { var val = dataItem[dimIdx]; var halfSize = dataSize[dimIdx] / 2; var p1 = []; var p2 = []; p1[dimIdx] = val - halfSize; p2[dimIdx] = val + halfSize; p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx]; return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]); }, this); } function geoPrepareCustom(coordSys) { var viewCoordSys = coordSys.view; var rect = viewCoordSys.getBoundingRect(); return { coordSys: { type: "geo", x: rect.x, y: rect.y, width: rect.width, height: rect.height, zoom: viewCoordSysGetZoomOption(viewCoordSys) }, api: { coord: function(data) { return coordSys.dataToPoint(data); }, size: bind$1(dataToCoordSize$2, coordSys) } }; } //#endregion //#region node_modules/echarts/lib/coord/single/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataToCoordSize$1(dataSize, dataItem) { var axis = this.getAxis(); var val = dataItem instanceof Array ? dataItem[0] : dataItem; var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2; return axis.type === "category" ? calcBandWidth(axis).w : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); } function singlePrepareCustom(coordSys) { var rect = coordSys.getRect(); return { coordSys: { type: "singleAxis", x: rect.x, y: rect.y, width: rect.width, height: rect.height }, api: { coord: function(val) { return coordSys.dataToPoint(val); }, size: bind$1(dataToCoordSize$1, coordSys) } }; } //#endregion //#region node_modules/echarts/lib/coord/polar/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function dataToCoordSize(dataSize, dataItem) { dataItem = dataItem || [0, 0]; return map$1(["Radius", "Angle"], function(dim, dimIdx) { var getterName = "get" + dim + "Axis"; var axis = this[getterName](); var val = dataItem[dimIdx]; var halfSize = dataSize[dimIdx] / 2; var result = axis.type === "category" ? calcBandWidth(axis).w : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); if (dim === "Angle") result = result * Math.PI / 180; return result; }, this); } function polarPrepareCustom(coordSys) { var radiusAxis = coordSys.getRadiusAxis(); var angleAxis = coordSys.getAngleAxis(); var radius = radiusAxis.getExtent(); radius[0] > radius[1] && radius.reverse(); return { coordSys: { type: "polar", cx: coordSys.cx, cy: coordSys.cy, r: radius[1], r0: radius[0] }, api: { coord: function(data) { var radius = radiusAxis.dataToRadius(data[0]); var angle = angleAxis.dataToAngle(data[1]); var coord = coordSys.coordToPoint([radius, angle]); coord.push(radius, angle * Math.PI / 180); return coord; }, size: bind$1(dataToCoordSize, coordSys) } }; } //#endregion //#region node_modules/echarts/lib/coord/calendar/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function calendarPrepareCustom(coordSys) { var rect = coordSys.getRect(); var rangeInfo = coordSys.getRangeInfo(); return { coordSys: { type: "calendar", x: rect.x, y: rect.y, width: rect.width, height: rect.height, cellWidth: coordSys.getCellWidth(), cellHeight: coordSys.getCellHeight(), rangeInfo: { start: rangeInfo.start, end: rangeInfo.end, weeks: rangeInfo.weeks, dayCount: rangeInfo.allDay } }, api: { coord: function(data, clamp) { return coordSys.dataToPoint(data, clamp); }, layout: function(data, clamp) { return coordSys.dataToLayout(data, clamp); } } }; } //#endregion //#region node_modules/echarts/lib/coord/matrix/prepareCustom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function matrixPrepareCustom(coordSys) { var rect = coordSys.getRect(); return { coordSys: { type: "matrix", x: rect.x, y: rect.y, width: rect.width, height: rect.height }, api: { coord: function(data, opt) { return coordSys.dataToPoint(data, opt); }, layout: function(data, opt) { return coordSys.dataToLayout(data, opt); } } }; } //#endregion //#region node_modules/echarts/lib/animation/customGraphicTransition.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var LEGACY_TRANSFORM_PROPS_MAP = { position: ["x", "y"], scale: ["scaleX", "scaleY"], origin: ["originX", "originY"] }; var LEGACY_TRANSFORM_PROPS = keys(LEGACY_TRANSFORM_PROPS_MAP); var TRANSFORM_PROPS_MAP = reduce(TRANSFORMABLE_PROPS, function(obj, key) { obj[key] = 1; return obj; }, {}); var transformPropNamesStr = TRANSFORMABLE_PROPS.join(", "); var ELEMENT_ANIMATABLE_PROPS = [ "", "style", "shape", "extra" ]; var transitionInnerStore = makeInner(); function getElementAnimationConfig(animationType, el, elOption, parentModel, dataIndex) { var animationProp = animationType + "Animation"; var config = getAnimationConfig(animationType, parentModel, dataIndex) || {}; var userDuring = transitionInnerStore(el).userDuring; if (config.duration > 0) { config.during = userDuring ? bind$1(duringCall, { el, userDuring }) : null; config.setToFinal = true; config.scope = animationType; } extend(config, elOption[animationProp]); return config; } function applyUpdateTransition(el, elOption, animatableModel, opts) { opts = opts || {}; var dataIndex = opts.dataIndex, isInit = opts.isInit, clearStyle = opts.clearStyle; var hasAnimation = animatableModel.isAnimationEnabled(); var store = transitionInnerStore(el); var styleOpt = elOption.style; store.userDuring = elOption.during; var transFromProps = {}; var propsToSet = {}; prepareTransformAllPropsFinal(el, elOption, propsToSet); if (el.type === "compound") { /** * We cannot directly clone shape for compoundPath, * because it makes the path to be an object instead of a Path instance, * and thus missing `buildPath` method. */ var paths = el.shape.paths; var optionPaths = elOption.shape.paths; for (var i = 0; i < optionPaths.length; i++) { var path = optionPaths[i]; prepareShapeOrExtraAllPropsFinal("shape", path, paths[i]); } } else { prepareShapeOrExtraAllPropsFinal("shape", elOption, propsToSet); prepareShapeOrExtraAllPropsFinal("extra", elOption, propsToSet); } if (!isInit && hasAnimation) { prepareTransformTransitionFrom(el, elOption, transFromProps); prepareShapeOrExtraTransitionFrom("shape", el, elOption, transFromProps); prepareShapeOrExtraTransitionFrom("extra", el, elOption, transFromProps); prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps); } propsToSet.style = styleOpt; applyPropsDirectly(el, propsToSet, clearStyle); applyMiscProps(el, elOption); if (hasAnimation) { if (isInit) { var enterFromProps_1 = {}; each$12(ELEMENT_ANIMATABLE_PROPS, function(propName) { var prop = propName ? elOption[propName] : elOption; if (prop && prop.enterFrom) { if (propName) enterFromProps_1[propName] = enterFromProps_1[propName] || {}; extend(propName ? enterFromProps_1[propName] : enterFromProps_1, prop.enterFrom); } }); var config = getElementAnimationConfig("enter", el, elOption, animatableModel, dataIndex); if (config.duration > 0) el.animateFrom(enterFromProps_1, config); } else applyPropsTransition(el, elOption, dataIndex || 0, animatableModel, transFromProps); } updateLeaveTo(el, elOption); styleOpt ? el.dirty() : el.markRedraw(); } function updateLeaveTo(el, elOption) { var leaveToProps = transitionInnerStore(el).leaveToProps; for (var i = 0; i < ELEMENT_ANIMATABLE_PROPS.length; i++) { var propName = ELEMENT_ANIMATABLE_PROPS[i]; var prop = propName ? elOption[propName] : elOption; if (prop && prop.leaveTo) { if (!leaveToProps) leaveToProps = transitionInnerStore(el).leaveToProps = {}; if (propName) leaveToProps[propName] = leaveToProps[propName] || {}; extend(propName ? leaveToProps[propName] : leaveToProps, prop.leaveTo); } } } function applyLeaveTransition(el, elOption, animatableModel, onRemove) { if (el) { var parent_1 = el.parent; var leaveToProps = transitionInnerStore(el).leaveToProps; if (leaveToProps) { var config = getElementAnimationConfig("update", el, elOption, animatableModel, 0); config.done = function() { parent_1 && parent_1.remove(el); onRemove && onRemove(); }; el.animateTo(leaveToProps, config); } else { parent_1 && parent_1.remove(el); onRemove && onRemove(); } } } function isTransitionAll(transition) { return transition === "all"; } function applyPropsDirectly(el, allPropsFinal, clearStyle) { var styleOpt = allPropsFinal.style; if (!el.isGroup && styleOpt) { if (clearStyle) { el.useStyle({}); var animators = el.animators; for (var i = 0; i < animators.length; i++) { var animator = animators[i]; if (animator.targetName === "style") animator.changeTarget(el.style); } } el.setStyle(styleOpt); } if (allPropsFinal) { allPropsFinal.style = null; allPropsFinal && el.attr(allPropsFinal); allPropsFinal.style = styleOpt; } } function applyPropsTransition(el, elOption, dataIndex, model, transFromProps) { if (transFromProps) { var config = getElementAnimationConfig("update", el, elOption, model, dataIndex); if (config.duration > 0) el.animateFrom(transFromProps, config); } } function applyMiscProps(el, elOption) { hasOwn(elOption, "silent") && (el.silent = elOption.silent); hasOwn(elOption, "ignore") && (el.ignore = elOption.ignore); if (el instanceof Displayable) hasOwn(elOption, "invisible") && (el.invisible = elOption.invisible); if (el instanceof Path) hasOwn(elOption, "autoBatch") && (el.autoBatch = elOption.autoBatch); } var tmpDuringScope = {}; var transitionDuringAPI = { setTransform: function(key, val) { assert(hasOwn(TRANSFORM_PROPS_MAP, key), "Only " + transformPropNamesStr + " available in `setTransform`."); tmpDuringScope.el[key] = val; return this; }, getTransform: function(key) { assert(hasOwn(TRANSFORM_PROPS_MAP, key), "Only " + transformPropNamesStr + " available in `getTransform`."); return tmpDuringScope.el[key]; }, setShape: function(key, val) { assertNotReserved(key); var el = tmpDuringScope.el; var shape = el.shape || (el.shape = {}); shape[key] = val; el.dirtyShape && el.dirtyShape(); return this; }, getShape: function(key) { assertNotReserved(key); var shape = tmpDuringScope.el.shape; if (shape) return shape[key]; }, setStyle: function(key, val) { assertNotReserved(key); var el = tmpDuringScope.el; var style = el.style; if (style) { if (eqNaN(val)) warn("style." + key + " must not be assigned with NaN."); style[key] = val; el.dirtyStyle && el.dirtyStyle(); } return this; }, getStyle: function(key) { assertNotReserved(key); var style = tmpDuringScope.el.style; if (style) return style[key]; }, setExtra: function(key, val) { assertNotReserved(key); var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {}); extra[key] = val; return this; }, getExtra: function(key) { assertNotReserved(key); var extra = tmpDuringScope.el.extra; if (extra) return extra[key]; } }; function assertNotReserved(key) { if (key === "transition" || key === "enterFrom" || key === "leaveTo") throw new Error("key must not be \"" + key + "\""); } function duringCall() { var scope = this; var el = scope.el; if (!el) return; var latestUserDuring = transitionInnerStore(el).userDuring; var scopeUserDuring = scope.userDuring; if (latestUserDuring !== scopeUserDuring) { scope.el = scope.userDuring = null; return; } tmpDuringScope.el = el; scopeUserDuring(transitionDuringAPI); } function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps) { var attrOpt = elOption[mainAttr]; if (!attrOpt) return; var elPropsInAttr = fromEl[mainAttr]; var transFromPropsInAttr; if (elPropsInAttr) { var transition = elOption.transition; var attrTransition = attrOpt.transition; if (attrTransition) { !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {}); if (isTransitionAll(attrTransition)) extend(transFromPropsInAttr, elPropsInAttr); else { var transitionKeys = normalizeToArray(attrTransition); for (var i = 0; i < transitionKeys.length; i++) { var key = transitionKeys[i]; var elVal = elPropsInAttr[key]; transFromPropsInAttr[key] = elVal; } } } else if (isTransitionAll(transition) || indexOf(transition, mainAttr) >= 0) { !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {}); var elPropsInAttrKeys = keys(elPropsInAttr); for (var i = 0; i < elPropsInAttrKeys.length; i++) { var key = elPropsInAttrKeys[i]; var elVal = elPropsInAttr[key]; if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) transFromPropsInAttr[key] = elVal; } } } } function prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) { var attrOpt = elOption[mainAttr]; if (!attrOpt) return; var allPropsInAttr = allProps[mainAttr] = {}; var keysInAttr = keys(attrOpt); for (var i = 0; i < keysInAttr.length; i++) { var key = keysInAttr[i]; allPropsInAttr[key] = cloneValue(attrOpt[key]); } } function prepareTransformTransitionFrom(el, elOption, transFromProps) { var transition = elOption.transition; var transitionKeys = isTransitionAll(transition) ? TRANSFORMABLE_PROPS : normalizeToArray(transition || []); for (var i = 0; i < transitionKeys.length; i++) { var key = transitionKeys[i]; if (key === "style" || key === "shape" || key === "extra") continue; var elVal = el[key]; checkTransformPropRefer(key, "el.transition"); transFromProps[key] = elVal; } } function prepareTransformAllPropsFinal(el, elOption, allProps) { for (var i = 0; i < LEGACY_TRANSFORM_PROPS.length; i++) { var legacyName = LEGACY_TRANSFORM_PROPS[i]; var xyName = LEGACY_TRANSFORM_PROPS_MAP[legacyName]; var legacyArr = elOption[legacyName]; if (legacyArr) { allProps[xyName[0]] = legacyArr[0]; allProps[xyName[1]] = legacyArr[1]; } } for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) { var key = TRANSFORMABLE_PROPS[i]; if (elOption[key] != null) allProps[key] = elOption[key]; } } function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps) { if (!styleOpt) return; var fromElStyle = fromEl.style; var transFromStyleProps; if (fromElStyle) { var styleTransition = styleOpt.transition; var elTransition = elOption.transition; if (styleTransition && !isTransitionAll(styleTransition)) { var transitionKeys = normalizeToArray(styleTransition); !transFromStyleProps && (transFromStyleProps = transFromProps.style = {}); for (var i = 0; i < transitionKeys.length; i++) { var key = transitionKeys[i]; var elVal = fromElStyle[key]; transFromStyleProps[key] = elVal; } } else if (fromEl.getAnimationStyleProps && (isTransitionAll(elTransition) || isTransitionAll(styleTransition) || indexOf(elTransition, "style") >= 0)) { var animationProps = fromEl.getAnimationStyleProps(); var animationStyleProps = animationProps ? animationProps.style : null; if (animationStyleProps) { !transFromStyleProps && (transFromStyleProps = transFromProps.style = {}); var styleKeys = keys(styleOpt); for (var i = 0; i < styleKeys.length; i++) { var key = styleKeys[i]; if (animationStyleProps[key]) { var elVal = fromElStyle[key]; transFromStyleProps[key] = elVal; } } } } } } function isNonStyleTransitionEnabled(optVal, elVal) { return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal; } var checkTransformPropRefer = function(key, usedIn) { if (!hasOwn(TRANSFORM_PROPS_MAP, key)) warn("Prop `" + key + "` is not a permitted in `" + usedIn + "`. Only `" + keys(TRANSFORM_PROPS_MAP).join("`, `") + "` are permitted."); }; //#endregion //#region node_modules/echarts/lib/animation/customGraphicKeyframeAnimation.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var getStateToRestore = makeInner(); var KEYFRAME_EXCLUDE_KEYS = [ "percent", "easing", "shape", "style", "extra" ]; /** * Stop previous keyframe animation and restore the attributes. * Avoid new keyframe animation starts with wrong internal state when the percent: 0 is not set. */ function stopPreviousKeyframeAnimationAndRestore(el) { el.stopAnimation("keyframe"); el.attr(getStateToRestore(el)); } function applyKeyframeAnimation(el, animationOpts, animatableModel) { if (!animatableModel.isAnimationEnabled() || !animationOpts) return; if (isArray$1(animationOpts)) { each$12(animationOpts, function(singleAnimationOpts) { applyKeyframeAnimation(el, singleAnimationOpts, animatableModel); }); return; } var keyframes = animationOpts.keyframes; var duration = animationOpts.duration; if (animatableModel && duration == null) { var config = getAnimationConfig("enter", animatableModel, 0); duration = config && config.duration; } if (!keyframes || !duration) return; var stateToRestore = getStateToRestore(el); each$12(ELEMENT_ANIMATABLE_PROPS, function(targetPropName) { if (targetPropName && !el[targetPropName]) return; var animator; var endFrameIsSet = false; keyframes.sort(function(a, b) { return a.percent - b.percent; }); each$12(keyframes, function(kf) { var animators = el.animators; var kfValues = targetPropName ? kf[targetPropName] : kf; if (kf.percent >= 1) endFrameIsSet = true; if (!kfValues) return; var propKeys = keys(kfValues); if (!targetPropName) propKeys = filter(propKeys, function(key) { return indexOf(KEYFRAME_EXCLUDE_KEYS, key) < 0; }); if (!propKeys.length) return; if (!animator) { animator = el.animate(targetPropName, animationOpts.loop, true); animator.scope = "keyframe"; } for (var i = 0; i < animators.length; i++) if (animators[i] !== animator && animators[i].targetName === animator.targetName) animators[i].stopTracks(propKeys); targetPropName && (stateToRestore[targetPropName] = stateToRestore[targetPropName] || {}); var savedTarget = targetPropName ? stateToRestore[targetPropName] : stateToRestore; each$12(propKeys, function(key) { savedTarget[key] = ((targetPropName ? el[targetPropName] : el) || {})[key]; }); animator.whenWithKeys(duration * kf.percent, kfValues, propKeys, kf.easing); }); if (!animator) return; if (!endFrameIsSet) warn("End frame with percent: 1 is missing in the keyframeAnimation.", true); animator.delay(animationOpts.delay || 0).duration(duration).start(animationOpts.easing); }); } //#endregion //#region node_modules/echarts/lib/chart/custom/CustomView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var EMPHASIS = "emphasis"; var NORMAL = "normal"; var BLUR = "blur"; var SELECT = "select"; var STATES = [ NORMAL, EMPHASIS, BLUR, SELECT ]; var PATH_ITEM_STYLE = { normal: ["itemStyle"], emphasis: [EMPHASIS, "itemStyle"], blur: [BLUR, "itemStyle"], select: [SELECT, "itemStyle"] }; var PATH_LABEL = { normal: ["label"], emphasis: [EMPHASIS, "label"], blur: [BLUR, "label"], select: [SELECT, "label"] }; var DEFAULT_TRANSITION = ["x", "y"]; var GROUP_DIFF_PREFIX = "e\0\0"; var attachedTxInfoTmp = { normal: {}, emphasis: {}, blur: {}, select: {} }; /** * FIXME: register rather than import directly, for size. * * To reduce total package size of each coordinate systems, the modules `prepareCustom` * of each coordinate systems are not required by each coordinate systems directly, but * required by the module `custom`. * * prepareInfoForCustomSeries {Function}: optional * @return {Object} {coordSys: {...}, api: { * coord: function (data, clamp) {}, // return point in global. * size: function (dataSize, dataItem) {} // return size of each axis in coordSys. * }} */ var prepareCustoms = { cartesian2d: cartesianPrepareCustom, geo: geoPrepareCustom, single: singlePrepareCustom, polar: polarPrepareCustom, calendar: calendarPrepareCustom, matrix: matrixPrepareCustom }; function isPath(el) { return el instanceof Path; } function isDisplayable(el) { return el instanceof Displayable; } function copyElement(sourceEl, targetEl) { targetEl.copyTransform(sourceEl); if (isDisplayable(targetEl) && isDisplayable(sourceEl)) { targetEl.setStyle(sourceEl.style); targetEl.z = sourceEl.z; targetEl.z2 = sourceEl.z2; targetEl.zlevel = sourceEl.zlevel; targetEl.invisible = sourceEl.invisible; targetEl.ignore = sourceEl.ignore; if (isPath(targetEl) && isPath(sourceEl)) targetEl.setShape(sourceEl.shape); } } var CustomChartView = function(_super) { __extends(CustomChartView, _super); function CustomChartView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CustomChartView.type; return _this; } CustomChartView.prototype.render = function(customSeries, ecModel, api, payload) { this._progressiveEls = null; var oldData = this._data; var data = customSeries.getData(); var group = this.group; var renderItem = makeRenderItem(customSeries, data, ecModel, api); if (!oldData) group.removeAll(); data.diff(oldData).add(function(newIdx) { createOrUpdateItem(api, null, newIdx, renderItem(newIdx, payload), customSeries, group, data); }).remove(function(oldIdx) { var el = oldData.getItemGraphicEl(oldIdx); el && applyLeaveTransition(el, customInnerStore(el).option, customSeries); }).update(function(newIdx, oldIdx) { createOrUpdateItem(api, oldData.getItemGraphicEl(oldIdx), newIdx, renderItem(newIdx, payload), customSeries, group, data); }).execute(); var clipPath = customSeries.get("clip", true) ? createClipPath(customSeries.coordinateSystem, false, customSeries) : null; if (clipPath) group.setClipPath(clipPath); else group.removeClipPath(); this._data = data; }; CustomChartView.prototype.incrementalPrepareRender = function(customSeries, ecModel, api) { this.group.removeAll(); this._data = null; }; CustomChartView.prototype.incrementalRender = function(params, customSeries, ecModel, api, payload) { var data = customSeries.getData(); var renderItem = makeRenderItem(customSeries, data, ecModel, api); var progressiveEls = this._progressiveEls = []; function setIncrementalAndHoverLayer(el) { if (!el.isGroup) { el.incremental = getIncrementalId(customSeries); el.ensureState("emphasis").hoverLayer = 2; } } for (var idx = params.start; idx < params.end; idx++) { var el = createOrUpdateItem(null, null, idx, renderItem(idx, payload), customSeries, this.group, data); if (el) { el.traverse(setIncrementalAndHoverLayer); progressiveEls.push(el); } } }; CustomChartView.prototype.eachRendered = function(cb) { traverseElements(this._progressiveEls || this.group, cb); }; CustomChartView.prototype.filterForExposedEvent = function(eventType, query, targetEl, packedEvent) { var elementName = query.element; if (elementName == null || targetEl.name === elementName) return true; while ((targetEl = targetEl.__hostTarget || targetEl.parent) && targetEl !== this.group) if (targetEl.name === elementName) return true; return false; }; CustomChartView.type = "custom"; return CustomChartView; }(ChartView); function createEl$1(elOption) { var graphicType = elOption.type; var el; if (graphicType === "path") { var shape = elOption.shape; var pathRect = shape.width != null && shape.height != null ? { x: shape.x || 0, y: shape.y || 0, width: shape.width, height: shape.height } : null; var pathData = getPathData(shape); el = makePath(pathData, null, pathRect, shape.layout || "center"); customInnerStore(el).customPathData = pathData; } else if (graphicType === "image") { el = new ZRImage({}); customInnerStore(el).customImagePath = elOption.style.image; } else if (graphicType === "text") el = new ZRText({}); else if (graphicType === "group") el = new Group$3(); else if (graphicType === "compoundPath") { var shape = elOption.shape; if (!shape || !shape.paths) { var errMsg = ""; errMsg = "shape.paths must be specified in compoundPath"; throwError(errMsg); } el = new CompoundPath({ shape: { paths: map$1(shape.paths, function(path) { if (path.type === "path") return makePath(path.shape.pathData, path, null); var Clz = getShapeClass(path.type); if (!Clz) { var errMsg = ""; errMsg = "graphic type \"" + graphicType + "\" can not be found."; throwError(errMsg); } return new Clz(); }) } }); } else { var Clz = getShapeClass(graphicType); if (!Clz) { var errMsg = ""; errMsg = "graphic type \"" + graphicType + "\" can not be found."; throwError(errMsg); } el = new Clz(); } customInnerStore(el).customGraphicType = graphicType; el.name = elOption.name; el.z2EmphasisLift = 1; el.z2SelectLift = 1; return el; } function updateElNormal(api, el, dataIndex, elOption, attachedTxInfo, seriesModel, isInit) { stopPreviousKeyframeAnimationAndRestore(el); var txCfgOpt = attachedTxInfo && attachedTxInfo.normal.cfg; if (txCfgOpt) el.setTextConfig(txCfgOpt); if (elOption && elOption.transition == null) elOption.transition = DEFAULT_TRANSITION; var styleOpt = elOption && elOption.style; if (styleOpt) { if (el.type === "text") { var textOptionStyle = styleOpt; hasOwn(textOptionStyle, "textFill") && (textOptionStyle.fill = textOptionStyle.textFill); hasOwn(textOptionStyle, "textStroke") && (textOptionStyle.stroke = textOptionStyle.textStroke); } var decalPattern = void 0; var decalObj = isPath(el) ? styleOpt.decal : null; if (api && decalObj) { decalObj.dirty = true; decalPattern = createOrUpdatePatternFromDecal(decalObj, api); } styleOpt.__decalPattern = decalPattern; } if (isDisplayable(el)) { if (styleOpt) { var decalPattern = styleOpt.__decalPattern; if (decalPattern) styleOpt.decal = decalPattern; } } applyUpdateTransition(el, elOption, seriesModel, { dataIndex, isInit, clearStyle: true }); applyKeyframeAnimation(el, elOption.keyframeAnimation, seriesModel); } function updateElOnState(state, el, elStateOpt, styleOpt, attachedTxInfo) { var elDisplayable = el.isGroup ? null : el; var txCfgOpt = attachedTxInfo && attachedTxInfo[state].cfg; if (elDisplayable) { var stateObj = elDisplayable.ensureState(state); if (styleOpt === false) { var existingEmphasisState = elDisplayable.getState(state); if (existingEmphasisState) existingEmphasisState.style = null; } else stateObj.style = styleOpt || null; if (txCfgOpt) stateObj.textConfig = txCfgOpt; setDefaultStateProxy(elDisplayable); } } function updateZ$2(el, elOption, seriesModel) { if (el.isGroup) return; var elDisplayable = el; var currentZ = seriesModel.currentZ; var currentZLevel = seriesModel.currentZLevel; elDisplayable.z = currentZ; elDisplayable.zlevel = currentZLevel; var optZ2 = elOption.z2; optZ2 != null && (elDisplayable.z2 = optZ2 || 0); for (var i = 0; i < STATES.length; i++) updateZForEachState(elDisplayable, elOption, STATES[i]); } function updateZForEachState(elDisplayable, elOption, state) { var isNormal = state === NORMAL; var elStateOpt = isNormal ? elOption : retrieveStateOption(elOption, state); var optZ2 = elStateOpt ? elStateOpt.z2 : null; var stateObj; if (optZ2 != null) { stateObj = isNormal ? elDisplayable : elDisplayable.ensureState(state); stateObj.z2 = optZ2 || 0; } } function makeRenderItem(customSeries, data, ecModel, api) { var renderItem = customSeries.get("renderItem"); if (typeof renderItem === "string") { var registeredRenderItem = getCustomSeries(renderItem); if (registeredRenderItem) renderItem = registeredRenderItem; else console.warn("Custom series renderItem '" + renderItem + "' not found.\n Call 'echarts.registerCustomSeries' to register it."); } var coordSys = customSeries.coordinateSystem; var prepareResult = {}; if (coordSys) { assert(renderItem, "series.render is required."); assert(coordSys.prepareCustoms || prepareCustoms[coordSys.type], "This coordSys does not support custom series."); prepareResult = coordSys.prepareCustoms ? coordSys.prepareCustoms(coordSys) : prepareCustoms[coordSys.type](coordSys); } var userAPI = defaults({ getWidth: api.getWidth, getHeight: api.getHeight, getZr: api.getZr, getDevicePixelRatio: api.getDevicePixelRatio, value, style, ordinalRawValue, styleEmphasis, visual, barLayout, currentSeriesIndices, font }, prepareResult.api || {}); var userParams = { context: {}, seriesId: customSeries.id, seriesName: customSeries.name, seriesIndex: customSeries.seriesIndex, coordSys: prepareResult.coordSys, dataInsideLength: data.count(), encode: wrapEncodeDef(customSeries.getData()), itemPayload: customSeries.get("itemPayload") || {} }; var currDataIndexInside; var currItemModel; var currItemStyleModels = {}; var currLabelModels = {}; var seriesItemStyleModels = {}; var seriesLabelModels = {}; for (var i = 0; i < STATES.length; i++) { var stateName = STATES[i]; seriesItemStyleModels[stateName] = customSeries.getModel(PATH_ITEM_STYLE[stateName]); seriesLabelModels[stateName] = customSeries.getModel(PATH_LABEL[stateName]); } function getItemModel(dataIndexInside) { return dataIndexInside === currDataIndexInside ? currItemModel || (currItemModel = data.getItemModel(dataIndexInside)) : data.getItemModel(dataIndexInside); } function getItemStyleModel(dataIndexInside, state) { return !data.hasItemOption ? seriesItemStyleModels[state] : dataIndexInside === currDataIndexInside ? currItemStyleModels[state] || (currItemStyleModels[state] = getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state])) : getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state]); } function getLabelModel(dataIndexInside, state) { return !data.hasItemOption ? seriesLabelModels[state] : dataIndexInside === currDataIndexInside ? currLabelModels[state] || (currLabelModels[state] = getItemModel(dataIndexInside).getModel(PATH_LABEL[state])) : getItemModel(dataIndexInside).getModel(PATH_LABEL[state]); } return function(dataIndexInside, payload) { currDataIndexInside = dataIndexInside; currItemModel = null; currItemStyleModels = {}; currLabelModels = {}; return renderItem && renderItem(defaults({ dataIndexInside, dataIndex: data.getRawIndex(dataIndexInside), actionType: payload ? payload.type : null }, userParams), userAPI); }; /** * @public * @param dim by default 0. * @param dataIndexInside by default `currDataIndexInside`. */ function value(dim, dataIndexInside) { dataIndexInside ??= currDataIndexInside; return data.getStore().get(data.getDimensionIndex(dim || 0), dataIndexInside); } /** * @public * @param dim by default 0. * @param dataIndexInside by default `currDataIndexInside`. */ function ordinalRawValue(dim, dataIndexInside) { dataIndexInside ??= currDataIndexInside; dim = dim || 0; var dimInfo = data.getDimensionInfo(dim); if (!dimInfo) { var dimIndex = data.getDimensionIndex(dim); return dimIndex >= 0 ? data.getStore().get(dimIndex, dataIndexInside) : void 0; } var val = data.get(dimInfo.name, dataIndexInside); var ordinalMeta = dimInfo && dimInfo.ordinalMeta; return ordinalMeta ? ordinalMeta.categories[val] : val; } /** * @deprecated The original intention of `api.style` is enable to set itemStyle * like other series. But it is not necessary and not easy to give a strict definition * of what it returns. And since echarts5 it needs to be make compat work. So * deprecates it since echarts5. * * By default, `visual` is applied to style (to support visualMap). * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`, * it can be implemented as: * `api.style({stroke: api.visual('color'), fill: null})`; * * [Compat]: since ec5, RectText has been separated from its hosts el. * so `api.style()` will only return the style from `itemStyle` but not handle `label` * any more. But `series.label` config is never published in doc. * We still compat it in `api.style()`. But not encourage to use it and will still not * to pulish it to doc. * @public * @param dataIndexInside by default `currDataIndexInside`. */ function style(userProps, dataIndexInside) { warnDeprecated("api.style", "Please write literal style directly instead."); dataIndexInside ??= currDataIndexInside; var style = data.getItemVisual(dataIndexInside, "style"); var visualColor = style && style.fill; var opacity = style && style.opacity; var itemStyle = getItemStyleModel(dataIndexInside, NORMAL).getItemStyle(); visualColor != null && (itemStyle.fill = visualColor); opacity != null && (itemStyle.opacity = opacity); var opt = { inheritColor: isString(visualColor) ? visualColor : tokens.color.neutral99 }; var labelModel = getLabelModel(dataIndexInside, NORMAL); var textStyle = createTextStyle$1(labelModel, null, opt, false, true); textStyle.text = labelModel.getShallow("show") ? retrieve2(customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null; var textConfig = createTextConfig(labelModel, opt, false); preFetchFromExtra(userProps, itemStyle); itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig); userProps && applyUserPropsAfter(itemStyle, userProps); itemStyle.legacy = true; return itemStyle; } /** * @deprecated The reason see `api.style()` * @public * @param dataIndexInside by default `currDataIndexInside`. */ function styleEmphasis(userProps, dataIndexInside) { warnDeprecated("api.styleEmphasis", "Please write literal style directly instead."); dataIndexInside ??= currDataIndexInside; var itemStyle = getItemStyleModel(dataIndexInside, EMPHASIS).getItemStyle(); var labelModel = getLabelModel(dataIndexInside, EMPHASIS); var textStyle = createTextStyle$1(labelModel, null, null, true, true); textStyle.text = labelModel.getShallow("show") ? retrieve3(customSeries.getFormattedLabel(dataIndexInside, EMPHASIS), customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null; var textConfig = createTextConfig(labelModel, null, true); preFetchFromExtra(userProps, itemStyle); itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig); userProps && applyUserPropsAfter(itemStyle, userProps); itemStyle.legacy = true; return itemStyle; } function applyUserPropsAfter(itemStyle, extra) { for (var key in extra) if (hasOwn(extra, key)) itemStyle[key] = extra[key]; } function preFetchFromExtra(extra, itemStyle) { if (extra) { extra.textFill && (itemStyle.textFill = extra.textFill); extra.textPosition && (itemStyle.textPosition = extra.textPosition); } } /** * @public * @param dataIndexInside by default `currDataIndexInside`. */ function visual(visualType, dataIndexInside) { dataIndexInside ??= currDataIndexInside; if (hasOwn(STYLE_VISUAL_TYPE, visualType)) { var style_1 = data.getItemVisual(dataIndexInside, "style"); return style_1 ? style_1[STYLE_VISUAL_TYPE[visualType]] : null; } if (hasOwn(NON_STYLE_VISUAL_PROPS, visualType)) return data.getItemVisual(dataIndexInside, visualType); } /** * @public * @return If not support, return undefined. */ function barLayout(opt) { if (coordSys.type === "cartesian2d") return computeBarLayoutForCustomSeries(defaults({ axis: coordSys.getBaseAxis() }, opt)); } /** * @public */ function currentSeriesIndices() { return ecModel.getCurrentSeriesIndices(); } /** * @public * @return font string */ function font(opt) { return getFont(opt, ecModel); } } function wrapEncodeDef(data) { var encodeDef = {}; each$12(data.dimensions, function(dimName) { var dimInfo = data.getDimensionInfo(dimName); if (!dimInfo.isExtraCoord) { var coordDim = dimInfo.coordDim; var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || []; dataDims[dimInfo.coordDimIndex] = data.getDimensionIndex(dimName); } }); return encodeDef; } function createOrUpdateItem(api, existsEl, dataIndex, elOption, seriesModel, group, data) { if (!elOption) { group.remove(existsEl); return; } var el = doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group); el && data.setItemGraphicEl(dataIndex, el); el && toggleHoverEmphasis(el, elOption.focus, elOption.blurScope, elOption.emphasisDisabled); return el; } function doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group) { assert(elOption, "should not have an null/undefined element setting"); var toBeReplacedIdx = -1; var oldEl = existsEl; if (existsEl && doesElNeedRecreate(existsEl, elOption, seriesModel)) { toBeReplacedIdx = indexOf(group.childrenRef(), existsEl); existsEl = null; } var isInit = !existsEl; var el = existsEl; if (!el) { el = createEl$1(elOption); if (oldEl) copyElement(oldEl, el); } else el.clearStates(); if (elOption.morph === false) el.disableMorphing = true; else if (el.disableMorphing) el.disableMorphing = false; if (elOption.tooltipDisabled) el.tooltipDisabled = true; attachedTxInfoTmp.normal.cfg = attachedTxInfoTmp.normal.conOpt = attachedTxInfoTmp.emphasis.cfg = attachedTxInfoTmp.emphasis.conOpt = attachedTxInfoTmp.blur.cfg = attachedTxInfoTmp.blur.conOpt = attachedTxInfoTmp.select.cfg = attachedTxInfoTmp.select.conOpt = null; attachedTxInfoTmp.isLegacy = false; doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfoTmp); doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit); updateElNormal(api, el, dataIndex, elOption, attachedTxInfoTmp, seriesModel, isInit); hasOwn(elOption, "info") && (customInnerStore(el).info = elOption.info); for (var i = 0; i < STATES.length; i++) { var stateName = STATES[i]; if (stateName !== NORMAL) { var otherStateOpt = retrieveStateOption(elOption, stateName); var otherStyleOpt = retrieveStyleOptionOnState(elOption, otherStateOpt, stateName); updateElOnState(stateName, el, otherStateOpt, otherStyleOpt, attachedTxInfoTmp); } } updateZ$2(el, elOption, seriesModel); if (elOption.type === "group") mergeChildren(api, el, dataIndex, elOption, seriesModel); if (toBeReplacedIdx >= 0) group.replaceAt(el, toBeReplacedIdx); else group.add(el); return el; } function doesElNeedRecreate(el, elOption, seriesModel) { var elInner = customInnerStore(el); var elOptionType = elOption.type; var elOptionShape = elOption.shape; var elOptionStyle = elOption.style; return seriesModel.isUniversalTransitionEnabled() || elOptionType != null && elOptionType !== elInner.customGraphicType || elOptionType === "path" && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== elInner.customPathData || elOptionType === "image" && hasOwn(elOptionStyle, "image") && elOptionStyle.image !== elInner.customImagePath; } function doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit) { var clipPathOpt = elOption.clipPath; if (clipPathOpt === false) { if (el && el.getClipPath()) el.removeClipPath(); } else if (clipPathOpt) { var clipPath = el.getClipPath(); if (clipPath && doesElNeedRecreate(clipPath, clipPathOpt, seriesModel)) clipPath = null; if (!clipPath) { clipPath = createEl$1(clipPathOpt); assert(isPath(clipPath), "Only any type of `path` can be used in `clipPath`, rather than " + clipPath.type + "."); el.setClipPath(clipPath); } updateElNormal(null, clipPath, dataIndex, clipPathOpt, null, seriesModel, isInit); } } function doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfo) { if (el.isGroup || el.type === "compoundPath") return; processTxInfo(elOption, null, attachedTxInfo); processTxInfo(elOption, EMPHASIS, attachedTxInfo); var txConOptNormal = attachedTxInfo.normal.conOpt; var txConOptEmphasis = attachedTxInfo.emphasis.conOpt; var txConOptBlur = attachedTxInfo.blur.conOpt; var txConOptSelect = attachedTxInfo.select.conOpt; if (txConOptNormal != null || txConOptEmphasis != null || txConOptSelect != null || txConOptBlur != null) { var textContent = el.getTextContent(); if (txConOptNormal === false) textContent && el.removeTextContent(); else { txConOptNormal = attachedTxInfo.normal.conOpt = txConOptNormal || { type: "text" }; if (!textContent) { textContent = createEl$1(txConOptNormal); el.setTextContent(textContent); } else textContent.clearStates(); updateElNormal(null, textContent, dataIndex, txConOptNormal, null, seriesModel, isInit); var txConStlOptNormal = txConOptNormal && txConOptNormal.style; for (var i = 0; i < STATES.length; i++) { var stateName = STATES[i]; if (stateName !== NORMAL) { var txConOptOtherState = attachedTxInfo[stateName].conOpt; updateElOnState(stateName, textContent, txConOptOtherState, retrieveStyleOptionOnState(txConOptNormal, txConOptOtherState, stateName), null); } } txConStlOptNormal ? textContent.dirty() : textContent.markRedraw(); } } } function processTxInfo(elOption, state, attachedTxInfo) { var stateOpt = !state ? elOption : retrieveStateOption(elOption, state); var styleOpt = !state ? elOption.style : retrieveStyleOptionOnState(elOption, stateOpt, EMPHASIS); var elType = elOption.type; var txCfg = stateOpt ? stateOpt.textConfig : null; var txConOptNormal = elOption.textContent; var txConOpt = !txConOptNormal ? null : !state ? txConOptNormal : retrieveStateOption(txConOptNormal, state); if (styleOpt && (attachedTxInfo.isLegacy || isEC4CompatibleStyle(styleOpt, elType, !!txCfg, !!txConOpt))) { attachedTxInfo.isLegacy = true; var convertResult = convertFromEC4CompatibleStyle(styleOpt, elType, !state); if (!txCfg && convertResult.textConfig) txCfg = convertResult.textConfig; if (!txConOpt && convertResult.textContent) txConOpt = convertResult.textContent; } if (!state && txConOpt) { var txConOptNormal_1 = txConOpt; !txConOptNormal_1.type && (txConOptNormal_1.type = "text"); assert(txConOptNormal_1.type === "text", "textContent.type must be \"text\""); } var info = !state ? attachedTxInfo.normal : attachedTxInfo[state]; info.cfg = txCfg; info.conOpt = txConOpt; } function retrieveStateOption(elOption, state) { return !state ? elOption : elOption ? elOption[state] : null; } function retrieveStyleOptionOnState(stateOptionNormal, stateOption, state) { var style = stateOption && stateOption.style; if (style == null && state === EMPHASIS && stateOptionNormal) style = stateOptionNormal.styleEmphasis; return style; } function mergeChildren(api, el, dataIndex, elOption, seriesModel) { var newChildren = elOption.children; var newLen = newChildren ? newChildren.length : 0; var mergeChildren = elOption.$mergeChildren; var byName = mergeChildren === "byName" || elOption.diffChildrenByName; var notMerge = mergeChildren === false; if (!newLen && !byName && !notMerge) return; if (byName) { diffGroupChildren({ api, oldChildren: el.children() || [], newChildren: newChildren || [], dataIndex, seriesModel, group: el }); return; } notMerge && el.removeAll(); var index = 0; for (; index < newLen; index++) { var newChild = newChildren[index]; var oldChild = el.childAt(index); if (newChild) { if (newChild.ignore == null) newChild.ignore = false; doCreateOrUpdateEl(api, oldChild, dataIndex, newChild, seriesModel, el); } else { assert(oldChild, "renderItem should not return a group containing elements as null/undefined/{} if they do not exist before."); oldChild.ignore = true; } } for (var i = el.childCount() - 1; i >= index; i--) removeChildFromGroup(el, el.childAt(i), seriesModel); } function removeChildFromGroup(group, child, seriesModel) { child && applyLeaveTransition(child, customInnerStore(group).option, seriesModel); } function diffGroupChildren(context) { new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).execute(); } function getKey(item, idx) { var name = item && item.name; return name != null ? name : GROUP_DIFF_PREFIX + idx; } function processAddUpdate(newIndex, oldIndex) { var context = this.context; var childOption = newIndex != null ? context.newChildren[newIndex] : null; var child = oldIndex != null ? context.oldChildren[oldIndex] : null; doCreateOrUpdateEl(context.api, child, context.dataIndex, childOption, context.seriesModel, context.group); } function processRemove(oldIndex) { var context = this.context; var child = context.oldChildren[oldIndex]; child && applyLeaveTransition(child, customInnerStore(child).option, context.seriesModel); } /** * @return SVG Path data. */ function getPathData(shape) { return shape && (shape.pathData || shape.d); } function hasOwnPathData(shape) { return shape && (hasOwn(shape, "pathData") || hasOwn(shape, "d")); } //#endregion //#region node_modules/echarts/lib/chart/custom/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$29(registers) { registers.registerChartView(CustomChartView); registers.registerSeriesModel(CustomSeriesModel); } //#endregion //#region node_modules/echarts/lib/component/axisPointer/BaseAxisPointer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$10 = makeInner(); var clone$1 = clone$4; var bind = bind$1; /** * Base axis pointer class in 2D. */ var BaseAxisPointer = function() { function BaseAxisPointer() { this._dragging = false; /** * In px, arbitrary value. Do not set too small, * no animation is ok for most cases. */ this.animationThreshold = 15; } /** * @implement */ BaseAxisPointer.prototype.render = function(axisModel, axisPointerModel, api, forceRender) { var value = axisPointerModel.get("value"); var status = axisPointerModel.get("status"); this._axisModel = axisModel; this._axisPointerModel = axisPointerModel; this._api = api; if (!forceRender && this._lastValue === value && this._lastStatus === status) return; this._lastValue = value; this._lastStatus = status; var group = this._group; var handle = this._handle; if (!status || status === "hide") { group && group.hide(); handle && handle.hide(); return; } group && group.show(); handle && handle.show(); var elOption = {}; this.makeElOption(elOption, value, axisModel, axisPointerModel, api); var graphicKey = elOption.graphicKey; if (graphicKey !== this._lastGraphicKey) this.clear(api); this._lastGraphicKey = graphicKey; var moveAnimation = this._moveAnimation = this.determineAnimation(axisModel, axisPointerModel); if (!group) { group = this._group = new Group$3(); this.createPointerEl(group, elOption, axisModel, axisPointerModel); this.createLabelEl(group, elOption, axisModel, axisPointerModel); api.getZr().add(group); } else { var doUpdateProps = curry$1(updateProps, axisPointerModel, moveAnimation); this.updatePointerEl(group, elOption, doUpdateProps); this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel); } updateMandatoryProps(group, axisPointerModel, true); this._renderHandle(value); }; /** * @implement */ BaseAxisPointer.prototype.remove = function(api) { this.clear(api); }; /** * @implement */ BaseAxisPointer.prototype.dispose = function(api) { this.clear(api); }; /** * @protected */ BaseAxisPointer.prototype.determineAnimation = function(axisModel, axisPointerModel) { var animation = axisPointerModel.get("animation"); var axis = axisModel.axis; var isCategoryAxis = axis.type === "category"; var useSnap = axisPointerModel.get("snap"); if (!useSnap && !isCategoryAxis) return false; if (animation === "auto" || animation == null) { var animationThreshold = this.animationThreshold; if (isCategoryAxis && calcBandWidth(axis).w > animationThreshold) return true; if (useSnap) { var seriesDataCount = getAxisInfo$1(axisModel).seriesDataCount; var axisExtent = axis.getExtent(); return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold; } return false; } return animation === true; }; /** * add {pointer, label, graphicKey} to elOption * @protected */ BaseAxisPointer.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) {}; /** * @protected */ BaseAxisPointer.prototype.createPointerEl = function(group, elOption, axisModel, axisPointerModel) { var pointerOption = elOption.pointer; if (pointerOption) { var pointerEl = inner$10(group).pointerEl = new graphic_exports$1[pointerOption.type](clone$1(elOption.pointer)); group.add(pointerEl); } }; /** * @protected */ BaseAxisPointer.prototype.createLabelEl = function(group, elOption, axisModel, axisPointerModel) { if (elOption.label) { var labelEl = inner$10(group).labelEl = new ZRText(clone$1(elOption.label)); group.add(labelEl); updateLabelShowHide(labelEl, axisPointerModel); } }; /** * @protected */ BaseAxisPointer.prototype.updatePointerEl = function(group, elOption, updateProps) { var pointerEl = inner$10(group).pointerEl; if (pointerEl && elOption.pointer) { pointerEl.setStyle(elOption.pointer.style); updateProps(pointerEl, { shape: elOption.pointer.shape }); } }; /** * @protected */ BaseAxisPointer.prototype.updateLabelEl = function(group, elOption, updateProps, axisPointerModel) { var labelEl = inner$10(group).labelEl; if (labelEl) { labelEl.setStyle(elOption.label.style); updateProps(labelEl, { x: elOption.label.x, y: elOption.label.y }); updateLabelShowHide(labelEl, axisPointerModel); } }; /** * @private */ BaseAxisPointer.prototype._renderHandle = function(value) { if (this._dragging || !this.updateHandleTransform) return; var axisPointerModel = this._axisPointerModel; var zr = this._api.getZr(); var handle = this._handle; var handleModel = axisPointerModel.getModel("handle"); var status = axisPointerModel.get("status"); if (!handleModel.get("show") || !status || status === "hide") { handle && zr.remove(handle); this._handle = null; return; } var isInit; if (!this._handle) { isInit = true; handle = this._handle = createIcon(handleModel.get("icon"), { cursor: "move", draggable: true, onmousemove: function(e) { stop(e.event); }, onmousedown: bind(this._onHandleDragMove, this, 0, 0), drift: bind(this._onHandleDragMove, this), ondragend: bind(this._onHandleDragEnd, this) }); zr.add(handle); } updateMandatoryProps(handle, axisPointerModel, false); handle.setStyle(handleModel.getItemStyle(null, [ "color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY" ])); var handleSize = handleModel.get("size"); if (!isArray$1(handleSize)) handleSize = [handleSize, handleSize]; handle.scaleX = handleSize[0] / 2; handle.scaleY = handleSize[1] / 2; createOrUpdate(this, "_doDispatchAxisPointer", handleModel.get("throttle") || 0, "fixRate"); this._moveHandleToValue(value, isInit); }; BaseAxisPointer.prototype._moveHandleToValue = function(value, isInit) { updateProps(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel))); }; BaseAxisPointer.prototype._onHandleDragMove = function(dx, dy) { var handle = this._handle; if (!handle) return; this._dragging = true; var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel); this._payloadInfo = trans; handle.stopAnimation(); handle.attr(getHandleTransProps(trans)); inner$10(handle).lastProp = null; this._doDispatchAxisPointer(); }; /** * Throttled method. */ BaseAxisPointer.prototype._doDispatchAxisPointer = function() { if (!this._handle) return; var payloadInfo = this._payloadInfo; var axisModel = this._axisModel; this._api.dispatchAction({ type: "updateAxisPointer", x: payloadInfo.cursorPoint[0], y: payloadInfo.cursorPoint[1], tooltipOption: payloadInfo.tooltipOption, axesInfo: [{ axisDim: axisModel.axis.dim, axisIndex: axisModel.componentIndex }] }); }; BaseAxisPointer.prototype._onHandleDragEnd = function() { this._dragging = false; if (!this._handle) return; var value = this._axisPointerModel.get("value"); this._moveHandleToValue(value); this._api.dispatchAction({ type: "hideTip" }); }; /** * @private */ BaseAxisPointer.prototype.clear = function(api) { this._lastValue = null; this._lastStatus = null; var zr = api.getZr(); var group = this._group; var handle = this._handle; if (zr && group) { this._lastGraphicKey = null; group && zr.remove(group); handle && zr.remove(handle); this._group = null; this._handle = null; this._payloadInfo = null; } clear$1(this, "_doDispatchAxisPointer"); }; /** * @protected */ BaseAxisPointer.prototype.doClear = function() {}; BaseAxisPointer.prototype.buildLabel = function(xy, wh, xDimIndex) { xDimIndex = xDimIndex || 0; return { x: xy[xDimIndex], y: xy[1 - xDimIndex], width: wh[xDimIndex], height: wh[1 - xDimIndex] }; }; return BaseAxisPointer; }(); function updateProps(animationModel, moveAnimation, el, props) { if (!propsEqual(inner$10(el).lastProp, props)) { inner$10(el).lastProp = props; moveAnimation ? updateProps$1(el, props, animationModel) : (el.stopAnimation(), el.attr(props)); } } function propsEqual(lastProps, newProps) { if (isObject$3(lastProps) && isObject$3(newProps)) { var equals_1 = true; each$12(newProps, function(item, key) { equals_1 = equals_1 && propsEqual(lastProps[key], item); }); return !!equals_1; } else return lastProps === newProps; } function updateLabelShowHide(labelEl, axisPointerModel) { labelEl[axisPointerModel.get(["label", "show"]) ? "show" : "hide"](); } function getHandleTransProps(trans) { return { x: trans.x || 0, y: trans.y || 0, rotation: trans.rotation || 0 }; } function updateMandatoryProps(group, axisPointerModel, silent) { var z = axisPointerModel.get("z"); var zlevel = axisPointerModel.get("zlevel"); group && group.traverse(function(el) { if (el.type !== "group") { z != null && (el.z = z); zlevel != null && (el.zlevel = zlevel); el.silent = silent; } }); } //#endregion //#region node_modules/echarts/lib/component/axisPointer/viewHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function buildElStyle(axisPointerModel) { var axisPointerType = axisPointerModel.get("type"); var styleModel = axisPointerModel.getModel(axisPointerType + "Style"); var style; if (axisPointerType === "line") { style = styleModel.getLineStyle(); style.fill = null; } else if (axisPointerType === "shadow") { style = styleModel.getAreaStyle(); style.stroke = null; } return style; } /** * @param {Function} labelPos {align, verticalAlign, position} */ function buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) { var text = getValueLabel(axisPointerModel.get("value"), axisModel.axis, axisModel.ecModel, axisPointerModel.get("seriesDataIndices"), { precision: axisPointerModel.get(["label", "precision"]), formatter: axisPointerModel.get(["label", "formatter"]) }); var labelModel = axisPointerModel.getModel("label"); var paddings = normalizeCssArray(labelModel.get("padding") || 0); var font = labelModel.getFont(); var textRect = getBoundingRect(text, font); var position = labelPos.position; var width = textRect.width + paddings[1] + paddings[3]; var height = textRect.height + paddings[0] + paddings[2]; var align = labelPos.align; align === "right" && (position[0] -= width); align === "center" && (position[0] -= width / 2); var verticalAlign = labelPos.verticalAlign; verticalAlign === "bottom" && (position[1] -= height); verticalAlign === "middle" && (position[1] -= height / 2); confineInContainer(position, width, height, api); var bgColor = labelModel.get("backgroundColor"); if (!bgColor || bgColor === "auto") bgColor = axisModel.get([ "axisLine", "lineStyle", "color" ]); elOption.label = { x: position[0], y: position[1], style: createTextStyle$1(labelModel, { text, font, fill: labelModel.getTextColor(), padding: paddings, backgroundColor: bgColor }), z2: 10 }; } function confineInContainer(position, width, height, api) { var viewWidth = api.getWidth(); var viewHeight = api.getHeight(); position[0] = Math.min(position[0] + width, viewWidth) - width; position[1] = Math.min(position[1] + height, viewHeight) - height; position[0] = Math.max(position[0], 0); position[1] = Math.max(position[1], 0); } function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) { value = axis.scale.parse(value); var text = axis.scale.getLabel({ value }, { precision: opt.precision }); var formatter = opt.formatter; if (formatter) { var params_1 = { value: getAxisRawValue(axis, { value }), axisDimension: axis.dim, axisIndex: axis.index, seriesData: [] }; each$12(seriesDataIndices, function(idxItem) { var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); var dataIndex = idxItem.dataIndexInside; var dataParams = series && series.getDataParams(dataIndex); dataParams && params_1.seriesData.push(dataParams); }); if (isString(formatter)) text = formatter.replace("{value}", text); else if (isFunction(formatter)) text = formatter(params_1); } return text; } function getTransformedPosition(axis, value, layoutInfo) { var transform = create$1(); rotate(transform, transform, layoutInfo.rotation); translate(transform, transform, layoutInfo.position); return applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform); } function buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) { var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection); layoutInfo.labelMargin = axisPointerModel.get(["label", "margin"]); buildLabelElOption(elOption, axisModel, axisPointerModel, api, { position: getTransformedPosition(axisModel.axis, value, layoutInfo), align: textLayout.textAlign, verticalAlign: textLayout.textVerticalAlign }); } function makeLineShape(p1, p2, xDimIndex) { xDimIndex = xDimIndex || 0; return { x1: p1[xDimIndex], y1: p1[1 - xDimIndex], x2: p2[xDimIndex], y2: p2[1 - xDimIndex] }; } function makeRectShape(xy, wh, xDimIndex) { xDimIndex = xDimIndex || 0; return { x: xy[xDimIndex], y: xy[1 - xDimIndex], width: wh[xDimIndex], height: wh[1 - xDimIndex] }; } function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) { return { cx, cy, r0, r, startAngle, endAngle, clockwise: true }; } function calcAxisPointerShadowBandWidth(axis, seriesDataIndices, ecModel) { return calcBandWidth(axis, { fromStat: { sers: map$1(seriesDataIndices, function(item) { return ecModel.getSeriesByIndex(item.seriesIndex); }) }, min: 1 }).w; } /** * Return a [min, max] in pixel clampped by `axisExtent`. */ function calcAxisPointerShadowEnds(val, axisExtent, bandWidth) { return [mathMax$9(mathMin$9(axisExtent[0], axisExtent[1]), val - bandWidth / 2), mathMin$9(val + bandWidth / 2, mathMax$9(axisExtent[0], axisExtent[1]))]; } //#endregion //#region node_modules/echarts/lib/component/axisPointer/CartesianAxisPointer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CartesianAxisPointer = function(_super) { __extends(CartesianAxisPointer, _super); function CartesianAxisPointer() { return _super !== null && _super.apply(this, arguments) || this; } /** * @override */ CartesianAxisPointer.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) { var axis = axisModel.axis; var grid = axis.grid; var axisPointerType = axisPointerModel.get("type"); var thisExtent = axis.getGlobalExtent(); var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true)); if (axisPointerType && axisPointerType !== "none") { var elStyle = buildElStyle(axisPointerModel); var pointerOption = pointerShapeBuilder$2[axisPointerType](axis, pixelValue, thisExtent, otherExtent, axisPointerModel.get("seriesDataIndices"), axisPointerModel.ecModel); pointerOption.style = elStyle; elOption.graphicKey = pointerOption.type; elOption.pointer = pointerOption; } buildCartesianSingleLabelElOption(value, elOption, layout$1(grid.getRect(), axisModel), axisModel, axisPointerModel, api); }; /** * @override */ CartesianAxisPointer.prototype.getHandleTransform = function(value, axisModel, axisPointerModel) { var layoutInfo = layout$1(axisModel.axis.grid.getRect(), axisModel, { labelInside: false }); layoutInfo.labelMargin = axisPointerModel.get(["handle", "margin"]); var pos = getTransformedPosition(axisModel.axis, value, layoutInfo); return { x: pos[0], y: pos[1], rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) }; }; /** * @override */ CartesianAxisPointer.prototype.updateHandleTransform = function(transform, delta, axisModel, axisPointerModel) { var axis = axisModel.axis; var grid = axis.grid; var axisExtent = axis.getGlobalExtent(true); var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); var dimIndex = axis.dim === "x" ? 0 : 1; var currPosition = [transform.x, transform.y]; currPosition[dimIndex] += delta[dimIndex]; currPosition[dimIndex] = mathMin$9(axisExtent[1], currPosition[dimIndex]); currPosition[dimIndex] = mathMax$9(axisExtent[0], currPosition[dimIndex]); var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; var cursorPoint = [cursorOtherValue, cursorOtherValue]; cursorPoint[dimIndex] = currPosition[dimIndex]; return { x: currPosition[0], y: currPosition[1], rotation: transform.rotation, cursorPoint, tooltipOption: [{ verticalAlign: "middle" }, { align: "center" }][dimIndex] }; }; return CartesianAxisPointer; }(BaseAxisPointer); function getCartesian(grid, axis) { var opt = {}; opt[axis.dim + "AxisIndex"] = axis.index; return grid.getCartesian(opt); } var pointerShapeBuilder$2 = { line: function(axis, pixelValue, thisExtent, otherExtent) { return { type: "Line", subPixelOptimize: true, shape: makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis)) }; }, shadow: function(axis, pixelValue, thisExtent, otherExtent, seriesDataIndices, ecModel) { var bandWidth = calcAxisPointerShadowBandWidth(axis, seriesDataIndices, ecModel); var otherSpan = otherExtent[1] - otherExtent[0]; var _a = calcAxisPointerShadowEnds(pixelValue, thisExtent, bandWidth), min = _a[0], max = _a[1]; return { type: "Rect", shape: makeRectShape([min, otherExtent[0]], [max - min, otherSpan], getAxisDimIndex(axis)) }; } }; function getAxisDimIndex(axis) { return axis.dim === "x" ? 0 : 1; } //#endregion //#region node_modules/echarts/lib/component/axisPointer/AxisPointerModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var AxisPointerModel = function(_super) { __extends(AxisPointerModel, _super); function AxisPointerModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = AxisPointerModel.type; return _this; } AxisPointerModel.type = "axisPointer"; AxisPointerModel.defaultOption = { show: "auto", z: 50, type: "line", snap: false, triggerTooltip: true, triggerEmphasis: true, value: null, status: null, link: [], animation: null, animationDurationUpdate: 200, lineStyle: { color: tokens.color.border, width: 1, type: "dashed" }, shadowStyle: { color: tokens.color.shadowTint }, label: { show: true, formatter: null, precision: "auto", margin: 3, color: tokens.color.neutral00, padding: [ 5, 7, 5, 7 ], backgroundColor: tokens.color.accent60, borderColor: null, borderWidth: 0, borderRadius: 3 }, handle: { show: false, icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z", size: 45, margin: 50, color: tokens.color.accent40, throttle: 40 } }; return AxisPointerModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/axisPointer/globalListener.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$9 = makeInner(); var each$7 = each$12; function register(key, api, handler) { if (env.node) return; var zr = api.getZr(); inner$9(zr).records || (inner$9(zr).records = {}); initGlobalListeners(zr, api); var record = inner$9(zr).records[key] || (inner$9(zr).records[key] = {}); record.handler = handler; } function initGlobalListeners(zr, api) { if (inner$9(zr).initialized) return; inner$9(zr).initialized = true; useHandler("click", curry$1(doEnter, "click")); useHandler("mousemove", curry$1(doEnter, "mousemove")); useHandler("mousewheel", curry$1(doEnter, "mousewheel")); useHandler("globalout", onLeave); function useHandler(eventType, cb) { zr.on(eventType, function(e) { var dis = makeDispatchAction$1(api); each$7(inner$9(zr).records, function(record) { record && cb(record, e, dis.dispatchAction); }); dispatchTooltipFinally(dis.pendings, api); }); } } function dispatchTooltipFinally(pendings, api) { var showLen = pendings.showTip.length; var hideLen = pendings.hideTip.length; var actuallyPayload; if (showLen) actuallyPayload = pendings.showTip[showLen - 1]; else if (hideLen) actuallyPayload = pendings.hideTip[hideLen - 1]; if (actuallyPayload) { actuallyPayload.dispatchAction = null; api.dispatchAction(actuallyPayload); } } function onLeave(record, e, dispatchAction) { record.handler("leave", null, dispatchAction); } function doEnter(currTrigger, record, e, dispatchAction) { record.handler(currTrigger, e, dispatchAction); } function makeDispatchAction$1(api) { var pendings = { showTip: [], hideTip: [] }; var dispatchAction = function(payload) { var pendingList = pendings[payload.type]; if (pendingList) pendingList.push(payload); else { payload.dispatchAction = dispatchAction; api.dispatchAction(payload); } }; return { dispatchAction, pendings }; } function unregister(key, api) { if (env.node) return; var zr = api.getZr(); if ((inner$9(zr).records || {})[key]) inner$9(zr).records[key] = null; } //#endregion //#region node_modules/echarts/lib/component/axisPointer/AxisPointerView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var AxisPointerView = function(_super) { __extends(AxisPointerView, _super); function AxisPointerView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = AxisPointerView.type; return _this; } AxisPointerView.prototype.render = function(globalAxisPointerModel, ecModel, api) { var globalTooltipModel = ecModel.getComponent("tooltip"); var triggerOn = globalAxisPointerModel.get("triggerOn") || globalTooltipModel && globalTooltipModel.get("triggerOn") || "mousemove|click|mousewheel"; register("axisPointer", api, function(currTrigger, e, dispatchAction) { if (triggerOn !== "none" && (currTrigger === "leave" || triggerOn.indexOf(currTrigger) >= 0)) dispatchAction({ type: "updateAxisPointer", currTrigger, x: e && e.offsetX, y: e && e.offsetY }); }); }; AxisPointerView.prototype.remove = function(ecModel, api) { unregister("axisPointer", api); }; AxisPointerView.prototype.dispose = function(ecModel, api) { unregister("axisPointer", api); }; AxisPointerView.type = "axisPointer"; return AxisPointerView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/axisPointer/findPointFromSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @param finder contains {seriesIndex, dataIndex, dataIndexInside} * @param ecModel * @return {point: [x, y], el: ...} point Will not be null. */ function findPointFromSeries(finder, ecModel) { var point = []; var seriesIndex = finder.seriesIndex; var seriesModel; if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) return { point: [] }; var data = seriesModel.getData(); var dataIndex = queryDataIndex(data, finder); if (dataIndex == null || dataIndex < 0 || isArray$1(dataIndex)) return { point: [] }; var el = data.getItemGraphicEl(dataIndex); var coordSys = seriesModel.coordinateSystem; if (seriesModel.getTooltipPosition) point = seriesModel.getTooltipPosition(dataIndex) || []; else if (coordSys && coordSys.dataToPoint) { if (finder.isStacked) { var baseAxis = coordSys.getBaseAxis(); var valueAxisDim = coordSys.getOtherAxis(baseAxis).dim; var baseAxisDim = baseAxis.dim; var baseDataOffset = valueAxisDim === "x" || valueAxisDim === "radius" ? 1 : 0; var baseDim = data.mapDimension(baseAxisDim); var stackedData = []; stackedData[baseDataOffset] = data.get(baseDim, dataIndex); stackedData[1 - baseDataOffset] = data.get(data.getCalculationInfo("stackResultDimension"), dataIndex); point = coordSys.dataToPoint(stackedData) || []; } else point = coordSys.dataToPoint(data.getValues(map$1(coordSys.dimensions, function(dim) { return data.mapDimension(dim); }), dataIndex)) || []; } else if (el) { var rect = el.getBoundingRect().clone(); rect.applyTransform(el.transform); point = [rect.x + rect.width / 2, rect.y + rect.height / 2]; } return { point, el }; } //#endregion //#region node_modules/echarts/lib/component/axisPointer/axisTrigger.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$8 = makeInner(); /** * Basic logic: check all axis, if they do not demand show/highlight, * then hide/downplay them. * * @return content of event obj for echarts.connect. */ function axisTrigger(payload, ecModel, api) { var currTrigger = payload.currTrigger; var point = [payload.x, payload.y]; var finder = payload; var dispatchAction = payload.dispatchAction || bind$1(api.dispatchAction, api); var coordSysAxesInfo = ecModel.getComponent("axisPointer").coordSysAxesInfo; if (!coordSysAxesInfo) return; if (illegalPoint(point)) point = findPointFromSeries({ seriesIndex: finder.seriesIndex, dataIndex: finder.dataIndex }, ecModel).point; var isIllegalPoint = illegalPoint(point); var inputAxesInfo = finder.axesInfo; var axesInfo = coordSysAxesInfo.axesInfo; var shouldHide = currTrigger === "leave" || illegalPoint(point); var outputPayload = {}; var showValueMap = {}; var dataByCoordSys = { list: [], map: {} }; var updaters = { showPointer: curry$1(showPointer, showValueMap), showTooltip: curry$1(showTooltip, dataByCoordSys) }; each$12(coordSysAxesInfo.coordSysMap, function(coordSys, coordSysKey) { var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point); each$12(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function(axisInfo, key) { var axis = axisInfo.axis; var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) { var val = inputAxisInfo && inputAxisInfo.value; if (val == null && !isIllegalPoint) val = axis.pointToData(point); val != null && processOnAxis(axisInfo, val, updaters, false, outputPayload); } }); }); var linkTriggers = {}; each$12(axesInfo, function(tarAxisInfo, tarKey) { var linkGroup = tarAxisInfo.linkGroup; if (linkGroup && !showValueMap[tarKey]) each$12(linkGroup.axesInfo, function(srcAxisInfo, srcKey) { var srcValItem = showValueMap[srcKey]; if (srcAxisInfo !== tarAxisInfo && srcValItem) { var val = srcValItem.value; linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo)))); linkTriggers[tarAxisInfo.key] = val; } }); }); each$12(linkTriggers, function(val, tarKey) { processOnAxis(axesInfo[tarKey], val, updaters, true, outputPayload); }); updateModelActually(showValueMap, axesInfo, outputPayload); dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction); dispatchHighDownActually(axesInfo, dispatchAction, api); return outputPayload; } function processOnAxis(axisInfo, newValue, updaters, noSnap, outputFinder) { var axis = axisInfo.axis; if (axis.scale.isBlank() || !axis.containData(newValue)) return; if (!axisInfo.involveSeries) { updaters.showPointer(axisInfo, newValue); return; } var payloadInfo = buildPayloadsBySeries(newValue, axisInfo); var payloadBatch = payloadInfo.payloadBatch; var snapToValue = payloadInfo.snapToValue; if (payloadBatch[0] && outputFinder.seriesIndex == null) extend(outputFinder, payloadBatch[0]); if (!noSnap && axisInfo.snap) { if (axis.containData(snapToValue) && snapToValue != null) newValue = snapToValue; } updaters.showPointer(axisInfo, newValue, payloadBatch); updaters.showTooltip(axisInfo, payloadInfo, snapToValue); } function buildPayloadsBySeries(value, axisInfo) { var axis = axisInfo.axis; var dim = axis.dim; var snapToValue = value; var payloadBatch = []; var minDist = Number.MAX_VALUE; var minDiff = -1; each$12(axisInfo.seriesModels, function(series, idx) { var dataDim = series.getData().mapDimensionsAll(dim); var seriesNestestValue; var dataIndices; if (series.getAxisTooltipData) { var result = series.getAxisTooltipData(dataDim, value, axis); dataIndices = result.dataIndices; seriesNestestValue = result.nestestValue; } else { dataIndices = series.indicesOfNearest(dim, dataDim[0], value, axis.type === "category" ? .5 : null); if (!dataIndices.length) return; seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]); } if (!isNullableNumberFinite(seriesNestestValue)) return; var diff = value - seriesNestestValue; var dist = Math.abs(diff); if (dist <= minDist) { if (dist < minDist || diff >= 0 && minDiff < 0) { minDist = dist; minDiff = diff; snapToValue = seriesNestestValue; payloadBatch.length = 0; } each$12(dataIndices, function(dataIndex) { payloadBatch.push({ seriesIndex: series.seriesIndex, dataIndexInside: dataIndex, dataIndex: series.getData().getRawIndex(dataIndex) }); }); } }); return { payloadBatch, snapToValue }; } function showPointer(showValueMap, axisInfo, value, payloadBatch) { showValueMap[axisInfo.key] = { value, payloadBatch }; } function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) { var payloadBatch = payloadInfo.payloadBatch; var axis = axisInfo.axis; var axisModel = axis.model; var axisPointerModel = axisInfo.axisPointerModel; if (!axisInfo.triggerTooltip || !payloadBatch.length) return; var coordSysModel = axisInfo.coordSys.model; var coordSysKey = makeKey(coordSysModel); var coordSysItem = dataByCoordSys.map[coordSysKey]; if (!coordSysItem) { coordSysItem = dataByCoordSys.map[coordSysKey] = { coordSysId: coordSysModel.id, coordSysIndex: coordSysModel.componentIndex, coordSysType: coordSysModel.type, coordSysMainType: coordSysModel.mainType, dataByAxis: [] }; dataByCoordSys.list.push(coordSysItem); } coordSysItem.dataByAxis.push({ axisDim: axis.dim, axisIndex: axisModel.componentIndex, axisType: axisModel.type, axisId: axisModel.id, value, valueLabelOpt: { precision: axisPointerModel.get(["label", "precision"]), formatter: axisPointerModel.get(["label", "formatter"]) }, seriesDataIndices: payloadBatch.slice() }); } function updateModelActually(showValueMap, axesInfo, outputPayload) { var outputAxesInfo = outputPayload.axesInfo = []; each$12(axesInfo, function(axisInfo, key) { var option = axisInfo.axisPointerModel.option; var valItem = showValueMap[key]; if (valItem) { !axisInfo.useHandle && (option.status = "show"); option.value = valItem.value; option.seriesDataIndices = (valItem.payloadBatch || []).slice(); } else !axisInfo.useHandle && (option.status = "hide"); option.status === "show" && outputAxesInfo.push({ axisDim: axisInfo.axis.dim, axisIndex: axisInfo.axis.model.componentIndex, value: option.value }); }); } function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) { if (illegalPoint(point) || !dataByCoordSys.list.length) { dispatchAction({ type: "hideTip" }); return; } var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; dispatchAction({ type: "showTip", escapeConnect: true, x: point[0], y: point[1], tooltipOption: payload.tooltipOption, position: payload.position, dataIndexInside: sampleItem.dataIndexInside, dataIndex: sampleItem.dataIndex, seriesIndex: sampleItem.seriesIndex, dataByCoordSys: dataByCoordSys.list }); } function dispatchHighDownActually(axesInfo, dispatchAction, api) { var zr = api.getZr(); var highDownKey = "axisPointerLastHighlights"; var lastHighlights = inner$8(zr)[highDownKey] || {}; var newHighlights = inner$8(zr)[highDownKey] = {}; each$12(axesInfo, function(axisInfo, key) { var option = axisInfo.axisPointerModel.option; option.status === "show" && axisInfo.triggerEmphasis && each$12(option.seriesDataIndices, function(batchItem) { newHighlights[batchItem.seriesIndex + "|" + batchItem.dataIndex] = batchItem; }); }); var toHighlight = []; var toDownplay = []; function makeHighDownItem(batchItem) { return { seriesIndex: batchItem.seriesIndex, dataIndex: batchItem.dataIndex }; } each$12(lastHighlights, function(batchItem, key) { !newHighlights[key] && toDownplay.push(makeHighDownItem(batchItem)); }); each$12(newHighlights, function(batchItem, key) { !lastHighlights[key] && toHighlight.push(makeHighDownItem(batchItem)); }); toDownplay.length && api.dispatchAction({ type: "downplay", escapeConnect: true, notBlur: true, batch: toDownplay }); toHighlight.length && api.dispatchAction({ type: "highlight", escapeConnect: true, notBlur: true, batch: toHighlight }); } function findInputAxisInfo(inputAxesInfo, axisInfo) { for (var i = 0; i < (inputAxesInfo || []).length; i++) { var inputAxisInfo = inputAxesInfo[i]; if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) return inputAxisInfo; } } function makeMapperParam(axisInfo) { var axisModel = axisInfo.axis.model; var item = {}; var dim = item.axisDim = axisInfo.axis.dim; item.axisIndex = item[dim + "AxisIndex"] = axisModel.componentIndex; item.axisName = item[dim + "AxisName"] = axisModel.name; item.axisId = item[dim + "AxisId"] = axisModel.id; return item; } function illegalPoint(point) { return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]); } //#endregion //#region node_modules/echarts/lib/component/axisPointer/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$28(registers) { AxisView.registerAxisPointerClass("CartesianAxisPointer", CartesianAxisPointer); registers.registerComponentModel(AxisPointerModel); registers.registerComponentView(AxisPointerView); registers.registerPreprocessor(function(option) { if (option) { (!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {}); var link = option.axisPointer.link; if (link && !isArray$1(link)) option.axisPointer.link = [link]; } }); registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, { overallReset: function(ecModel, api) { ecModel.getComponent("axisPointer").coordSysAxesInfo = collect(ecModel, api); } }); registers.registerAction({ type: "updateAxisPointer", event: "updateAxisPointer", update: ":updateAxisPointer" }, axisTrigger); } //#endregion //#region node_modules/echarts/lib/component/grid/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$27(registers) { use(install$52); use(install$28); } //#endregion //#region node_modules/echarts/lib/component/axisPointer/PolarAxisPointer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PolarAxisPointer = function(_super) { __extends(PolarAxisPointer, _super); function PolarAxisPointer() { return _super !== null && _super.apply(this, arguments) || this; } /** * @override */ PolarAxisPointer.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) { var axis = axisModel.axis; if (axis.dim === "angle") this.animationThreshold = Math.PI / 18; var polar = axis.polar; var thisExtent = axis.getExtent(); var otherExtent = polar.getOtherAxis(axis).getExtent(); var coordValue = axis.dataToCoord(value); var axisPointerType = axisPointerModel.get("type"); if (axisPointerType && axisPointerType !== "none") { var elStyle = buildElStyle(axisPointerModel); var pointerOption = pointerShapeBuilder$1[axisPointerType](axis, polar, coordValue, thisExtent, otherExtent, axisPointerModel.get("seriesDataIndices"), axisPointerModel.ecModel); pointerOption.style = elStyle; elOption.graphicKey = pointerOption.type; elOption.pointer = pointerOption; } buildLabelElOption(elOption, axisModel, axisPointerModel, api, getLabelPosition(value, axisModel, axisPointerModel, polar, axisPointerModel.get(["label", "margin"]))); }; return PolarAxisPointer; }(BaseAxisPointer); function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) { var axis = axisModel.axis; var coord = axis.dataToCoord(value); var axisAngle = polar.getAngleAxis().getExtent()[0]; axisAngle = axisAngle / 180 * Math.PI; var radiusExtent = polar.getRadiusAxis().getExtent(); var position; var align; var verticalAlign; if (axis.dim === "radius") { var transform = create$1(); rotate(transform, transform, axisAngle); translate(transform, transform, [polar.cx, polar.cy]); position = applyTransform([coord, -labelMargin], transform); var labelRotation = axisModel.getModel("axisLabel").get("rotate") || 0; var labelLayout = AxisBuilder.innerTextLayout(axisAngle, labelRotation * Math.PI / 180, -1); align = labelLayout.textAlign; verticalAlign = labelLayout.textVerticalAlign; } else { var r = radiusExtent[1]; position = polar.coordToPoint([r + labelMargin, coord]); var cx = polar.cx; var cy = polar.cy; align = Math.abs(position[0] - cx) / r < .3 ? "center" : position[0] > cx ? "left" : "right"; verticalAlign = Math.abs(position[1] - cy) / r < .3 ? "middle" : position[1] > cy ? "top" : "bottom"; } return { position, align, verticalAlign }; } var pointerShapeBuilder$1 = { line: function(axis, polar, coordValue, thisExtent, otherExtent) { return axis.dim === "angle" ? { type: "Line", shape: makeLineShape(polar.coordToPoint([otherExtent[0], coordValue]), polar.coordToPoint([otherExtent[1], coordValue])) } : { type: "Circle", shape: { cx: polar.cx, cy: polar.cy, r: coordValue } }; }, shadow: function(axis, polar, coordValue, thisExtent, otherExtent, seriesDataIndices, ecModel) { var radian = Math.PI / 180; var bandWidth = calcAxisPointerShadowBandWidth(axis, seriesDataIndices, ecModel); var shape; if (axis.dim === "angle") shape = makeSectorShape(polar.cx, polar.cy, otherExtent[0], otherExtent[1], (-coordValue - bandWidth / 2) * radian, (-coordValue + bandWidth / 2) * radian); else { var _a = calcAxisPointerShadowEnds(coordValue, thisExtent, bandWidth), min = _a[0], max = _a[1]; shape = makeSectorShape(polar.cx, polar.cy, min, max, 0, Math.PI * 2); } return { type: "Sector", shape }; } }; //#endregion //#region node_modules/echarts/lib/coord/polar/PolarModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var COORD_SYS_TYPE_POLAR = "polar"; var COMPONENT_TYPE_POLAR = COORD_SYS_TYPE_POLAR; var PolarModel = function(_super) { __extends(PolarModel, _super); function PolarModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PolarModel.type; return _this; } PolarModel.prototype.findAxisModel = function(axisType) { var foundAxisModel; this.ecModel.eachComponent(axisType, function(axisModel) { if (axisModel.getCoordSysModel() === this) foundAxisModel = axisModel; }, this); return foundAxisModel; }; PolarModel.type = COORD_SYS_TYPE_POLAR; PolarModel.dependencies = ["radiusAxis", "angleAxis"]; PolarModel.defaultOption = { z: 0, center: ["50%", "50%"], radius: "80%" }; return PolarModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/coord/polar/AxisModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PolarAxisModel = function(_super) { __extends(PolarAxisModel, _super); function PolarAxisModel() { return _super !== null && _super.apply(this, arguments) || this; } PolarAxisModel.prototype.getCoordSysModel = function() { return this.getReferringComponents("polar", SINGLE_REFERRING).models[0]; }; PolarAxisModel.type = "polarAxis"; return PolarAxisModel; }(ComponentModel); mixin(PolarAxisModel, AxisModelCommonMixin); var AngleAxisModel = function(_super) { __extends(AngleAxisModel, _super); function AngleAxisModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = AngleAxisModel.type; return _this; } AngleAxisModel.type = "angleAxis"; return AngleAxisModel; }(PolarAxisModel); var RadiusAxisModel = function(_super) { __extends(RadiusAxisModel, _super); function RadiusAxisModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = RadiusAxisModel.type; return _this; } RadiusAxisModel.type = "radiusAxis"; return RadiusAxisModel; }(PolarAxisModel); //#endregion //#region node_modules/echarts/lib/coord/polar/RadiusAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RadiusAxis = function(_super) { __extends(RadiusAxis, _super); function RadiusAxis(scale, radiusExtent) { return _super.call(this, "radius", scale, radiusExtent) || this; } RadiusAxis.prototype.pointToData = function(point, clamp) { return this.polar.pointToData(point, clamp)[this.dim === "radius" ? 0 : 1]; }; return RadiusAxis; }(Axis); RadiusAxis.prototype.dataToRadius = Axis.prototype.dataToCoord; RadiusAxis.prototype.radiusToData = Axis.prototype.coordToData; //#endregion //#region node_modules/echarts/lib/coord/polar/AngleAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$7 = makeInner(); var AngleAxis = function(_super) { __extends(AngleAxis, _super); function AngleAxis(scale, angleExtent) { return _super.call(this, "angle", scale, angleExtent || [0, 360]) || this; } AngleAxis.prototype.pointToData = function(point, clamp) { return this.polar.pointToData(point, clamp)[this.dim === "radius" ? 0 : 1]; }; /** * Only be called in category axis. * Angle axis uses text height to decide interval * * @override * @return {number} Auto interval for cateogry axis tick and label */ AngleAxis.prototype.calculateCategoryInterval = function() { var axis = this; var labelModel = axis.getLabelModel(); var ordinalScale = axis.scale; var ordinalExtent = ordinalScale.getExtent(); var tickCount = ordinalScale.count(); if (ordinalExtent[1] - ordinalExtent[0] < 1) return 0; var tickValue = ordinalExtent[0]; var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); var unitH = Math.abs(unitSpan); var rect = getBoundingRect(tickValue == null ? "" : tickValue + "", labelModel.getFont(), "center", "top"); var dh = Math.max(rect.height, 7) / unitH; isNaN(dh) && (dh = Infinity); var interval = Math.max(0, Math.floor(dh)); var cache = inner$7(axis.model); var lastAutoInterval = cache.lastAutoInterval; var lastTickCount = cache.lastTickCount; if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 && lastAutoInterval > interval) interval = lastAutoInterval; else { cache.lastTickCount = tickCount; cache.lastAutoInterval = interval; } return interval; }; return AngleAxis; }(Axis); AngleAxis.prototype.dataToAngle = Axis.prototype.dataToCoord; AngleAxis.prototype.angleToData = Axis.prototype.coordToData; //#endregion //#region node_modules/echarts/lib/coord/polar/Polar.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var polarDimensions = ["radius", "angle"]; var Polar = function() { function Polar(name) { this.dimensions = polarDimensions; this.type = COORD_SYS_TYPE_POLAR; /** * x of polar center */ this.cx = 0; /** * y of polar center */ this.cy = 0; this._radiusAxis = new RadiusAxis(); this._angleAxis = new AngleAxis(); this.axisPointerEnabled = true; this.name = name || ""; this._radiusAxis.polar = this._angleAxis.polar = this; } /** * If contain coord */ Polar.prototype.containPoint = function(point) { var coord = this.pointToCoord(point); return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]); }; /** * If contain data */ Polar.prototype.containData = function(data) { return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]); }; Polar.prototype.getAxis = function(dim) { var key = "_" + dim + "Axis"; return this[key]; }; Polar.prototype.getAxes = function() { return [this._radiusAxis, this._angleAxis]; }; /** * Get axes by type of scale */ Polar.prototype.getAxesByScale = function(scaleType) { var axes = []; var angleAxis = this._angleAxis; var radiusAxis = this._radiusAxis; angleAxis.scale.type === scaleType && axes.push(angleAxis); radiusAxis.scale.type === scaleType && axes.push(radiusAxis); return axes; }; Polar.prototype.getAngleAxis = function() { return this._angleAxis; }; Polar.prototype.getRadiusAxis = function() { return this._radiusAxis; }; Polar.prototype.getOtherAxis = function(axis) { var angleAxis = this._angleAxis; return axis === angleAxis ? this._radiusAxis : angleAxis; }; /** * Base axis will be used on stacking. */ Polar.prototype.getBaseAxis = function() { return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAngleAxis(); }; Polar.prototype.getTooltipAxes = function(dim) { var baseAxis = dim != null && dim !== "auto" ? this.getAxis(dim) : this.getBaseAxis(); return { baseAxes: [baseAxis], otherAxes: [this.getOtherAxis(baseAxis)] }; }; /** * Convert a single data item to (x, y) point. * Parameter data is an array which the first element is radius and the second is angle */ Polar.prototype.dataToPoint = function(data, clamp, out) { return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)], out); }; /** * Convert a (x, y) point to data */ Polar.prototype.pointToData = function(point, clamp, out) { out = out || []; var coord = this.pointToCoord(point); out[0] = this._radiusAxis.radiusToData(coord[0], clamp); out[1] = this._angleAxis.angleToData(coord[1], clamp); return out; }; /** * Convert a (x, y) point to (radius, angle) coord */ Polar.prototype.pointToCoord = function(point) { var dx = point[0] - this.cx; var dy = point[1] - this.cy; var angleAxis = this.getAngleAxis(); var extent = angleAxis.getExtent(); var minAngle = Math.min(extent[0], extent[1]); var maxAngle = Math.max(extent[0], extent[1]); angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360; var radius = Math.sqrt(dx * dx + dy * dy); dx /= radius; dy /= radius; var radian = Math.atan2(-dy, dx) / Math.PI * 180; var dir = radian < minAngle ? 1 : -1; while (radian < minAngle || radian > maxAngle) radian += dir * 360; return [radius, radian]; }; /** * Convert a (radius, angle) coord to (x, y) point */ Polar.prototype.coordToPoint = function(coord, out) { out = out || []; var radius = coord[0]; var radian = coord[1] / 180 * Math.PI; out[0] = Math.cos(radian) * radius + this.cx; out[1] = -Math.sin(radian) * radius + this.cy; return out; }; /** * Get ring area of cartesian. * Area will have a contain function to determine if a point is in the coordinate system. */ Polar.prototype.getArea = function() { var angleAxis = this.getAngleAxis(); var radiusExtent = this.getRadiusAxis().getExtent().slice(); radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse(); var angleExtent = angleAxis.getExtent(); var RADIAN = Math.PI / 180; var EPSILON = 1e-4; return { cx: this.cx, cy: this.cy, r0: radiusExtent[0], r: radiusExtent[1], startAngle: -angleExtent[0] * RADIAN, endAngle: -angleExtent[1] * RADIAN, clockwise: angleAxis.inverse, contain: function(x, y) { var dx = x - this.cx; var dy = y - this.cy; var d2 = dx * dx + dy * dy; var r = this.r; var r0 = this.r0; return r !== r0 && d2 - EPSILON <= r * r && d2 + EPSILON >= r0 * r0; }, x: this.cx - radiusExtent[1], y: this.cy - radiusExtent[1], width: radiusExtent[1] * 2, height: radiusExtent[1] * 2 }; }; Polar.prototype.convertToPixel = function(ecModel, finder, value) { return getCoordSys$3(finder) === this ? this.dataToPoint(value) : null; }; Polar.prototype.convertFromPixel = function(ecModel, finder, pixel) { return getCoordSys$3(finder) === this ? this.pointToData(pixel) : null; }; return Polar; }(); function getCoordSys$3(finder) { var seriesModel = finder.seriesModel; var polarModel = finder.polarModel; return polarModel && polarModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem; } //#endregion //#region node_modules/echarts/lib/coord/polar/polarCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Resize method bound to the polar */ function resizePolar(polar, polarModel, api) { var center = polarModel.get("center"); var refContainer = createBoxLayoutReference(polarModel, api).refContainer; polar.cx = parsePercent(center[0], refContainer.width) + refContainer.x; polar.cy = parsePercent(center[1], refContainer.height) + refContainer.y; var radiusAxis = polar.getRadiusAxis(); var size = Math.min(refContainer.width, refContainer.height) / 2; var radius = polarModel.get("radius"); if (radius == null) radius = [0, "100%"]; else if (!isArray$1(radius)) radius = [0, radius]; var parsedRadius = [parsePercent(radius[0], size), parsePercent(radius[1], size)]; radiusAxis.inverse ? radiusAxis.setExtent(parsedRadius[1], parsedRadius[0]) : radiusAxis.setExtent(parsedRadius[0], parsedRadius[1]); } /** * Update polar */ function updatePolarScale(ecModel, api) { var polar = this; var angleAxis = polar.getAngleAxis(); var radiusAxis = polar.getRadiusAxis(); scaleRawExtentInfoCreate(angleAxis, 1); scaleRawExtentInfoCreate(radiusAxis, 1); scaleCalcNice(angleAxis); scaleCalcNice(radiusAxis); if (angleAxis.type === "category" && !angleAxis.onBand) { var extent = angleAxis.getExtent(); var diff = 360 / angleAxis.scale.count(); angleAxis.inverse ? extent[1] += diff : extent[1] -= diff; angleAxis.setExtent(extent[0], extent[1]); } } function isAngleAxisModel(axisModel) { return axisModel.mainType === "angleAxis"; } /** * Set common axis properties */ function setAxis(axis, axisModel) { var _a; axis.type = determineAxisType(axisModel); axis.scale = createScaleByModel(axisModel, axis.type, false); axis.onBand = isAxisOnBand(axis.scale, axisModel); axis.inverse = axisModel.get("inverse"); if (isAngleAxisModel(axisModel)) { axis.inverse = axis.inverse !== axisModel.get("clockwise"); var startAngle = axisModel.get("startAngle"); var endAngle = (_a = axisModel.get("endAngle")) !== null && _a !== void 0 ? _a : startAngle + (axis.inverse ? -360 : 360); axis.setExtent(startAngle, endAngle); } axisModel.axis = axis; axis.model = axisModel; } var polarCreator = { dimensions: polarDimensions, create: function(ecModel, api) { var polarList = []; ecModel.eachComponent(COMPONENT_TYPE_POLAR, function(polarModel, idx) { var polar = new Polar(idx + ""); polar.update = updatePolarScale; var radiusAxis = polar.getRadiusAxis(); var angleAxis = polar.getAngleAxis(); var radiusAxisModel = polarModel.findAxisModel("radiusAxis"); var angleAxisModel = polarModel.findAxisModel("angleAxis"); setAxis(radiusAxis, radiusAxisModel); setAxis(angleAxis, angleAxisModel); resizePolar(polar, polarModel, api); polarList.push(polar); polarModel.coordinateSystem = polar; polar.model = polarModel; }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.get("coordinateSystem") === "polar") { var polarModel = seriesModel.getReferringComponents(COMPONENT_TYPE_POLAR, SINGLE_REFERRING).models[0]; if (!polarModel) throw new Error("Polar \"" + retrieve(seriesModel.get("polarIndex"), seriesModel.get("polarId"), 0) + "\" not found"); var polar = seriesModel.coordinateSystem = polarModel.coordinateSystem; if (polar) { associateSeriesWithAxis(polar.getRadiusAxis(), seriesModel, COORD_SYS_TYPE_POLAR); associateSeriesWithAxis(polar.getAngleAxis(), seriesModel, COORD_SYS_TYPE_POLAR); } } }); return polarList; } }; //#endregion //#region node_modules/echarts/lib/component/axis/AngleAxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var elementList = [ "axisLine", "axisLabel", "axisTick", "minorTick", "splitLine", "minorSplitLine", "splitArea" ]; function getAxisLineShape(polar, rExtent, angle) { rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse()); var start = polar.coordToPoint([rExtent[0], angle]); var end = polar.coordToPoint([rExtent[1], angle]); return { x1: start[0], y1: start[1], x2: end[0], y2: end[1] }; } function getRadiusIdx(polar) { return polar.getRadiusAxis().inverse ? 0 : 1; } function fixAngleOverlap(list) { var firstItem = list[0]; var lastItem = list[list.length - 1]; if (firstItem && lastItem && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4) list.pop(); } var AngleAxisView = function(_super) { __extends(AngleAxisView, _super); function AngleAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = AngleAxisView.type; _this.axisPointerClass = "PolarAxisPointer"; return _this; } AngleAxisView.prototype.render = function(angleAxisModel, ecModel) { this.group.removeAll(); if (!angleAxisModel.get("show")) return; var angleAxis = angleAxisModel.axis; var polar = angleAxis.polar; var radiusExtent = polar.getRadiusAxis().getExtent(); var ticksAngles = angleAxis.getTicksCoords({ breakTicks: "none" }); var minorTickAngles = angleAxis.getMinorTicksCoords(); var labels = []; each$12(angleAxis.getViewLabels(), function(labelItem) { if (labelItem.tick.offInterval) return; labelItem = clone$4(labelItem); var scale = angleAxis.scale; labelItem.coord = angleAxis.dataToCoord(getTickValueOutermost(scale, labelItem.tick)); labels.push(labelItem); }); fixAngleOverlap(labels); fixAngleOverlap(ticksAngles); each$12(elementList, function(name) { if (angleAxisModel.get([name, "show"]) && (!angleAxis.scale.isBlank() || name === "axisLine")) angelAxisElementsBuilders[name](this.group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels); }, this); }; AngleAxisView.type = "angleAxis"; return AngleAxisView; }(AxisView); var angelAxisElementsBuilders = { axisLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { var lineStyleModel = angleAxisModel.getModel(["axisLine", "lineStyle"]); var angleAxis = polar.getAngleAxis(); var RADIAN = Math.PI / 180; var angleExtent = angleAxis.getExtent(); var rId = getRadiusIdx(polar); var r0Id = rId ? 0 : 1; var shape; var shapeType = Math.abs(angleExtent[1] - angleExtent[0]) === 360 ? "Circle" : "Arc"; if (radiusExtent[r0Id] === 0) shape = new graphic_exports$1[shapeType]({ shape: { cx: polar.cx, cy: polar.cy, r: radiusExtent[rId], startAngle: -angleExtent[0] * RADIAN, endAngle: -angleExtent[1] * RADIAN, clockwise: angleAxis.inverse }, style: lineStyleModel.getLineStyle(), z2: 1, silent: true }); else shape = new Ring({ shape: { cx: polar.cx, cy: polar.cy, r: radiusExtent[rId], r0: radiusExtent[r0Id] }, style: lineStyleModel.getLineStyle(), z2: 1, silent: true }); shape.style.fill = null; group.add(shape); }, axisTick: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { var tickModel = angleAxisModel.getModel("axisTick"); var tickLen = (tickModel.get("inside") ? -1 : 1) * tickModel.get("length"); var radius = radiusExtent[getRadiusIdx(polar)]; var lines = map$1(ticksAngles, function(tickAngleItem) { return new Line$1({ shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord) }); }); group.add(mergePath(lines, { style: defaults(tickModel.getModel("lineStyle").getLineStyle(), { stroke: angleAxisModel.get([ "axisLine", "lineStyle", "color" ]) }) })); }, minorTick: function(group, angleAxisModel, polar, tickAngles, minorTickAngles, radiusExtent) { if (!minorTickAngles.length) return; var tickModel = angleAxisModel.getModel("axisTick"); var minorTickModel = angleAxisModel.getModel("minorTick"); var tickLen = (tickModel.get("inside") ? -1 : 1) * minorTickModel.get("length"); var radius = radiusExtent[getRadiusIdx(polar)]; var lines = []; for (var i = 0; i < minorTickAngles.length; i++) for (var k = 0; k < minorTickAngles[i].length; k++) lines.push(new Line$1({ shape: getAxisLineShape(polar, [radius, radius + tickLen], minorTickAngles[i][k].coord) })); group.add(mergePath(lines, { style: defaults(minorTickModel.getModel("lineStyle").getLineStyle(), defaults(tickModel.getLineStyle(), { stroke: angleAxisModel.get([ "axisLine", "lineStyle", "color" ]) })) })); }, axisLabel: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels) { var rawCategoryData = angleAxisModel.getCategories(true); var commonLabelModel = angleAxisModel.getModel("axisLabel"); var labelMargin = commonLabelModel.get("margin"); var triggerEvent = angleAxisModel.get("triggerEvent"); each$12(labels, function(labelItem, idx) { var labelModel = commonLabelModel; var tickValue = labelItem.tick.value; var r = radiusExtent[getRadiusIdx(polar)]; var p = polar.coordToPoint([r + labelMargin, labelItem.coord]); var cx = polar.cx; var cy = polar.cy; var labelTextAlign = Math.abs(p[0] - cx) / r < .3 ? "center" : p[0] > cx ? "left" : "right"; var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < .3 ? "middle" : p[1] > cy ? "top" : "bottom"; if (rawCategoryData && rawCategoryData[tickValue]) { var rawCategoryItem = rawCategoryData[tickValue]; if (isObject$3(rawCategoryItem) && rawCategoryItem.textStyle) labelModel = new Model(rawCategoryItem.textStyle, commonLabelModel, commonLabelModel.ecModel); } var textEl = new ZRText({ silent: AxisBuilder.isLabelSilent(angleAxisModel), style: createTextStyle$1(labelModel, { x: p[0], y: p[1], fill: labelModel.getTextColor() || angleAxisModel.get([ "axisLine", "lineStyle", "color" ]), text: labelItem.formattedLabel, align: labelTextAlign, verticalAlign: labelTextVerticalAlign }) }); group.add(textEl); setTooltipConfig({ el: textEl, componentModel: angleAxisModel, itemName: labelItem.formattedLabel, formatterParamsExtra: { isTruncated: function() { return textEl.isTruncated; }, value: labelItem.rawLabel, tickIndex: idx } }); if (triggerEvent) { var eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel); eventData.targetType = "axisLabel"; eventData.value = labelItem.rawLabel; getECData(textEl).eventData = eventData; } }, this); }, splitLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { var lineStyleModel = angleAxisModel.getModel("splitLine").getModel("lineStyle"); var lineColors = lineStyleModel.get("color"); var lineCount = 0; lineColors = lineColors instanceof Array ? lineColors : [lineColors]; var splitLines = []; for (var i = 0; i < ticksAngles.length; i++) { var colorIndex = lineCount++ % lineColors.length; splitLines[colorIndex] = splitLines[colorIndex] || []; splitLines[colorIndex].push(new Line$1({ shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord) })); } for (var i = 0; i < splitLines.length; i++) group.add(mergePath(splitLines[i], { style: defaults({ stroke: lineColors[i % lineColors.length] }, lineStyleModel.getLineStyle()), silent: true, z: angleAxisModel.get("z") })); }, minorSplitLine: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { if (!minorTickAngles.length) return; var lineStyleModel = angleAxisModel.getModel("minorSplitLine").getModel("lineStyle"); var lines = []; for (var i = 0; i < minorTickAngles.length; i++) for (var k = 0; k < minorTickAngles[i].length; k++) lines.push(new Line$1({ shape: getAxisLineShape(polar, radiusExtent, minorTickAngles[i][k].coord) })); group.add(mergePath(lines, { style: lineStyleModel.getLineStyle(), silent: true, z: angleAxisModel.get("z") })); }, splitArea: function(group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { if (!ticksAngles.length) return; var areaStyleModel = angleAxisModel.getModel("splitArea").getModel("areaStyle"); var areaColors = areaStyleModel.get("color"); var lineCount = 0; areaColors = areaColors instanceof Array ? areaColors : [areaColors]; var splitAreas = []; var RADIAN = Math.PI / 180; var prevAngle = -ticksAngles[0].coord * RADIAN; var r0 = Math.min(radiusExtent[0], radiusExtent[1]); var r1 = Math.max(radiusExtent[0], radiusExtent[1]); var clockwise = angleAxisModel.get("clockwise"); for (var i = 1, len = ticksAngles.length; i <= len; i++) { var coord = i === len ? ticksAngles[0].coord : ticksAngles[i].coord; var colorIndex = lineCount++ % areaColors.length; splitAreas[colorIndex] = splitAreas[colorIndex] || []; splitAreas[colorIndex].push(new Sector({ shape: { cx: polar.cx, cy: polar.cy, r0, r: r1, startAngle: prevAngle, endAngle: -coord * RADIAN, clockwise }, silent: true })); prevAngle = -coord * RADIAN; } for (var i = 0; i < splitAreas.length; i++) group.add(mergePath(splitAreas[i], { style: defaults({ fill: areaColors[i % areaColors.length] }, areaStyleModel.getAreaStyle()), silent: true })); } }; //#endregion //#region node_modules/echarts/lib/component/axis/RadiusAxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var selfBuilderAttrs$1 = [ "splitLine", "splitArea", "minorSplitLine" ]; var RadiusAxisView = function(_super) { __extends(RadiusAxisView, _super); function RadiusAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = RadiusAxisView.type; _this.axisPointerClass = "PolarAxisPointer"; return _this; } RadiusAxisView.prototype.render = function(radiusAxisModel, ecModel, api) { this.group.removeAll(); if (!radiusAxisModel.get("show")) return; var oldAxisGroup = this._axisGroup; var newAxisGroup = this._axisGroup = new Group$3(); this.group.add(newAxisGroup); var radiusAxis = radiusAxisModel.axis; var polar = radiusAxis.polar; var angleAxis = polar.getAngleAxis(); var ticksCoords = radiusAxis.getTicksCoords(); var minorTicksCoords = radiusAxis.getMinorTicksCoords(); var axisAngle = angleAxis.getExtent()[0]; var radiusExtent = radiusAxis.getExtent(); var axisBuilder = new AxisBuilder(radiusAxisModel, api, layoutAxis(polar, radiusAxisModel, axisAngle)); axisBuilder.build(); newAxisGroup.add(axisBuilder.group); groupTransition(oldAxisGroup, newAxisGroup, radiusAxisModel); each$12(selfBuilderAttrs$1, function(name) { if (radiusAxisModel.get([name, "show"]) && !radiusAxis.scale.isBlank()) axisElementBuilders$1[name](this.group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords); }, this); }; RadiusAxisView.type = "radiusAxis"; return RadiusAxisView; }(AxisView); var axisElementBuilders$1 = { splitLine: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { var lineStyleModel = radiusAxisModel.getModel("splitLine").getModel("lineStyle"); var lineColors = lineStyleModel.get("color"); var lineCount = 0; var angleAxis = polar.getAngleAxis(); var RADIAN = Math.PI / 180; var angleExtent = angleAxis.getExtent(); var shapeType = Math.abs(angleExtent[1] - angleExtent[0]) === 360 ? "Circle" : "Arc"; lineColors = lineColors instanceof Array ? lineColors : [lineColors]; var splitLines = []; for (var i = 0; i < ticksCoords.length; i++) { var colorIndex = lineCount++ % lineColors.length; splitLines[colorIndex] = splitLines[colorIndex] || []; splitLines[colorIndex].push(new graphic_exports$1[shapeType]({ shape: { cx: polar.cx, cy: polar.cy, r: Math.max(ticksCoords[i].coord, 0), startAngle: -angleExtent[0] * RADIAN, endAngle: -angleExtent[1] * RADIAN, clockwise: angleAxis.inverse } })); } for (var i = 0; i < splitLines.length; i++) group.add(mergePath(splitLines[i], { style: defaults({ stroke: lineColors[i % lineColors.length], fill: null }, lineStyleModel.getLineStyle()), silent: true })); }, minorSplitLine: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords) { if (!minorTicksCoords.length) return; var lineStyleModel = radiusAxisModel.getModel("minorSplitLine").getModel("lineStyle"); var lines = []; for (var i = 0; i < minorTicksCoords.length; i++) for (var k = 0; k < minorTicksCoords[i].length; k++) lines.push(new Circle({ shape: { cx: polar.cx, cy: polar.cy, r: minorTicksCoords[i][k].coord } })); group.add(mergePath(lines, { style: defaults({ fill: null }, lineStyleModel.getLineStyle()), silent: true })); }, splitArea: function(group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { if (!ticksCoords.length) return; var areaStyleModel = radiusAxisModel.getModel("splitArea").getModel("areaStyle"); var areaColors = areaStyleModel.get("color"); var lineCount = 0; areaColors = areaColors instanceof Array ? areaColors : [areaColors]; var splitAreas = []; var prevRadius = ticksCoords[0].coord; for (var i = 1; i < ticksCoords.length; i++) { var colorIndex = lineCount++ % areaColors.length; splitAreas[colorIndex] = splitAreas[colorIndex] || []; splitAreas[colorIndex].push(new Sector({ shape: { cx: polar.cx, cy: polar.cy, r0: prevRadius, r: ticksCoords[i].coord, startAngle: 0, endAngle: Math.PI * 2 }, silent: true })); prevRadius = ticksCoords[i].coord; } for (var i = 0; i < splitAreas.length; i++) group.add(mergePath(splitAreas[i], { style: defaults({ fill: areaColors[i % areaColors.length] }, areaStyleModel.getAreaStyle()), silent: true })); } }; /** * @inner */ function layoutAxis(polar, radiusAxisModel, axisAngle) { return { position: [polar.cx, polar.cy], rotation: axisAngle / 180 * Math.PI, labelDirection: -1, tickDirection: -1, nameDirection: 1, labelRotate: radiusAxisModel.getModel("axisLabel").get("rotate"), z2: 1 }; } //#endregion //#region node_modules/echarts/lib/layout/barPolar.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce$1 = makeCallOnlyOnce(); function getSeriesStackId(seriesModel) { return seriesModel.get("stack") || "__ec_stack_" + seriesModel.seriesIndex; } var barLayoutPolarStageHandler = createSimpleOverallStageHandler("bar", barLayoutPolar); function barLayoutPolar(ecModel) { var axisStatKey = makeAxisStatKey2("bar", COORD_SYS_TYPE_POLAR); eachAxisOnKey(ecModel, axisStatKey, function(axis) { assert(axis instanceof AngleAxis || axis instanceof RadiusAxis); var barWidthAndOffset = calcRadialBar(axis, "bar"); var lastStackCoords = {}; eachSeriesOnAxisOnKey(axis, axisStatKey, function(seriesModel) { layoutPerAxisPerSeries(axis, seriesModel, barWidthAndOffset, lastStackCoords); }); }); } function layoutPerAxisPerSeries(baseAxis, seriesModel, barWidthAndOffset, lastStackCoords) { var data = seriesModel.getData(); var stackId = getSeriesStackId(seriesModel); var columnLayoutInfo = barWidthAndOffset[stackId]; var columnOffset = columnLayoutInfo.offset; var columnWidth = columnLayoutInfo.width; var polar = seriesModel.coordinateSystem; assert(polar.type === COORD_SYS_TYPE_POLAR); var valueAxis = polar.getOtherAxis(baseAxis); var cx = polar.cx; var cy = polar.cy; var barMinHeight = seriesModel.get("barMinHeight") || 0; var barMinAngle = seriesModel.get("barMinAngle") || 0; lastStackCoords[stackId] = lastStackCoords[stackId] || []; var valueDim = data.mapDimension(valueAxis.dim); var baseDim = data.mapDimension(baseAxis.dim); var stacked = isDimensionStacked(data, valueDim); var clampLayout = baseAxis.dim !== "radius" || !seriesModel.get("roundCap", true); var valueAxisStart = valueAxis.dataToCoord(getStartValue(valueAxis)); for (var idx = 0, len = data.count(); idx < len; idx++) { var value = data.get(valueDim, idx); var baseValue = data.get(baseDim, idx); var sign = value >= 0 ? "p" : "n"; var baseCoord = valueAxisStart; if (stacked) { if (!lastStackCoords[stackId][baseValue]) lastStackCoords[stackId][baseValue] = { p: valueAxisStart, n: valueAxisStart }; baseCoord = lastStackCoords[stackId][baseValue][sign]; } var r0 = void 0; var r = void 0; var startAngle = void 0; var endAngle = void 0; if (valueAxis.dim === "radius") { var radiusSpan = valueAxis.dataToCoord(value) - valueAxisStart; var angle = baseAxis.dataToCoord(baseValue); if (mathAbs$4(radiusSpan) < barMinHeight) radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight; r0 = baseCoord; r = baseCoord + radiusSpan; startAngle = angle - columnOffset; endAngle = startAngle - columnWidth; stacked && (lastStackCoords[stackId][baseValue][sign] = r); } else { var angleSpan = valueAxis.dataToCoord(value, clampLayout) - valueAxisStart; var radius = baseAxis.dataToCoord(baseValue); if (mathAbs$4(angleSpan) < barMinAngle) angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle; r0 = radius + columnOffset; r = r0 + columnWidth; startAngle = baseCoord; endAngle = baseCoord + angleSpan; stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle); } data.setItemLayout(idx, { cx, cy, r0, r, startAngle: -startAngle * mathPI / 180, endAngle: -endAngle * mathPI / 180, /** * Keep the same logic with bar in catesion: use end value to * control direction. Notice that if clockwise is true (by * default), the sector will always draw clockwisely, no matter * whether endAngle is greater or less than startAngle. */ clockwise: startAngle >= endAngle }); } } /** * Calculate bar width and offset for radial bar charts */ function calcRadialBar(axis, seriesType) { var axisStatKey = makeAxisStatKey2(seriesType, COORD_SYS_TYPE_POLAR); var bandWidth = calcBandWidth(axis, { fromStat: { key: axisStatKey }, min: 1 }).w; var remainedWidth = bandWidth; var autoWidthCount = 0; var categoryGapOption = "20%"; var gapOption = "30%"; var stacks = {}; eachSeriesOnAxisOnKey(axis, axisStatKey, function(seriesModel) { var stackId = getSeriesStackId(seriesModel); if (!stacks[stackId]) autoWidthCount++; stacks[stackId] = stacks[stackId] || { width: 0, maxWidth: 0 }; var barWidth = parsePercent(seriesModel.get("barWidth"), bandWidth); var barMaxWidth = parsePercent(seriesModel.get("barMaxWidth"), bandWidth); var barGapOption = seriesModel.get("barGap"); var barCategoryGapOption = seriesModel.get("barCategoryGap"); if (barWidth && !stacks[stackId].width) { barWidth = mathMin$9(remainedWidth, barWidth); stacks[stackId].width = barWidth; remainedWidth -= barWidth; } barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); barGapOption != null && (gapOption = barGapOption); barCategoryGapOption != null && (categoryGapOption = barCategoryGapOption); }); var result = {}; var categoryGap = parsePercent(categoryGapOption, bandWidth); var barGapPercent = parsePercent(gapOption, 1); var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); autoWidth = mathMax$9(autoWidth, 0); each$12(stacks, function(column, stack) { var maxWidth = column.maxWidth; if (maxWidth && maxWidth < autoWidth) { maxWidth = mathMin$9(maxWidth, remainedWidth); if (column.width) maxWidth = mathMin$9(maxWidth, column.width); remainedWidth -= maxWidth; column.width = maxWidth; autoWidthCount--; } }); autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); autoWidth = mathMax$9(autoWidth, 0); var widthSum = 0; var lastColumn; each$12(stacks, function(column, idx) { if (!column.width) column.width = autoWidth; lastColumn = column; widthSum += column.width * (1 + barGapPercent); }); if (lastColumn) widthSum -= lastColumn.width * barGapPercent; var offset = -widthSum / 2; each$12(stacks, function(column, stackId) { result[stackId] = result[stackId] || { offset, width: column.width }; offset += column.width * (1 + barGapPercent); }); return result; } function registerBarPolarAxisHandlers(registers, seriesType) { callOnlyOnce$1(registers, function() { var axisStatKey = makeAxisStatKey2(seriesType, COORD_SYS_TYPE_POLAR); requireAxisStatisticsForBaseBar(registers, axisStatKey, seriesType, COORD_SYS_TYPE_POLAR); registerAxisContainShapeHandler(axisStatKey, createBandWidthBasedAxisContainShapeHandler(axisStatKey)); }); } //#endregion //#region node_modules/echarts/lib/component/polar/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var angleAxisExtraOption = { startAngle: 90, clockwise: true, splitNumber: 12, containShape: false, axisLabel: { rotate: 0 } }; var radiusAxisExtraOption = { splitNumber: 5 }; var PolarView = function(_super) { __extends(PolarView, _super); function PolarView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PolarView.type; return _this; } PolarView.type = "polar"; return PolarView; }(ComponentView); function install$26(registers) { use(install$28); AxisView.registerAxisPointerClass("PolarAxisPointer", PolarAxisPointer); registers.registerCoordinateSystem("polar", polarCreator); registers.registerComponentModel(PolarModel); registers.registerComponentView(PolarView); axisModelCreator(registers, "angle", AngleAxisModel, angleAxisExtraOption); axisModelCreator(registers, "radius", RadiusAxisModel, radiusAxisExtraOption); registers.registerComponentView(AngleAxisView); registers.registerComponentView(RadiusAxisView); registers.registerLayout(barLayoutPolarStageHandler); registerBarPolarAxisHandlers(registers, "bar"); } //#endregion //#region node_modules/echarts/lib/coord/single/singleAxisHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function layout(axisModel, opt) { opt = opt || {}; var single = axisModel.coordinateSystem; var axis = axisModel.axis; var layout = {}; var axisPosition = axis.position; var orient = axis.orient; var rect = single.getRect(); var rectBound = [ rect.x, rect.x + rect.width, rect.y, rect.y + rect.height ]; var positionMap = { horizontal: { top: rectBound[2], bottom: rectBound[3] }, vertical: { left: rectBound[0], right: rectBound[1] } }; layout.position = [orient === "vertical" ? positionMap.vertical[axisPosition] : rectBound[0], orient === "horizontal" ? positionMap.horizontal[axisPosition] : rectBound[3]]; layout.rotation = Math.PI / 2 * { horizontal: 0, vertical: 1 }[orient]; layout.labelDirection = layout.tickDirection = layout.nameDirection = { top: -1, bottom: 1, right: 1, left: -1 }[axisPosition]; if (axisModel.get(["axisTick", "inside"])) layout.tickDirection = -layout.tickDirection; if (retrieve(opt.labelInside, axisModel.get(["axisLabel", "inside"]))) layout.labelDirection = -layout.labelDirection; var labelRotate = axisModel.get(["axisLabel", "rotate"]); layout.labelRotate = axisPosition === "top" ? -labelRotate : labelRotate; layout.z2 = 1; return layout; } //#endregion //#region node_modules/echarts/lib/component/axis/SingleAxisView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var selfBuilderAttrs = [ "splitArea", "splitLine", "breakArea" ]; var SingleAxisView = function(_super) { __extends(SingleAxisView, _super); function SingleAxisView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SingleAxisView.type; _this.axisPointerClass = "SingleAxisPointer"; return _this; } SingleAxisView.prototype.render = function(axisModel, ecModel, api, payload) { var group = this.group; group.removeAll(); var oldAxisGroup = this._axisGroup; this._axisGroup = new Group$3(); var axisBuilder = new AxisBuilder(axisModel, api, layout(axisModel)); axisBuilder.build(); group.add(this._axisGroup); group.add(axisBuilder.group); each$12(selfBuilderAttrs, function(name) { if (axisModel.get([name, "show"])) axisElementBuilders[name](this, this.group, this._axisGroup, axisModel, api); }, this); groupTransition(oldAxisGroup, this._axisGroup, axisModel); _super.prototype.render.call(this, axisModel, ecModel, api, payload); }; SingleAxisView.prototype.remove = function() { rectCoordAxisHandleRemove(this); }; SingleAxisView.type = "singleAxis"; return SingleAxisView; }(AxisView); var axisElementBuilders = { splitLine: function(axisView, group, axisGroup, axisModel, api) { var axis = axisModel.axis; if (axis.scale.isBlank()) return; var splitLineModel = axisModel.getModel("splitLine"); var lineStyleModel = splitLineModel.getModel("lineStyle"); var lineColors = lineStyleModel.get("color"); lineColors = lineColors instanceof Array ? lineColors : [lineColors]; var lineWidth = lineStyleModel.get("width"); var gridRect = axisModel.coordinateSystem.getRect(); var isHorizontal = axis.isHorizontal(); var splitLines = []; var lineCount = 0; var ticksCoords = axis.getTicksCoords({ tickModel: splitLineModel, breakTicks: "none", pruneByBreak: "preserve_extent_bound" }); var p1 = []; var p2 = []; for (var i = 0; i < ticksCoords.length; ++i) { var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); if (isHorizontal) { p1[0] = tickCoord; p1[1] = gridRect.y; p2[0] = tickCoord; p2[1] = gridRect.y + gridRect.height; } else { p1[0] = gridRect.x; p1[1] = tickCoord; p2[0] = gridRect.x + gridRect.width; p2[1] = tickCoord; } var line = new Line$1({ shape: { x1: p1[0], y1: p1[1], x2: p2[0], y2: p2[1] }, silent: true }); subPixelOptimizeLine(line.shape, lineWidth); var colorIndex = lineCount++ % lineColors.length; splitLines[colorIndex] = splitLines[colorIndex] || []; splitLines[colorIndex].push(line); } var lineStyle = lineStyleModel.getLineStyle(["color"]); for (var i = 0; i < splitLines.length; ++i) group.add(mergePath(splitLines[i], { style: defaults({ stroke: lineColors[i % lineColors.length] }, lineStyle), silent: true })); }, splitArea: function(axisView, group, axisGroup, axisModel, api) { rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel); }, breakArea: function(axisView, group, axisGroup, axisModel, api) { var axisBreakHelper = getAxisBreakHelper(); var scale = axisModel.axis.scale; if (axisBreakHelper && scale.type !== "ordinal") axisBreakHelper.rectCoordBuildBreakAxis(group, axisView, axisModel, axisModel.coordinateSystem.getRect(), api); } }; //#endregion //#region node_modules/echarts/lib/coord/single/SingleAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SingleAxis = function(_super) { __extends(SingleAxis, _super); function SingleAxis(dim, scale, coordExtent, axisType, position) { var _this = _super.call(this, dim, scale, coordExtent) || this; _this.type = axisType || "value"; _this.position = position || "bottom"; return _this; } /** * Judge the orient of the axis. */ SingleAxis.prototype.isHorizontal = function() { var position = this.position; return position === "top" || position === "bottom"; }; SingleAxis.prototype.pointToData = function(point, clamp) { return this.coordinateSystem.pointToData(point)[0]; }; return SingleAxis; }(Axis); //#endregion //#region node_modules/echarts/lib/coord/single/Single.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Single coordinates system. */ var singleDimensions = ["single"]; /** * Create a single coordinates system. */ var Single = function() { function Single(axisModel, ecModel, api) { this.type = COORD_SYS_TYPE_SINGLE; this.dimension = "single"; /** * Add it just for draw tooltip. */ this.dimensions = singleDimensions; this.axisPointerEnabled = true; this.model = axisModel; this._init(axisModel, ecModel, api); } /** * Initialize single coordinate system. */ Single.prototype._init = function(axisModel, ecModel, api) { var dim = this.dimension; var axisType = determineAxisType(axisModel); var axis = new SingleAxis(dim, createScaleByModel(axisModel, axisType, true), [0, 0], axisType, axisModel.get("position")); axis.onBand = isAxisOnBand(axis.scale, axisModel); axis.inverse = axisModel.get("inverse"); axis.orient = axisModel.get("orient"); axisModel.axis = axis; axis.model = axisModel; axis.coordinateSystem = this; this._axis = axis; }; /** * Update axis scale after data processed */ Single.prototype.update = function(ecModel, api) { var axis = this._axis; scaleRawExtentInfoCreate(axis, 1); scaleCalcNice(axis); }; /** * Resize the single coordinate system. */ Single.prototype.resize = function(axisModel, api) { var refContainer = createBoxLayoutReference(axisModel, api).refContainer; this._rect = getLayoutRect(axisModel.getBoxLayoutParams(), refContainer); this._adjustAxis(); }; Single.prototype.getRect = function() { return this._rect; }; Single.prototype._adjustAxis = function() { var rect = this._rect; var axis = this._axis; var isHorizontal = axis.isHorizontal(); var extent = isHorizontal ? [0, rect.width] : [0, rect.height]; var idx = axis.inverse ? 1 : 0; axis.setExtent(extent[idx], extent[1 - idx]); this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y); }; Single.prototype._updateAxisTransform = function(axis, coordBase) { var axisExtent = axis.getExtent(); var extentSum = axisExtent[0] + axisExtent[1]; var isHorizontal = axis.isHorizontal(); axis.toGlobalCoord = isHorizontal ? function(coord) { return coord + coordBase; } : function(coord) { return extentSum - coord + coordBase; }; axis.toLocalCoord = isHorizontal ? function(coord) { return coord - coordBase; } : function(coord) { return extentSum - coord + coordBase; }; }; /** * Get axis. */ Single.prototype.getAxis = function() { return this._axis; }; /** * Get axis, add it just for draw tooltip. */ Single.prototype.getBaseAxis = function() { return this._axis; }; Single.prototype.getAxes = function() { return [this._axis]; }; Single.prototype.getTooltipAxes = function() { return { baseAxes: [this.getAxis()], otherAxes: [] }; }; /** * If contain point. */ Single.prototype.containPoint = function(point) { var rect = this.getRect(); var axis = this.getAxis(); if (axis.orient === "horizontal") return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height; else return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height; }; Single.prototype.pointToData = function(point, reserved, out) { out = out || []; var axis = this.getAxis(); out[0] = axis.coordToData(axis.toLocalCoord(point[axis.orient === "horizontal" ? 0 : 1])); return out; }; /** * Convert the series data to concrete point. * Can be [val] | val */ Single.prototype.dataToPoint = function(val, reserved, out) { var axis = this.getAxis(); var rect = this.getRect(); out = out || []; var idx = axis.orient === "horizontal" ? 0 : 1; if (val instanceof Array) val = val[0]; out[idx] = axis.toGlobalCoord(axis.dataToCoord(+val)); out[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2; return out; }; Single.prototype.convertToPixel = function(ecModel, finder, value) { return getCoordSys$2(finder) === this ? this.dataToPoint(value) : null; }; Single.prototype.convertFromPixel = function(ecModel, finder, pixel) { return getCoordSys$2(finder) === this ? this.pointToData(pixel) : null; }; return Single; }(); function getCoordSys$2(finder) { var seriesModel = finder.seriesModel; var singleModel = finder.singleAxisModel; return singleModel && singleModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem; } //#endregion //#region node_modules/echarts/lib/coord/single/singleCreator.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Single coordinate system creator. */ /** * Create single coordinate system and inject it into seriesModel. */ function create(ecModel, api) { var singles = []; ecModel.eachComponent(COMPONENT_TYPE_SINGLE_AXIS, function(axisModel, idx) { var single = new Single(axisModel, ecModel, api); single.name = "single_" + idx; single.resize(axisModel, api); axisModel.coordinateSystem = single; singles.push(single); }); ecModel.eachSeries(function(seriesModel) { if (seriesModel.get("coordinateSystem") === "singleAxis") { var singleAxisModel = seriesModel.getReferringComponents(COMPONENT_TYPE_SINGLE_AXIS, SINGLE_REFERRING).models[0]; var single = seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem; if (single) associateSeriesWithAxis(single.getAxis(), seriesModel, COORD_SYS_TYPE_SINGLE); } }); return singles; } var singleCreator = { create, dimensions: singleDimensions }; //#endregion //#region node_modules/echarts/lib/component/axisPointer/SingleAxisPointer.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var XY$1 = ["x", "y"]; var WH$1 = ["width", "height"]; var SingleAxisPointer = function(_super) { __extends(SingleAxisPointer, _super); function SingleAxisPointer() { return _super !== null && _super.apply(this, arguments) || this; } /** * @override */ SingleAxisPointer.prototype.makeElOption = function(elOption, value, axisModel, axisPointerModel, api) { var axis = axisModel.axis; var coordSys = axis.coordinateSystem; var pointDimIndex = getPointDimIndex(axis); var thisExtent = getGlobalExtent(coordSys, pointDimIndex); var otherExtent = getGlobalExtent(coordSys, 1 - pointDimIndex); var pixelValue = coordSys.dataToPoint(value)[0]; var axisPointerType = axisPointerModel.get("type"); if (axisPointerType && axisPointerType !== "none") { var elStyle = buildElStyle(axisPointerModel); var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, thisExtent, otherExtent, axisPointerModel.get("seriesDataIndices"), axisPointerModel.ecModel); pointerOption.style = elStyle; elOption.graphicKey = pointerOption.type; elOption.pointer = pointerOption; } buildCartesianSingleLabelElOption(value, elOption, layout(axisModel), axisModel, axisPointerModel, api); }; /** * @override */ SingleAxisPointer.prototype.getHandleTransform = function(value, axisModel, axisPointerModel) { var layoutInfo = layout(axisModel, { labelInside: false }); layoutInfo.labelMargin = axisPointerModel.get(["handle", "margin"]); var position = getTransformedPosition(axisModel.axis, value, layoutInfo); return { x: position[0], y: position[1], rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) }; }; /** * @override */ SingleAxisPointer.prototype.updateHandleTransform = function(transform, delta, axisModel, axisPointerModel) { var axis = axisModel.axis; var coordSys = axis.coordinateSystem; var dimIndex = getPointDimIndex(axis); var axisExtent = getGlobalExtent(coordSys, dimIndex); var currPosition = [transform.x, transform.y]; currPosition[dimIndex] += delta[dimIndex]; currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex); var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; var cursorPoint = [cursorOtherValue, cursorOtherValue]; cursorPoint[dimIndex] = currPosition[dimIndex]; return { x: currPosition[0], y: currPosition[1], rotation: transform.rotation, cursorPoint, tooltipOption: { verticalAlign: "middle" } }; }; return SingleAxisPointer; }(BaseAxisPointer); var pointerShapeBuilder = { line: function(axis, pixelValue, thisExtent, otherExtent) { return { type: "Line", subPixelOptimize: true, shape: makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getPointDimIndex(axis)) }; }, shadow: function(axis, pixelValue, thisExtent, otherExtent, seriesDataIndices, ecModel) { var bandWidth = calcAxisPointerShadowBandWidth(axis, seriesDataIndices, ecModel); var span = otherExtent[1] - otherExtent[0]; var _a = calcAxisPointerShadowEnds(pixelValue, thisExtent, bandWidth), min = _a[0], max = _a[1]; return { type: "Rect", shape: makeRectShape([min, otherExtent[0]], [max - min, span], getPointDimIndex(axis)) }; } }; function getPointDimIndex(axis) { return axis.isHorizontal() ? 0 : 1; } function getGlobalExtent(coordSys, dimIndex) { var rect = coordSys.getRect(); return [rect[XY$1[dimIndex]], rect[XY$1[dimIndex]] + rect[WH$1[dimIndex]]]; } //#endregion //#region node_modules/echarts/lib/component/singleAxis/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SingleView = function(_super) { __extends(SingleView, _super); function SingleView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SingleView.type; return _this; } SingleView.type = "single"; return SingleView; }(ComponentView); function install$25(registers) { use(install$28); AxisView.registerAxisPointerClass("SingleAxisPointer", SingleAxisPointer); registers.registerComponentView(SingleView); registers.registerComponentView(SingleAxisView); registers.registerComponentModel(SingleAxisModel); axisModelCreator(registers, "single", SingleAxisModel, SingleAxisModel.defaultOption); registers.registerCoordinateSystem("single", singleCreator); } //#endregion //#region node_modules/echarts/lib/coord/calendar/CalendarModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CalendarModel = function(_super) { __extends(CalendarModel, _super); function CalendarModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CalendarModel.type; return _this; } /** * @override */ CalendarModel.prototype.init = function(option, parentModel, ecModel) { var inputPositionParams = getLayoutParams(option); _super.prototype.init.apply(this, arguments); mergeAndNormalizeLayoutParams$1(option, inputPositionParams); }; /** * @override */ CalendarModel.prototype.mergeOption = function(option) { _super.prototype.mergeOption.apply(this, arguments); mergeAndNormalizeLayoutParams$1(this.option, option); }; CalendarModel.prototype.getCellSize = function() { return this.option.cellSize; }; CalendarModel.type = "calendar"; CalendarModel.layoutMode = "box"; CalendarModel.defaultOption = { z: 2, left: 80, top: 60, cellSize: 20, orient: "horizontal", splitLine: { show: true, lineStyle: { color: tokens.color.axisLine, width: 1, type: "solid" } }, itemStyle: { color: tokens.color.neutral00, borderWidth: 1, borderColor: tokens.color.neutral10 }, dayLabel: { show: true, firstDay: 0, position: "start", margin: tokens.size.s, color: tokens.color.secondary }, monthLabel: { show: true, position: "start", margin: tokens.size.s, align: "center", formatter: null, color: tokens.color.secondary }, yearLabel: { show: true, position: null, margin: tokens.size.xl, formatter: null, color: tokens.color.quaternary, fontFamily: "sans-serif", fontWeight: "bolder", fontSize: 20 } }; return CalendarModel; }(ComponentModel); function mergeAndNormalizeLayoutParams$1(target, raw) { var cellSize = target.cellSize; var cellSizeArr; if (!isArray$1(cellSize)) cellSizeArr = target.cellSize = [cellSize, cellSize]; else cellSizeArr = cellSize; if (cellSizeArr.length === 1) cellSizeArr[1] = cellSizeArr[0]; mergeLayoutParam(target, raw, { type: "box", ignoreSize: map$1([0, 1], function(hvIdx) { if (sizeCalculable(raw, hvIdx)) cellSizeArr[hvIdx] = "auto"; return cellSizeArr[hvIdx] != null && cellSizeArr[hvIdx] !== "auto"; }) }); } //#endregion //#region node_modules/echarts/lib/component/calendar/CalendarView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CalendarView = function(_super) { __extends(CalendarView, _super); function CalendarView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = CalendarView.type; return _this; } CalendarView.prototype.render = function(calendarModel, ecModel, api) { var group = this.group; group.removeAll(); var coordSys = calendarModel.coordinateSystem; var rangeData = coordSys.getRangeInfo(); var orient = coordSys.getOrient(); var localeModel = ecModel.getLocaleModel(); this._renderDayRect(calendarModel, rangeData, group); this._renderLines(calendarModel, rangeData, orient, group); this._renderYearText(calendarModel, rangeData, orient, group); this._renderMonthText(calendarModel, localeModel, orient, group); this._renderWeekText(calendarModel, localeModel, rangeData, orient, group); }; CalendarView.prototype._renderDayRect = function(calendarModel, rangeData, group) { var coordSys = calendarModel.coordinateSystem; var itemRectStyleModel = calendarModel.getModel("itemStyle").getItemStyle(); var sw = coordSys.getCellWidth(); var sh = coordSys.getCellHeight(); for (var i = rangeData.start.time; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) { var point = coordSys.dataToCalendarLayout([i], false).tl; var rect = new Rect$2({ shape: { x: point[0], y: point[1], width: sw, height: sh }, cursor: "default", style: itemRectStyleModel }); group.add(rect); } }; CalendarView.prototype._renderLines = function(calendarModel, rangeData, orient, group) { var self = this; var coordSys = calendarModel.coordinateSystem; var lineStyleModel = calendarModel.getModel(["splitLine", "lineStyle"]).getLineStyle(); var show = calendarModel.get(["splitLine", "show"]); var lineWidth = lineStyleModel.lineWidth; this._tlpoints = []; this._blpoints = []; this._firstDayOfMonth = []; this._firstDayPoints = []; var firstDay = rangeData.start; for (var i = 0; firstDay.time <= rangeData.end.time; i++) { addPoints(firstDay.formatedDate); if (i === 0) firstDay = coordSys.getDateInfo(rangeData.start.y + "-" + rangeData.start.m); var date = firstDay.date; date.setMonth(date.getMonth() + 1); firstDay = coordSys.getDateInfo(date); } addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate); function addPoints(date) { self._firstDayOfMonth.push(coordSys.getDateInfo(date)); self._firstDayPoints.push(coordSys.dataToCalendarLayout([date], false).tl); var points = self._getLinePointsOfOneWeek(calendarModel, date, orient); self._tlpoints.push(points[0]); self._blpoints.push(points[points.length - 1]); show && self._drawSplitline(points, lineStyleModel, group); } show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group); }; CalendarView.prototype._getEdgesPoints = function(points, lineWidth, orient) { var rs = [points[0].slice(), points[points.length - 1].slice()]; var idx = orient === "horizontal" ? 0 : 1; rs[0][idx] = rs[0][idx] - lineWidth / 2; rs[1][idx] = rs[1][idx] + lineWidth / 2; return rs; }; CalendarView.prototype._drawSplitline = function(points, lineStyle, group) { var poyline = new Polyline$1({ z2: 20, shape: { points }, style: lineStyle }); group.add(poyline); }; CalendarView.prototype._getLinePointsOfOneWeek = function(calendarModel, date, orient) { var coordSys = calendarModel.coordinateSystem; var parsedDate = coordSys.getDateInfo(date); var points = []; for (var i = 0; i < 7; i++) { var tmpD = coordSys.getNextNDay(parsedDate.time, i); var point = coordSys.dataToCalendarLayout([tmpD.time], false); points[2 * tmpD.day] = point.tl; points[2 * tmpD.day + 1] = point[orient === "horizontal" ? "bl" : "tr"]; } return points; }; CalendarView.prototype._formatterLabel = function(formatter, params) { if (isString(formatter) && formatter) return formatTplSimple(formatter, params); if (isFunction(formatter)) return formatter(params); return params.nameMap; }; CalendarView.prototype._yearTextPositionControl = function(textEl, point, orient, position, margin) { var x = point[0]; var y = point[1]; var aligns = ["center", "bottom"]; if (position === "bottom") { y += margin; aligns = ["center", "top"]; } else if (position === "left") x -= margin; else if (position === "right") { x += margin; aligns = ["center", "top"]; } else y -= margin; var rotate = 0; if (position === "left" || position === "right") rotate = Math.PI / 2; return { rotation: rotate, x, y, style: { align: aligns[0], verticalAlign: aligns[1] } }; }; CalendarView.prototype._renderYearText = function(calendarModel, rangeData, orient, group) { var yearLabel = calendarModel.getModel("yearLabel"); if (!yearLabel.get("show")) return; var margin = yearLabel.get("margin"); var pos = yearLabel.get("position"); if (!pos) pos = orient !== "horizontal" ? "top" : "left"; var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]]; var xc = (points[0][0] + points[1][0]) / 2; var yc = (points[0][1] + points[1][1]) / 2; var idx = orient === "horizontal" ? 0 : 1; var posPoints = { top: [xc, points[idx][1]], bottom: [xc, points[1 - idx][1]], left: [points[1 - idx][0], yc], right: [points[idx][0], yc] }; var name = rangeData.start.y; if (+rangeData.end.y > +rangeData.start.y) name = name + "-" + rangeData.end.y; var formatter = yearLabel.get("formatter"); var params = { start: rangeData.start.y, end: rangeData.end.y, nameMap: name }; var yearText = new ZRText({ z2: 30, style: createTextStyle$1(yearLabel, { text: this._formatterLabel(formatter, params) }), silent: yearLabel.get("silent") }); yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin)); group.add(yearText); }; CalendarView.prototype._monthTextPositionControl = function(point, isCenter, orient, position, margin) { var align = "left"; var vAlign = "top"; var x = point[0]; var y = point[1]; if (orient === "horizontal") { y = y + margin; if (isCenter) align = "center"; if (position === "start") vAlign = "bottom"; } else { x = x + margin; if (isCenter) vAlign = "middle"; if (position === "start") align = "right"; } return { x, y, align, verticalAlign: vAlign }; }; CalendarView.prototype._renderMonthText = function(calendarModel, localeModel, orient, group) { var monthLabel = calendarModel.getModel("monthLabel"); if (!monthLabel.get("show")) return; var nameMap = monthLabel.get("nameMap"); var margin = monthLabel.get("margin"); var pos = monthLabel.get("position"); var align = monthLabel.get("align"); var termPoints = [this._tlpoints, this._blpoints]; if (!nameMap || isString(nameMap)) { if (nameMap) localeModel = getLocaleModel(nameMap) || localeModel; nameMap = localeModel.get(["time", "monthAbbr"]) || []; } var idx = pos === "start" ? 0 : 1; var axis = orient === "horizontal" ? 0 : 1; margin = pos === "start" ? -margin : margin; var isCenter = align === "center"; var labelSilent = monthLabel.get("silent"); for (var i = 0; i < termPoints[idx].length - 1; i++) { var tmp = termPoints[idx][i].slice(); var firstDay = this._firstDayOfMonth[i]; if (isCenter) tmp[axis] = (this._firstDayPoints[i][axis] + termPoints[0][i + 1][axis]) / 2; var formatter = monthLabel.get("formatter"); var name_1 = nameMap[+firstDay.m - 1]; var params = { yyyy: firstDay.y, yy: (firstDay.y + "").slice(2), MM: firstDay.m, M: +firstDay.m, nameMap: name_1 }; var monthText = new ZRText({ z2: 30, style: extend(createTextStyle$1(monthLabel, { text: this._formatterLabel(formatter, params) }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)), silent: labelSilent }); group.add(monthText); } }; CalendarView.prototype._weekTextPositionControl = function(point, orient, position, margin, cellSize) { var align = "center"; var vAlign = "middle"; var x = point[0]; var y = point[1]; var isStart = position === "start"; if (orient === "horizontal") { x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2; align = isStart ? "right" : "left"; } else { y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2; vAlign = isStart ? "bottom" : "top"; } return { x, y, align, verticalAlign: vAlign }; }; CalendarView.prototype._renderWeekText = function(calendarModel, localeModel, rangeData, orient, group) { var dayLabel = calendarModel.getModel("dayLabel"); if (!dayLabel.get("show")) return; var coordSys = calendarModel.coordinateSystem; var pos = dayLabel.get("position"); var nameMap = dayLabel.get("nameMap"); var margin = dayLabel.get("margin"); var firstDayOfWeek = coordSys.getFirstDayOfWeek(); if (!nameMap || isString(nameMap)) { if (nameMap) localeModel = getLocaleModel(nameMap) || localeModel; nameMap = localeModel.get(["time", "dayOfWeekShort"]) || map$1(localeModel.get(["time", "dayOfWeekAbbr"]), function(val) { return val[0]; }); } var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time; var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()]; margin = parsePercent(margin, Math.min(cellSize[1], cellSize[0])); if (pos === "start") { start = coordSys.getNextNDay(rangeData.start.time, -(7 + rangeData.fweek)).time; margin = -margin; } var labelSilent = dayLabel.get("silent"); for (var i = 0; i < 7; i++) { var tmpD = coordSys.getNextNDay(start, i); var point = coordSys.dataToCalendarLayout([tmpD.time], false).center; var day = i; day = Math.abs((i + firstDayOfWeek) % 7); var weekText = new ZRText({ z2: 30, style: extend(createTextStyle$1(dayLabel, { text: nameMap[day] }), this._weekTextPositionControl(point, orient, pos, margin, cellSize)), silent: labelSilent }); group.add(weekText); } }; CalendarView.type = "calendar"; return CalendarView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/coord/calendar/Calendar.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PROXIMATE_ONE_DAY = 864e5; var Calendar = function() { function Calendar(calendarModel, ecModel, api) { this.type = "calendar"; this.dimensions = Calendar.dimensions; this.getDimensionsInfo = Calendar.getDimensionsInfo; this._model = calendarModel; this._update(ecModel, api); } Calendar.getDimensionsInfo = function() { return [{ name: "time", type: "time" }, "value"]; }; Calendar.prototype.getRangeInfo = function() { return this._rangeInfo; }; Calendar.prototype.getModel = function() { return this._model; }; Calendar.prototype.getRect = function() { return this._rect; }; Calendar.prototype.getCellWidth = function() { return this._sw; }; Calendar.prototype.getCellHeight = function() { return this._sh; }; Calendar.prototype.getOrient = function() { return this._orient; }; /** * getFirstDayOfWeek * * @example * 0 : start at Sunday * 1 : start at Monday * * @return {number} */ Calendar.prototype.getFirstDayOfWeek = function() { return this._firstDayOfWeek; }; /** * get date info * } */ Calendar.prototype.getDateInfo = function(date) { date = parseDate(date); var y = date.getFullYear(); var m = date.getMonth() + 1; var mStr = m < 10 ? "0" + m : "" + m; var d = date.getDate(); var dStr = d < 10 ? "0" + d : "" + d; var day = date.getDay(); day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7); return { y: y + "", m: mStr, d: dStr, day, time: date.getTime(), formatedDate: y + "-" + mStr + "-" + dStr, date }; }; Calendar.prototype.getNextNDay = function(date, n) { n = n || 0; if (n === 0) return this.getDateInfo(date); date = new Date(this.getDateInfo(date).time); date.setDate(date.getDate() + n); return this.getDateInfo(date); }; Calendar.prototype._update = function(ecModel, api) { this._firstDayOfWeek = +this._model.getModel("dayLabel").get("firstDay"); this._orient = this._model.get("orient"); this._lineWidth = this._model.getModel("itemStyle").getItemStyle().lineWidth || 0; this._rangeInfo = this._getRangeInfo(this._initRangeOption()); var weeks = this._rangeInfo.weeks || 1; var whNames = ["width", "height"]; var cellSize = this._model.getCellSize().slice(); var layoutParams = this._model.getBoxLayoutParams(); var cellNumbers = this._orient === "horizontal" ? [weeks, 7] : [7, weeks]; each$12([0, 1], function(idx) { if (cellSizeSpecified(cellSize, idx)) layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx]; }); var whGlobal = { width: api.getWidth(), height: api.getHeight() }; var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal); each$12([0, 1], function(idx) { if (!cellSizeSpecified(cellSize, idx)) cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx]; }); function cellSizeSpecified(cellSize, idx) { return cellSize[idx] != null && cellSize[idx] !== "auto"; } this._sw = cellSize[0]; this._sh = cellSize[1]; }; /** * Convert a time data(time, value) item to (x, y) point. */ Calendar.prototype.dataToPoint = function(data, clamp, out) { out = out || []; isArray$1(data) && (data = data[0]); clamp ??= true; var dayInfo = this.getDateInfo(data); var range = this._rangeInfo; var date = dayInfo.formatedDate; if (clamp && !(dayInfo.time >= range.start.time && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY)) { out[0] = out[1] = NaN; return out; } var week = dayInfo.day; var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek; if (this._orient === "vertical") { out[0] = this._rect.x + week * this._sw + this._sw / 2; out[1] = this._rect.y + nthWeek * this._sh + this._sh / 2; } else { out[0] = this._rect.x + nthWeek * this._sw + this._sw / 2; out[1] = this._rect.y + week * this._sh + this._sh / 2; } return out; }; /** * Convert a (x, y) point to time data */ Calendar.prototype.pointToData = function(point) { var date = this.pointToDate(point); return date && date.time; }; Calendar.prototype.dataToLayout = function(data, clamp, out) { out = out || {}; var rect = out.rect = out.rect || {}; var contentRect = out.contentRect = out.contentRect || {}; var point = this.dataToPoint(data, clamp); rect.x = point[0] - this._sw / 2; rect.y = point[1] - this._sh / 2; rect.width = this._sw; rect.height = this._sh; BoundingRect.copy(contentRect, rect); expandOrShrinkRect(contentRect, this._lineWidth / 2, true, true); return out; }; /** * Convert a time date item to (x, y) four point. */ Calendar.prototype.dataToCalendarLayout = function(data, clamp) { var point = this.dataToPoint(data, clamp); return { center: point, tl: [point[0] - this._sw / 2, point[1] - this._sh / 2], tr: [point[0] + this._sw / 2, point[1] - this._sh / 2], br: [point[0] + this._sw / 2, point[1] + this._sh / 2], bl: [point[0] - this._sw / 2, point[1] + this._sh / 2] }; }; /** * Convert a (x, y) point to time date * * @param {Array} point point * @return {Object} date */ Calendar.prototype.pointToDate = function(point) { var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1; var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1; var range = this._rangeInfo.range; if (this._orient === "vertical") return this._getDateByWeeksAndDay(nthY, nthX - 1, range); return this._getDateByWeeksAndDay(nthX, nthY - 1, range); }; Calendar.prototype.convertToPixel = function(ecModel, finder, value) { var coordSys = getCoordSys$1(finder); return coordSys === this ? coordSys.dataToPoint(value) : null; }; Calendar.prototype.convertToLayout = function(ecModel, finder, value) { var coordSys = getCoordSys$1(finder); return coordSys === this ? coordSys.dataToLayout(value) : null; }; Calendar.prototype.convertFromPixel = function(ecModel, finder, pixel) { var coordSys = getCoordSys$1(finder); return coordSys === this ? coordSys.pointToData(pixel) : null; }; Calendar.prototype.containPoint = function(point) { console.warn("Not implemented."); return false; }; /** * initRange * Normalize to an [start, end] array */ Calendar.prototype._initRangeOption = function() { var range = this._model.get("range"); var normalizedRange; if (isArray$1(range) && range.length === 1) range = range[0]; if (!isArray$1(range)) { var rangeStr = range.toString(); if (/^\d{4}$/.test(rangeStr)) normalizedRange = [rangeStr + "-01-01", rangeStr + "-12-31"]; if (/^\d{4}[\/|-]\d{1,2}$/.test(rangeStr)) { var start = this.getDateInfo(rangeStr); var firstDay = start.date; firstDay.setMonth(firstDay.getMonth() + 1); var end = this.getNextNDay(firstDay, -1); normalizedRange = [start.formatedDate, end.formatedDate]; } if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rangeStr)) normalizedRange = [rangeStr, rangeStr]; } else normalizedRange = range; if (!normalizedRange) { logError("Invalid date range."); return range; } var tmp = this._getRangeInfo(normalizedRange); if (tmp.start.time > tmp.end.time) normalizedRange.reverse(); return normalizedRange; }; /** * range info * * @private * @param {Array} range range ['2017-01-01', '2017-07-08'] * If range[0] > range[1], they will not be reversed. * @return {Object} obj */ Calendar.prototype._getRangeInfo = function(range) { var parsedRange = [this.getDateInfo(range[0]), this.getDateInfo(range[1])]; var reversed; if (parsedRange[0].time > parsedRange[1].time) { reversed = true; parsedRange.reverse(); } var allDay = Math.floor(parsedRange[1].time / PROXIMATE_ONE_DAY) - Math.floor(parsedRange[0].time / PROXIMATE_ONE_DAY) + 1; var date = new Date(parsedRange[0].time); var startDateNum = date.getDate(); var endDateNum = parsedRange[1].date.getDate(); date.setDate(startDateNum + allDay - 1); var dateNum = date.getDate(); if (dateNum !== endDateNum) { var sign = date.getTime() - parsedRange[1].time > 0 ? 1 : -1; while ((dateNum = date.getDate()) !== endDateNum && (date.getTime() - parsedRange[1].time) * sign > 0) { allDay -= sign; date.setDate(dateNum - sign); } } var weeks = Math.floor((allDay + parsedRange[0].day + 6) / 7); var nthWeek = reversed ? -weeks + 1 : weeks - 1; reversed && parsedRange.reverse(); return { range: [parsedRange[0].formatedDate, parsedRange[1].formatedDate], start: parsedRange[0], end: parsedRange[1], allDay, weeks, nthWeek, fweek: parsedRange[0].day, lweek: parsedRange[1].day }; }; /** * get date by nthWeeks and week day in range * * @private * @param {number} nthWeek the week * @param {number} day the week day * @param {Array} range [d1, d2] * @return {Object} */ Calendar.prototype._getDateByWeeksAndDay = function(nthWeek, day, range) { var rangeInfo = this._getRangeInfo(range); if (nthWeek > rangeInfo.weeks || nthWeek === 0 && day < rangeInfo.fweek || nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) return null; var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day; var date = new Date(rangeInfo.start.time); date.setDate(+rangeInfo.start.d + nthDay); return this.getDateInfo(date); }; Calendar.create = function(ecModel, api) { var calendarList = []; ecModel.eachComponent("calendar", function(calendarModel) { var calendar = new Calendar(calendarModel, ecModel, api); calendarList.push(calendar); calendarModel.coordinateSystem = calendar; }); ecModel.eachComponent(function(mainType, componentModel) { injectCoordSysByOption({ targetModel: componentModel, coordSysType: "calendar", coordSysProvider: simpleCoordSysInjectionProvider }); }); return calendarList; }; Calendar.dimensions = ["time", "value"]; return Calendar; }(); function getCoordSys$1(finder) { var calendarModel = finder.calendarModel; var seriesModel = finder.seriesModel; return calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null; } //#endregion //#region node_modules/echarts/lib/component/calendar/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$24(registers) { registers.registerComponentModel(CalendarModel); registers.registerComponentView(CalendarView); registers.registerCoordinateSystem("calendar", Calendar); } //#endregion //#region node_modules/echarts/lib/coord/matrix/matrixCoordHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var MatrixCellLayoutInfoType = { level: 1, leaf: 2, nonLeaf: 3 }; /** * @public Public to users in `chart.convertFromPixel`. */ var MatrixClampOption = { none: 0, all: 1, body: 2, corner: 3 }; /** * For the x direction, * - find dimension cell from `xMatrixDim`, * - If `xDimCell` or `yDimCell` is not a leaf, return the non-leaf cell itself. * - otherwise find level from `yMatrixDim`. * - otherwise return `NullUndefined`. * * For the y direction, it's the opposite. */ function coordDataToAllCellLevelLayout(coordValue, dims, thisDimIdx) { var result = dims[XY$2[thisDimIdx]].getCell(coordValue); if (!result && isNumber(coordValue) && coordValue < 0) result = dims[XY$2[1 - thisDimIdx]].getUnitLayoutInfo(thisDimIdx, Math.round(coordValue)); return result; } function resetXYLocatorRange(out) { var rg = out || []; rg[0] = rg[0] || []; rg[1] = rg[1] || []; rg[0][0] = rg[0][1] = rg[1][0] = rg[1][1] = NaN; return rg; } /** * If illegal or out of boundary, set NaN to `locOut`. See `isXYLocatorRangeInvalidOnDim`. * x dimension and y dimension are calculated separately. */ function parseCoordRangeOption(locOut, reasonOut, data, dims, clamp) { parseCoordRangeOptionOnOneDim(locOut[0], reasonOut, clamp, data, dims, 0); parseCoordRangeOptionOnOneDim(locOut[1], reasonOut, clamp, data, dims, 1); } function parseCoordRangeOptionOnOneDim(locDimOut, reasonOut, clamp, data, dims, dimIdx) { locDimOut[0] = Infinity; locDimOut[1] = -Infinity; var dataOnDim = data[dimIdx]; var coordValArr = isArray$1(dataOnDim) ? dataOnDim : [dataOnDim]; var len = coordValArr.length; var hasClamp = !!clamp; if (len >= 1) { parseCoordRangeOptionOnOneDimOnePart(locDimOut, reasonOut, coordValArr, hasClamp, dims, dimIdx, 0); if (len > 1) parseCoordRangeOptionOnOneDimOnePart(locDimOut, reasonOut, coordValArr, hasClamp, dims, dimIdx, len - 1); } else { if (reasonOut) reasonOut.push("Should be like [[\"x1\", \"x2\"], [\"y1\", \"y2\"]], or [\"x1\", \"y1\"], rather than empty."); locDimOut[0] = locDimOut[1] = NaN; } if (hasClamp) { var locLowerBound = -dims[XY$2[1 - dimIdx]].getLocatorCount(dimIdx); var locUpperBound = dims[XY$2[dimIdx]].getLocatorCount(dimIdx) - 1; if (clamp === MatrixClampOption.body) locLowerBound = mathMax$9(0, locLowerBound); else if (clamp === MatrixClampOption.corner) locUpperBound = mathMin$9(-1, locUpperBound); if (locUpperBound < locLowerBound) locLowerBound = locUpperBound = NaN; if (eqNaN(locDimOut[0])) locDimOut[0] = locLowerBound; if (eqNaN(locDimOut[1])) locDimOut[1] = locUpperBound; locDimOut[0] = mathMax$9(mathMin$9(locDimOut[0], locUpperBound), locLowerBound); locDimOut[1] = mathMax$9(mathMin$9(locDimOut[1], locUpperBound), locLowerBound); } } function parseCoordRangeOptionOnOneDimOnePart(locDimOut, reasonOut, coordValArr, hasClamp, dims, dimIdx, partIdx) { var layout = coordDataToAllCellLevelLayout(coordValArr[partIdx], dims, dimIdx); if (!layout) { if (!hasClamp && reasonOut) reasonOut.push("Can not find cell by coord[" + dimIdx + "][" + partIdx + "]."); locDimOut[0] = locDimOut[1] = NaN; return; } var locatorA = layout.id[XY$2[dimIdx]]; var locatorB = locatorA; var dimCell = cellLayoutInfoToDimCell(layout); if (dimCell) locatorB += dimCell.span[XY$2[dimIdx]] - 1; locDimOut[0] = mathMin$9(locDimOut[0], locatorA, locatorB); locDimOut[1] = mathMax$9(locDimOut[1], locatorA, locatorB); } /** * @param locatorRange Must be the return of `parseCoordRangeOption`, * where if not NaN, it must be a valid locator. */ function isXYLocatorRangeInvalidOnDim(locatorRange, dimIdx) { return eqNaN(locatorRange[dimIdx][0]) || eqNaN(locatorRange[dimIdx][1]); } function resolveXYLocatorRangeByCellMerge(inOutLocatorRange, outMergedMarkList, mergeDefList, mergeDefListTravelLen) { outMergedMarkList = outMergedMarkList || _tmpOutMergedMarkList; for (var idx = 0; idx < mergeDefListTravelLen; idx++) outMergedMarkList[idx] = false; while (true) { var expanded = false; for (var idx = 0; idx < mergeDefListTravelLen; idx++) { var mergeDef = mergeDefList[idx]; if (!outMergedMarkList[idx] && mergeDef.cellMergeOwner && expandXYLocatorRangeIfIntersect(inOutLocatorRange, mergeDef.locatorRange)) { outMergedMarkList[idx] = true; expanded = true; } } if (!expanded) break; } } var _tmpOutMergedMarkList = []; function expandXYLocatorRangeIfIntersect(thisLocRange, otherLocRange) { if (!locatorRangeIntersectOneDim(thisLocRange[0], otherLocRange[0]) || !locatorRangeIntersectOneDim(thisLocRange[1], otherLocRange[1])) return false; thisLocRange[0][0] = mathMin$9(thisLocRange[0][0], otherLocRange[0][0]); thisLocRange[0][1] = mathMax$9(thisLocRange[0][1], otherLocRange[0][1]); thisLocRange[1][0] = mathMin$9(thisLocRange[1][0], otherLocRange[1][0]); thisLocRange[1][1] = mathMax$9(thisLocRange[1][1], otherLocRange[1][1]); return true; } function locatorRangeIntersectOneDim(locRange1OneDim, locRange2OneDim) { return locRange1OneDim[1] >= locRange2OneDim[0] && locRange1OneDim[0] <= locRange2OneDim[1]; } function fillIdSpanFromLocatorRange(owner, locatorRange) { owner.id.set(locatorRange[0][0], locatorRange[1][0]); owner.span.set(locatorRange[0][1] - owner.id.x + 1, locatorRange[1][1] - owner.id.y + 1); } function cloneXYLocatorRange(target, source) { target[0][0] = source[0][0]; target[0][1] = source[0][1]; target[1][0] = source[1][0]; target[1][1] = source[1][1]; } /** * If illegal, the corresponding x/y/width/height is set to `NaN`. * `x/width` or `y/height` is supported to be calculated separately, * i.e., one side are NaN, the other side are normal. * @param oneDimOut only write to `x/width` or `y/height`, depending on `dimIdx`. */ function xyLocatorRangeToRectOneDim(oneDimOut, locRange, dims, dimIdx) { var layoutMin = coordDataToAllCellLevelLayout(locRange[dimIdx][0], dims, dimIdx); var layoutMax = coordDataToAllCellLevelLayout(locRange[dimIdx][1], dims, dimIdx); oneDimOut[XY$2[dimIdx]] = oneDimOut[WH$2[dimIdx]] = NaN; if (layoutMin && layoutMax) { oneDimOut[XY$2[dimIdx]] = layoutMin.xy; oneDimOut[WH$2[dimIdx]] = layoutMax.xy + layoutMax.wh - layoutMin.xy; } } /** * @usage To get/set on dimension, use: * `xyVal[XY[dim]] = val;` // set on this dimension. * `xyVal[XY[1 - dim]] = val;` // set on the perpendicular dimension. */ function setDimXYValue(out, dimIdx, valueOnThisDim, valueOnOtherDim) { out[XY$2[dimIdx]] = valueOnThisDim; out[XY$2[1 - dimIdx]] = valueOnOtherDim; return out; } /** * Return NullUndefined if not dimension cell. */ function cellLayoutInfoToDimCell(cellLayoutInfo) { return cellLayoutInfo && (cellLayoutInfo.type === MatrixCellLayoutInfoType.leaf || cellLayoutInfo.type === MatrixCellLayoutInfoType.nonLeaf) ? cellLayoutInfo : null; } function createNaNRectLike() { return { x: NaN, y: NaN, width: NaN, height: NaN }; } //#endregion //#region node_modules/echarts/lib/coord/matrix/MatrixDim.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Lifetime: the same with `MatrixModel`, but different from `coord/Matrix`. */ var MatrixDim = function() { function MatrixDim(dim, dimModel) { this._cells = []; this._levels = []; this.dim = dim; this.dimIdx = dim === "x" ? 0 : 1; this._model = dimModel; this._uniqueValueGen = createUniqueValueGenerator(dim); var dimModelData = dimModel.get("data", true); var length = dimModel.get("length", true); if (dimModelData != null && !isArray$1(dimModelData)) { error("Illegal echarts option - matrix." + this.dim + ".data must be an array if specified."); dimModelData = []; } if (dimModelData) this._initByDimModelData(dimModelData); else if (length != null) { dimModelData = Array(length); for (var i = 0; i < length; i++) dimModelData[i] = null; this._initByDimModelData(dimModelData); } else this._initBySeriesData(); } MatrixDim.prototype._initByDimModelData = function(dimModelData) { var self = this; var _cells = self._cells; var _levels = self._levels; var sameLocatorCellsLists = []; var _cellCount = 0; self._leavesCount = traverseInitCells(dimModelData, 0, 0); postInitCells(); return; function traverseInitCells(dimModelData, firstLeafLocator, level) { var totalSpan = 0; if (!dimModelData) return totalSpan; each$12(dimModelData, function(option, optionIdx) { var invalidOption = false; var cellOption; if (isString(option)) cellOption = { value: option }; else if (isObject$3(option)) { cellOption = option; if (option.value != null && !isString(option.value)) { invalidOption = true; cellOption = { value: null }; } } else { cellOption = { value: null }; if (option != null) invalidOption = true; } if (invalidOption) error("Illegal echarts option - matrix." + self.dim + ".data[" + optionIdx + "] must be `string | {value: string}`."); var cell = { type: MatrixCellLayoutInfoType.nonLeaf, ordinal: NaN, level, firstLeafLocator, id: new Point(), span: setDimXYValue(new Point(), self.dimIdx, 1, 1), option: cellOption, xy: NaN, wh: NaN, dim: self, rect: createNaNRectLike() }; _cellCount++; (sameLocatorCellsLists[firstLeafLocator] || (sameLocatorCellsLists[firstLeafLocator] = [])).push(cell); if (!_levels[level]) _levels[level] = { type: MatrixCellLayoutInfoType.level, xy: NaN, wh: NaN, option: null, id: new Point(), dim: self }; var childrenSpan = traverseInitCells(cellOption.children, firstLeafLocator, level + 1); var subSpan = Math.max(1, childrenSpan); cell.span[XY$2[self.dimIdx]] = subSpan; totalSpan += subSpan; firstLeafLocator += subSpan; }); return totalSpan; } function postInitCells() { var categories = []; while (_cells.length < _cellCount) for (var locator = 0; locator < sameLocatorCellsLists.length; locator++) { var cell = sameLocatorCellsLists[locator].pop(); if (cell) { cell.ordinal = categories.length; var val = cell.option.value; categories.push(val); _cells.push(cell); self._uniqueValueGen.calcDupBase(val); } } self._uniqueValueGen.ensureValueUnique(categories, _cells); self._scale = new OrdinalScale({ ordinalMeta: self._ordinalMeta = new OrdinalMeta({ categories, needCollect: false, deduplication: false }) }); for (var idx = 0; idx < self._leavesCount; idx++) { var leaf = self._cells[idx]; leaf.type = MatrixCellLayoutInfoType.leaf; leaf.span[XY$2[1 - self.dimIdx]] = self._levels.length - leaf.level; } self._initCellsId(); self._initLevelIdOptions(); } }; MatrixDim.prototype._initBySeriesData = function() { var self = this; self._leavesCount = 0; self._levels = [{ type: MatrixCellLayoutInfoType.level, xy: NaN, wh: NaN, option: null, id: new Point(), dim: self }]; self._initLevelIdOptions(); self._scale = new OrdinalScale({ ordinalMeta: self._ordinalMeta = new OrdinalMeta({ needCollect: true, deduplication: true, onCollect: function(value, ordinalNumber) { var cell = self._cells[ordinalNumber] = { type: MatrixCellLayoutInfoType.leaf, ordinal: ordinalNumber, level: 0, firstLeafLocator: ordinalNumber, id: new Point(), span: setDimXYValue(new Point(), self.dimIdx, 1, 1), option: { value: value + "" }, xy: NaN, wh: NaN, dim: self, rect: createNaNRectLike() }; self._leavesCount++; self._setCellId(cell); } }) }); }; MatrixDim.prototype._setCellId = function(cell) { var levelsLen = this._levels.length; var dimIdx = this.dimIdx; setDimXYValue(cell.id, dimIdx, cell.firstLeafLocator, cell.level - levelsLen); }; MatrixDim.prototype._initCellsId = function() { var levelsLen = this._levels.length; var dimIdx = this.dimIdx; each$12(this._cells, function(cell) { setDimXYValue(cell.id, dimIdx, cell.firstLeafLocator, cell.level - levelsLen); }); }; MatrixDim.prototype._initLevelIdOptions = function() { var levelsLen = this._levels.length; var dimIdx = this.dimIdx; var levelOptionList = this._model.get("levels", true); levelOptionList = isArray$1(levelOptionList) ? levelOptionList : []; each$12(this._levels, function(levelCfg, level) { setDimXYValue(levelCfg.id, dimIdx, 0, level - levelsLen); levelCfg.option = levelOptionList[level]; }); }; MatrixDim.prototype.shouldShow = function() { return !!this._model.getShallow("show", true); }; /** * Iterate leaves (they are layout units) if dimIdx === this.dimIdx. * Iterate levels if dimIdx !== this.dimIdx. */ MatrixDim.prototype.resetLayoutIterator = function(it, dimIdx, startLocator, count) { it = it || new ListIterator(); if (dimIdx === this.dimIdx) { var len = this._leavesCount; var startIdx = startLocator != null ? Math.max(0, startLocator) : 0; count = count != null ? Math.min(count, len) : len; it.reset(this._cells, startIdx, startIdx + count); } else { var len = this._levels.length; var startIdx = startLocator != null ? Math.max(0, startLocator + len) : 0; count = count != null ? Math.min(count, len) : len; it.reset(this._levels, startIdx, startIdx + count); } return it; }; MatrixDim.prototype.resetCellIterator = function(it) { return (it || new ListIterator()).reset(this._cells, 0); }; MatrixDim.prototype.resetLevelIterator = function(it) { return (it || new ListIterator()).reset(this._levels, 0); }; MatrixDim.prototype.getLayout = function(outRect, dimIdx, locator) { var layout = this.getUnitLayoutInfo(dimIdx, locator); outRect[XY$2[dimIdx]] = layout ? layout.xy : NaN; outRect[WH$2[dimIdx]] = layout ? layout.wh : NaN; }; /** * Get leaf cell or get level info. * Should be able to return null/undefined if not found on x or y, thus input `dimIdx` is needed. */ MatrixDim.prototype.getUnitLayoutInfo = function(dimIdx, locator) { return dimIdx === this.dimIdx ? locator < this._leavesCount ? this._cells[locator] : void 0 : this._levels[locator + this._levels.length]; }; /** * Get dimension cell by data, including leaves and non-leaves. */ MatrixDim.prototype.getCell = function(value) { var ordinal = this._scale.parse(value); return eqNaN(ordinal) ? void 0 : this._cells[ordinal]; }; /** * Get leaf count or get level count. */ MatrixDim.prototype.getLocatorCount = function(dimIdx) { return dimIdx === this.dimIdx ? this._leavesCount : this._levels.length; }; MatrixDim.prototype.getOrdinalMeta = function() { return this._ordinalMeta; }; return MatrixDim; }(); function createUniqueValueGenerator(dim) { var dimUpper = dim.toUpperCase(); var defaultValReg = new RegExp("^" + dimUpper + "([0-9]+)$"); var dupBase = 0; function calcDupBase(val) { var matchResult; if (val != null && (matchResult = val.match(defaultValReg))) dupBase = mathMax$9(dupBase, +matchResult[1] + 1); } function makeUniqueValue() { return "" + dimUpper + dupBase++; } function ensureValueUnique(categories, cells) { var cateMap = createHashMap(); for (var idx = 0; idx < categories.length; idx++) { var value = categories[idx]; if (value == null || cateMap.get(value) != null) { categories[idx] = value = makeUniqueValue(); cells[idx].option = defaults({ value }, cells[idx].option); } cateMap.set(value, true); } } return { calcDupBase, ensureValueUnique }; } //#endregion //#region node_modules/echarts/lib/coord/matrix/MatrixBodyCorner.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Lifetime: the same with `MatrixModel`, but different from `coord/Matrix`. */ var MatrixBodyCorner = function() { function MatrixBodyCorner(kind, bodyOrCornerModel, dims) { this._model = bodyOrCornerModel; this._dims = dims; this._kind = kind; this._cellMergeOwnerList = []; } /** * Can not be called before series models initialization finished, since the ordinalMeta may * use collect the values from `series.data` in series initialization. */ MatrixBodyCorner.prototype._ensureCellMap = function() { var self = this; var _cellMap = self._cellMap; if (!_cellMap) { _cellMap = self._cellMap = createHashMap(); fillCellMap(); } return _cellMap; function fillCellMap() { var parsedList = []; var cellOptionList = self._model.getShallow("data"); if (cellOptionList && !isArray$1(cellOptionList)) { error("matrix." + cellOptionList + ".data must be an array if specified."); cellOptionList = null; } each$12(cellOptionList, function(option, idx) { if (!isObject$3(option) || !isArray$1(option.coord)) { error("Illegal matrix." + self._kind + ".data[" + idx + "], must be a {coord: [...], ...}"); return; } var locatorRange = resetXYLocatorRange([]); var reasonArr = null; reasonArr = []; parseCoordRangeOption(locatorRange, reasonArr, option.coord, self._dims, option.coordClamp ? MatrixClampOption[self._kind] : MatrixClampOption.none); if (isXYLocatorRangeInvalidOnDim(locatorRange, 0) || isXYLocatorRangeInvalidOnDim(locatorRange, 1)) { error("Can not determine cells by option matrix." + self._kind + ".data[" + idx + "]: " + ("" + reasonArr.join(" "))); return; } var cellMergeOwner = option && option.mergeCells; var parsed = { id: new Point(), span: new Point(), locatorRange, option, cellMergeOwner }; fillIdSpanFromLocatorRange(parsed, locatorRange); parsedList.push(parsed); }); var mergedMarkList = []; for (var parsedIdx = 0; parsedIdx < parsedList.length; parsedIdx++) { var parsed = parsedList[parsedIdx]; if (!parsed.cellMergeOwner) continue; var locatorRange = parsed.locatorRange; resolveXYLocatorRangeByCellMerge(locatorRange, mergedMarkList, parsedList, parsedIdx); for (var idx = 0; idx < parsedIdx; idx++) if (mergedMarkList[idx]) parsedList[idx].cellMergeOwner = false; if (locatorRange[0][0] !== parsed.id.x || locatorRange[1][0] !== parsed.id.y) { parsed.cellMergeOwner = false; var newOption = extend({}, parsed.option); newOption.coord = null; var newParsed = { id: new Point(), span: new Point(), locatorRange, option: newOption, cellMergeOwner: true }; fillIdSpanFromLocatorRange(newParsed, locatorRange); parsedList.push(newParsed); } } each$12(parsedList, function(parsed) { var topLeftCell = ensureBodyOrCornerCell(parsed.id.x, parsed.id.y); if (parsed.cellMergeOwner) { topLeftCell.cellMergeOwner = true; topLeftCell.span = parsed.span; topLeftCell.locatorRange = parsed.locatorRange; topLeftCell.spanRect = createNaNRectLike(); self._cellMergeOwnerList.push(topLeftCell); } if (!parsed.cellMergeOwner && !parsed.option) return; for (var yidx = 0; yidx < parsed.span.y; yidx++) for (var xidx = 0; xidx < parsed.span.x; xidx++) { var cell = ensureBodyOrCornerCell(parsed.id.x + xidx, parsed.id.y + yidx); cell.option = parsed.option; if (parsed.cellMergeOwner) cell.inSpanOf = topLeftCell; } }); } function ensureBodyOrCornerCell(x, y) { var key = makeCellMapKey(x, y); var cell = _cellMap.get(key); if (!cell) cell = _cellMap.set(key, { id: new Point(x, y), option: null, inSpanOf: null, span: null, spanRect: null, locatorRange: null, cellMergeOwner: false }); return cell; } }; /** * Body cells or corner cell are not commonly defined specifically, especially in a large * table, thus his is a sparse data structure - bodys or corner cells exist only if there * are options specified to it (in `matrix.body.data` or `matrix.corner.data`); * otherwise, return `NullUndefined`. */ MatrixBodyCorner.prototype.getCell = function(xy) { return this._ensureCellMap().get(makeCellMapKey(xy[0], xy[1])); }; /** * Only cell existing (has specific definition or props) will be travelled. */ MatrixBodyCorner.prototype.travelExistingCells = function(cb) { this._ensureCellMap().each(cb); }; /** * @param locatorRange Must be the return of `parseCoordRangeOption`. */ MatrixBodyCorner.prototype.expandRangeByCellMerge = function(locatorRange) { if (!isXYLocatorRangeInvalidOnDim(locatorRange, 0) && !isXYLocatorRangeInvalidOnDim(locatorRange, 1) && locatorRange[0][0] === locatorRange[0][1] && locatorRange[1][0] === locatorRange[1][1]) { _tmpERBCMLocator[0] = locatorRange[0][0]; _tmpERBCMLocator[1] = locatorRange[1][0]; var cell = this.getCell(_tmpERBCMLocator); var inSpanOf = cell && cell.inSpanOf; if (inSpanOf) { cloneXYLocatorRange(locatorRange, inSpanOf.locatorRange); return; } } var list = this._cellMergeOwnerList; resolveXYLocatorRangeByCellMerge(locatorRange, null, list, list.length); }; return MatrixBodyCorner; }(); var _tmpERBCMLocator = []; function makeCellMapKey(x, y) { return x + "|" + y; } //#endregion //#region node_modules/echarts/lib/coord/matrix/MatrixModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var defaultLabelOption = { show: true, color: tokens.color.secondary, overflow: "break", lineOverflow: "truncate", padding: [ 2, 3, 2, 3 ], distance: 0 }; function makeDefaultCellItemStyleOption(isCorner) { return { color: "none", borderWidth: 1, borderColor: isCorner ? "none" : tokens.color.borderTint }; } var defaultDimOption = { show: true, label: defaultLabelOption, itemStyle: makeDefaultCellItemStyleOption(false), silent: void 0, dividerLineStyle: { width: 1, color: tokens.color.border } }; var defaultMatrixOption = { z: -50, left: "10%", top: "10%", right: "10%", bottom: "10%", x: defaultDimOption, y: defaultDimOption, body: { label: defaultLabelOption, itemStyle: makeDefaultCellItemStyleOption(false), silent: void 0 }, corner: { label: defaultLabelOption, itemStyle: makeDefaultCellItemStyleOption(true), silent: void 0 }, backgroundStyle: { color: "none", borderColor: tokens.color.axisLine, borderWidth: 1 }, triggerEvent: false }; var MatrixModel = function(_super) { __extends(MatrixModel, _super); function MatrixModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MatrixModel.type; return _this; } MatrixModel.prototype.optionUpdated = function() { var dimModels = this._dimModels = { x: new MatrixDimensionModel(this.get("x", true) || {}), y: new MatrixDimensionModel(this.get("y", true) || {}) }; dimModels.x.option.type = dimModels.y.option.type = "category"; var dims = { x: dimModels.x.dim = new MatrixDim("x", dimModels.x), y: dimModels.y.dim = new MatrixDim("y", dimModels.y) }; this._body = new MatrixBodyCorner("body", new Model(this.getShallow("body")), dims); this._corner = new MatrixBodyCorner("corner", new Model(this.getShallow("corner")), dims); }; MatrixModel.prototype.getDimensionModel = function(dim) { return this._dimModels[dim]; }; MatrixModel.prototype.getBody = function() { return this._body; }; MatrixModel.prototype.getCorner = function() { return this._corner; }; MatrixModel.type = "matrix"; MatrixModel.layoutMode = "box"; MatrixModel.defaultOption = defaultMatrixOption; return MatrixModel; }(ComponentModel); var MatrixDimensionModel = function(_super) { __extends(MatrixDimensionModel, _super); function MatrixDimensionModel() { return _super !== null && _super.apply(this, arguments) || this; } MatrixDimensionModel.prototype.getOrdinalMeta = function() { return this.dim.getOrdinalMeta(); }; return MatrixDimensionModel; }(Model); //#endregion //#region node_modules/echarts/lib/component/matrix/MatrixView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var round = Math.round; var Z2_BACKGROUND = 0; var Z2_OUTER_BORDER = 99; var Z2_BODY_CORNER_CELL_DEFAULT = { normal: 25, special: 100 }; var Z2_DIMENSION_CELL_DEFAULT = { normal: 50, special: 125 }; var MatrixView = function(_super) { __extends(MatrixView, _super); function MatrixView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MatrixView.type; return _this; } MatrixView.prototype.render = function(matrixModel, ecModel) { this.group.removeAll(); var group = this.group; var rect = matrixModel.coordinateSystem.getRect(); var xDimModel = matrixModel.getDimensionModel("x"); var yDimModel = matrixModel.getDimensionModel("y"); var xDim = xDimModel.dim; var yDim = yDimModel.dim; renderDimensionCells(group, matrixModel, ecModel); createBodyAndCorner(group, matrixModel, xDim, yDim, ecModel); var outerBorderZ2 = retrieve2(matrixModel.getShallow("borderZ2", true), Z2_OUTER_BORDER); var dividerLineZ2 = outerBorderZ2 - 1; var bgStyle = matrixModel.getModel("backgroundStyle").getItemStyle(["borderWidth"]); bgStyle.lineWidth = 0; var borderStyle = matrixModel.getModel("backgroundStyle").getItemStyle([ "color", "decal", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY" ]); borderStyle.fill = "none"; var bgRect = createMatrixRect(rect.clone(), bgStyle, Z2_BACKGROUND); var borderRect = createMatrixRect(rect.clone(), borderStyle, outerBorderZ2); bgRect.silent = true; borderRect.silent = true; group.add(bgRect); group.add(borderRect); var xDimCell0 = xDim.getUnitLayoutInfo(0, 0); var yDimCell0 = yDim.getUnitLayoutInfo(1, 0); if (xDimCell0 && yDimCell0) { if (xDim.shouldShow()) group.add(createMatrixLine({ x1: rect.x, y1: yDimCell0.xy, x2: rect.x + rect.width, y2: yDimCell0.xy }, xDimModel.getModel("dividerLineStyle").getLineStyle(), dividerLineZ2)); if (yDim.shouldShow()) group.add(createMatrixLine({ x1: xDimCell0.xy, y1: rect.y, x2: xDimCell0.xy, y2: rect.y + rect.height }, yDimModel.getModel("dividerLineStyle").getLineStyle(), dividerLineZ2)); } }; MatrixView.type = "matrix"; return MatrixView; }(ComponentView); function renderDimensionCells(group, matrixModel, ecModel) { renderOnDimension(0); renderOnDimension(1); function renderOnDimension(dimIdx) { var thisDimModel = matrixModel.getDimensionModel(XY$2[dimIdx]); var thisDim = thisDimModel.dim; if (!thisDim.shouldShow()) return; var thisDimBgStyleModel = thisDimModel.getModel("itemStyle"); var thisDimLabelModel = thisDimModel.getModel("label"); var tooltipOption = matrixModel.getShallow("tooltip", true); var xyLocator = []; for (var it_1 = thisDim.resetCellIterator(); it_1.next();) { var dimCell = it_1.item; var shape = {}; BoundingRect.copy(shape, dimCell.rect); set$1(xyLocator, dimCell.id.x, dimCell.id.y); createMatrixCell(xyLocator, matrixModel, group, ecModel, dimCell.option, thisDimBgStyleModel, thisDimLabelModel, thisDimModel, shape, dimCell.option.value, Z2_DIMENSION_CELL_DEFAULT, tooltipOption, dimIdx === 0 ? "x" : "y"); } } } function createBodyAndCorner(group, matrixModel, xDim, yDim, ecModel) { createBodyOrCornerCells("body", matrixModel.getBody(), xDim, yDim); if (xDim.shouldShow() && yDim.shouldShow()) createBodyOrCornerCells("corner", matrixModel.getCorner(), yDim, xDim); function createBodyOrCornerCells(bodyCornerOptionRoot, bodyOrCorner, dimForCoordX, dimForCoordY) { var parentCellModel = new Model(matrixModel.getShallow(bodyCornerOptionRoot, true)); var parentItemStyleModel = parentCellModel.getModel("itemStyle"); var parentLabelModel = parentCellModel.getModel("label"); var itx = new ListIterator(); var ity = new ListIterator(); var xyLocator = []; var tooltipOption = matrixModel.getShallow("tooltip", true); for (dimForCoordY.resetLayoutIterator(ity, 1); ity.next();) for (dimForCoordX.resetLayoutIterator(itx, 0); itx.next();) { var xLayout = itx.item; var yLayout = ity.item; set$1(xyLocator, xLayout.id.x, yLayout.id.y); var bodyCornerCell = bodyOrCorner.getCell(xyLocator); if (bodyCornerCell && bodyCornerCell.inSpanOf && bodyCornerCell.inSpanOf !== bodyCornerCell) continue; var shape = {}; if (bodyCornerCell && bodyCornerCell.span) BoundingRect.copy(shape, bodyCornerCell.spanRect); else { xLayout.dim.getLayout(shape, 0, xyLocator[0]); yLayout.dim.getLayout(shape, 1, xyLocator[1]); } var bodyCornerCellOption = bodyCornerCell ? bodyCornerCell.option : null; createMatrixCell(xyLocator, matrixModel, group, ecModel, bodyCornerCellOption, parentItemStyleModel, parentLabelModel, parentCellModel, shape, bodyCornerCellOption ? bodyCornerCellOption.value : null, Z2_BODY_CORNER_CELL_DEFAULT, tooltipOption, bodyCornerOptionRoot); } } } function createMatrixCell(xyLocator, matrixModel, group, ecModel, cellOption, parentItemStyleModel, parentLabelModel, parentCellModel, shape, textValue, zrCellDefault, tooltipOption, targetType) { var _a; _tmpCellItemStyleModel.option = cellOption ? cellOption.itemStyle : null; _tmpCellItemStyleModel.parentModel = parentItemStyleModel; _tmpCellModel.option = cellOption; _tmpCellModel.parentModel = parentCellModel; var z2 = retrieve2(_tmpCellModel.getShallow("z2"), cellOption && cellOption.itemStyle ? zrCellDefault.special : zrCellDefault.normal); var tooltipOptionShow = tooltipOption && tooltipOption.show; var cellRect = createMatrixRect(shape, _tmpCellItemStyleModel.getItemStyle(), z2); group.add(cellRect); var cursorOption = _tmpCellModel.get("cursor"); if (cursorOption != null) cellRect.attr("cursor", cursorOption); var cellText; if (textValue != null) { var text = textValue + ""; _tmpCellLabelModel.option = cellOption ? cellOption.label : null; _tmpCellLabelModel.parentModel = parentLabelModel; _tmpCellLabelModel.ecModel = ecModel; var formatter = _tmpCellLabelModel.getShallow("formatter"); if (formatter) { var params = { componentType: "matrix", componentIndex: matrixModel.componentIndex, name: text, value: textValue, coord: xyLocator.slice(), $vars: [ "name", "value", "coord" ] }; if (isString(formatter)) text = formatTplSimple(formatter, params); else if (isFunction(formatter)) { var formattedText = formatter(params); if (formattedText != null) text = formattedText + ""; } } setLabelStyle(cellRect, { normal: _tmpCellLabelModel }, { defaultText: text, autoOverflowArea: true, layoutRect: clone$4(cellRect.shape) }); cellText = cellRect.getTextContent(); if (cellText) { cellText.z2 = z2 + 1; var style = cellText.style; if (style && style.overflow && style.overflow !== "none" && style.lineOverflow) { var clipShape = {}; BoundingRect.copy(clipShape, shape); expandOrShrinkRect(clipShape, (((_a = cellRect.style) === null || _a === void 0 ? void 0 : _a.lineWidth) || 0) / 2, true, true); cellRect.updateInnerText(); cellText.getLocalTransform(_tmpInnerTextTrans); invert(_tmpInnerTextTrans, _tmpInnerTextTrans); BoundingRect.applyTransform(clipShape, clipShape, _tmpInnerTextTrans); cellText.setClipPath(new Rect$2({ shape: clipShape })); } } setTooltipConfig({ el: cellRect, componentModel: matrixModel, itemName: text, itemTooltipOption: tooltipOption, formatterParamsExtra: { xyLocator: xyLocator.slice() } }); } var triggerEvent = matrixModel.get("triggerEvent", true); if (cellText) { var labelSilent = _tmpCellLabelModel.get("silent"); if (labelSilent == null) labelSilent = !(triggerEvent || tooltipOptionShow); cellText.silent = labelSilent; cellText.ignoreHostSilent = true; } var rectSilent = _tmpCellModel.get("silent"); if (rectSilent == null) rectSilent = !cellRect.style || cellRect.style.fill === "none" || !cellRect.style.fill; cellRect.silent = rectSilent; if (triggerEvent && cellRect) { var eventData = { componentType: "matrix", componentIndex: matrixModel.componentIndex, matrixIndex: matrixModel.componentIndex, targetType, name: cellText && cellText.style ? cellText.style.text : void 0, value: textValue, coord: xyLocator.slice() }; getECData(cellRect).eventData = eventData; } clearTmpModel(_tmpCellModel); clearTmpModel(_tmpCellItemStyleModel); clearTmpModel(_tmpCellLabelModel); } var _tmpCellModel = new Model(); var _tmpCellItemStyleModel = new Model(); var _tmpCellLabelModel = new Model(); var _tmpInnerTextTrans = []; function createMatrixRect(shape, style, z2) { var lineWidth = style.lineWidth; if (lineWidth) { var x2Original = shape.x + shape.width; var y2Original = shape.y + shape.height; shape.x = subPixelOptimize$1(shape.x, lineWidth, true); shape.y = subPixelOptimize$1(shape.y, lineWidth, true); shape.width = subPixelOptimize$1(x2Original, lineWidth, true) - shape.x; shape.height = subPixelOptimize$1(y2Original, lineWidth, true) - shape.y; } return new Rect$2({ shape, style, z2 }); } function createMatrixLine(shape, style, z2) { var lineWidth = style.lineWidth; if (lineWidth) { if (round(shape.x1 * 2) === round(shape.x2 * 2)) shape.x1 = shape.x2 = subPixelOptimize$1(shape.x1, lineWidth, true); if (round(shape.y1 * 2) === round(shape.y2 * 2)) shape.y1 = shape.y2 = subPixelOptimize$1(shape.y1, lineWidth, true); } return new Line$1({ shape, style, silent: true, z2 }); } //#endregion //#region node_modules/echarts/lib/coord/matrix/Matrix.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Matrix = function() { function Matrix(matrixModel, ecModel, api) { this.dimensions = Matrix.dimensions; this.type = "matrix"; this._model = matrixModel; var models = this._dimModels = { x: matrixModel.getDimensionModel("x"), y: matrixModel.getDimensionModel("y") }; this._dims = { x: models.x.dim, y: models.y.dim }; this._resize(matrixModel, api); } /** * @see fetchers in `model/referHelper.ts`, * which is used to parse data in ordinal way. * In most series only 'x' and 'y' is required, * but some series, such as heatmap, can specify value. */ Matrix.getDimensionsInfo = function() { return [ { name: "x", type: "ordinal" }, { name: "y", type: "ordinal" }, { name: "value" } ]; }; Matrix.create = function(ecModel, api) { var matrixList = []; ecModel.eachComponent("matrix", function(matrixModel) { var matrix = new Matrix(matrixModel, ecModel, api); matrixList.push(matrix); matrixModel.coordinateSystem = matrix; }); ecModel.eachComponent(function(mainType, componentModel) { injectCoordSysByOption({ targetModel: componentModel, coordSysType: "matrix", coordSysProvider: simpleCoordSysInjectionProvider }); }); return matrixList; }; Matrix.prototype.getRect = function() { return this._rect; }; Matrix.prototype._resize = function(matrixModel, api) { var dims = this._dims; var dimModels = this._dimModels; var rect = this._rect = getLayoutRect(matrixModel.getBoxLayoutParams(), { width: api.getWidth(), height: api.getHeight() }); layOutUnitsOnDimension(dimModels, dims, rect, 0); layOutUnitsOnDimension(dimModels, dims, rect, 1); layOutDimCellsRestInfoByUnit(0, dims); layOutDimCellsRestInfoByUnit(1, dims); layOutBodyCornerCellMerge(this._model.getBody(), dims); layOutBodyCornerCellMerge(this._model.getCorner(), dims); }; /** * @implement * - The input is allowed to be `[NaN/null/undefined, xxx]`/`[xxx, NaN/null/undefined]`; * the return is `[NaN, xxxresult]`/`[xxxresult, NaN]` or clamped boundary value if * `clamp` passed. This is for the usage that only get coord on single x or y. * - Alwasy return an numeric array, but never be null/undefined. * If it can not be located or invalid, return `[NaN, NaN]`. */ Matrix.prototype.dataToPoint = function(data, opt, out) { out = out || []; this.dataToLayout(data, opt, _dtpOutDataToLayout); out[0] = _dtpOutDataToLayout.rect.x + _dtpOutDataToLayout.rect.width / 2; out[1] = _dtpOutDataToLayout.rect.y + _dtpOutDataToLayout.rect.height / 2; return out; }; /** * @implement * - The input is allowed to be `[NaN/null/undefined, xxx]`/`[xxx, NaN/null/undefined]`; * the return is `{x: NaN, width: NaN, y: xxxresulty, height: xxxresulth}`/ * `{y: NaN, height: NaN, x: xxxresultx, width: xxxresultw}` or clamped boundary value * if `clamp` passed. This is for the usage that only get coord on single x or y. * - The returned `out.rect` and `out.matrixXYLocatorRange` is always an object or an 2d-array, * but never be null/undefined. If it cannot be located or invalid, `NaN` is in their * corresponding number props. * - Do not provide `out.contentRect`, because it's allowed to input non-leaf dimension x/y or * a range of x/y, which determines a rect covering multiple cells (even not merged), in which * case the padding and borderWidth can not be determined to make a contentRect. Therefore only * return `out.rect` in any case for consistency. The caller is responsible for adding space to * avoid covering cell borders, if necessary. */ Matrix.prototype.dataToLayout = function(data, opt, out) { var dims = this._dims; out = out || {}; var outRect = out.rect = out.rect || {}; outRect.x = outRect.y = outRect.width = outRect.height = NaN; var outLocRange = out.matrixXYLocatorRange = resetXYLocatorRange(out.matrixXYLocatorRange); if (!isArray$1(data)) { error("Input data must be an array in `convertToLayout`, `convertToPixel`"); return out; } parseCoordRangeOption(outLocRange, null, data, dims, retrieve2(opt && opt.clamp, MatrixClampOption.none)); if (!opt || !opt.ignoreMergeCells) { if (!opt || opt.clamp !== MatrixClampOption.corner) this._model.getBody().expandRangeByCellMerge(outLocRange); if (!opt || opt.clamp !== MatrixClampOption.body) this._model.getCorner().expandRangeByCellMerge(outLocRange); } xyLocatorRangeToRectOneDim(outRect, outLocRange, dims, 0); xyLocatorRangeToRectOneDim(outRect, outLocRange, dims, 1); return out; }; /** * The returned locator pair can be the input of `dataToPoint` or `dataToLayout`. * * If point[0] is out of the matrix rect, * the out[0] is NaN; * else if it is on the right of top-left corner of body, * the out[0] is the oridinal number (>= 0). * else * out[0] is the locator for corner or header (<= 0). * * The same rule goes for point[1] and out[1]. * * But point[0] and point[1] are calculated separately, i.e., * the reuslt can be `[1, NaN]` or `[NaN, 1]` if only one dimension is out of boundary. * * @implement */ Matrix.prototype.pointToData = function(point, opt, out) { var dims = this._dims; pointToDataOneDimPrepareCtx(_tmpCtxPointToData, 0, dims, point, opt && opt.clamp); pointToDataOneDimPrepareCtx(_tmpCtxPointToData, 1, dims, point, opt && opt.clamp); out = out || []; out[0] = out[1] = NaN; if (_tmpCtxPointToData.y === CtxPointToDataAreaType.inCorner && _tmpCtxPointToData.x === CtxPointToDataAreaType.inBody) pointToDataOnlyHeaderFillOut(_tmpCtxPointToData, out, 0, dims); else if (_tmpCtxPointToData.x === CtxPointToDataAreaType.inCorner && _tmpCtxPointToData.y === CtxPointToDataAreaType.inBody) pointToDataOnlyHeaderFillOut(_tmpCtxPointToData, out, 1, dims); else { pointToDataBodyCornerFillOut(_tmpCtxPointToData, out, 0, dims); pointToDataBodyCornerFillOut(_tmpCtxPointToData, out, 1, dims); } return out; }; Matrix.prototype.convertToPixel = function(ecModel, finder, value, opt) { var coordSys = getCoordSys(finder); return coordSys === this ? coordSys.dataToPoint(value, opt) : void 0; }; Matrix.prototype.convertToLayout = function(ecModel, finder, value, opt) { var coordSys = getCoordSys(finder); return coordSys === this ? coordSys.dataToLayout(value, opt) : void 0; }; Matrix.prototype.convertFromPixel = function(ecModel, finder, pixel, opt) { var coordSys = getCoordSys(finder); return coordSys === this ? coordSys.pointToData(pixel, opt) : void 0; }; Matrix.prototype.containPoint = function(point) { return this._rect.contain(point[0], point[1]); }; Matrix.dimensions = [ "x", "y", "value" ]; return Matrix; }(); var _dtpOutDataToLayout = { rect: createNaNRectLike() }; var _ptdLevelIt = new ListIterator(); var _ptdDimCellIt = new ListIterator(); function layOutUnitsOnDimension(dimModels, dims, matrixRect, dimIdx) { var otherDimIdx = 1 - dimIdx; var thisDim = dims[XY$2[dimIdx]]; var otherDim = dims[XY$2[otherDimIdx]]; var otherDimShow = otherDim.shouldShow(); for (var it_1 = thisDim.resetCellIterator(); it_1.next();) it_1.item.wh = it_1.item.xy = NaN; for (var it_2 = otherDim.resetLayoutIterator(null, dimIdx); it_2.next();) it_2.item.wh = it_2.item.xy = NaN; var restSize = matrixRect[WH$2[dimIdx]]; var restCellsCount = thisDim.getLocatorCount(dimIdx) + otherDim.getLocatorCount(dimIdx); var tmpLevelModel = new Model(); for (var it_3 = otherDim.resetLevelIterator(); it_3.next();) { tmpLevelModel.option = it_3.item.option; tmpLevelModel.parentModel = dimModels[XY$2[otherDimIdx]]; layOutSpecified(it_3.item, otherDimShow ? tmpLevelModel.get("levelSize") : 0); } var tmpCellModel = new Model(); for (var it_4 = thisDim.resetCellIterator(); it_4.next();) if (it_4.item.type === MatrixCellLayoutInfoType.leaf) { tmpCellModel.option = it_4.item.option; tmpCellModel.parentModel = void 0; layOutSpecified(it_4.item, tmpCellModel.get("size")); } function layOutSpecified(item, sizeOption) { var size = parseSizeOption(sizeOption, dimIdx, matrixRect); if (!eqNaN(size)) { item.wh = confineSize(size, restSize); restSize = confineSize(restSize - item.wh); restCellsCount--; } } var computedCellWH = restCellsCount ? restSize / restCellsCount : 0; var notAlignToBigmost = !restCellsCount && restSize >= 1; var currXY = matrixRect[XY$2[dimIdx]]; var maxLocator = thisDim.getLocatorCount(dimIdx) - 1; var it = new ListIterator(); for (otherDim.resetLayoutIterator(it, dimIdx); it.next();) layOutUnspecified(it.item); for (thisDim.resetLayoutIterator(it, dimIdx); it.next();) layOutUnspecified(it.item); function layOutUnspecified(item) { if (eqNaN(item.wh)) item.wh = computedCellWH; item.xy = currXY; if (item.id[XY$2[dimIdx]] === maxLocator && !notAlignToBigmost) item.wh = matrixRect[XY$2[dimIdx]] + matrixRect[WH$2[dimIdx]] - item.xy; currXY += item.wh; } } function layOutDimCellsRestInfoByUnit(dimIdx, dims) { for (var it_5 = dims[XY$2[dimIdx]].resetCellIterator(); it_5.next();) { var dimCell = it_5.item; layOutRectOneDimBasedOnUnit(dimCell.rect, dimIdx, dimCell.id, dimCell.span, dims); layOutRectOneDimBasedOnUnit(dimCell.rect, 1 - dimIdx, dimCell.id, dimCell.span, dims); if (dimCell.type === MatrixCellLayoutInfoType.nonLeaf) { dimCell.xy = dimCell.rect[XY$2[dimIdx]]; dimCell.wh = dimCell.rect[WH$2[dimIdx]]; } } } function layOutBodyCornerCellMerge(bodyOrCorner, dims) { bodyOrCorner.travelExistingCells(function(cell) { var computedSpan = cell.span; if (computedSpan) { var layoutRect = cell.spanRect; var id = cell.id; layOutRectOneDimBasedOnUnit(layoutRect, 0, id, computedSpan, dims); layOutRectOneDimBasedOnUnit(layoutRect, 1, id, computedSpan, dims); } }); } function layOutRectOneDimBasedOnUnit(outRect, dimIdx, id, span, dims) { outRect[WH$2[dimIdx]] = 0; var dim = id[XY$2[dimIdx]] < 0 ? dims[XY$2[1 - dimIdx]] : dims[XY$2[dimIdx]]; var layoutUnit = dim.getUnitLayoutInfo(dimIdx, id[XY$2[dimIdx]]); outRect[XY$2[dimIdx]] = layoutUnit.xy; outRect[WH$2[dimIdx]] = layoutUnit.wh; if (span[XY$2[dimIdx]] > 1) { var layoutUnit2 = dim.getUnitLayoutInfo(dimIdx, id[XY$2[dimIdx]] + span[XY$2[dimIdx]] - 1); outRect[WH$2[dimIdx]] = layoutUnit2.xy + layoutUnit2.wh - layoutUnit.xy; } } /** * Return NaN if not defined or invalid. */ function parseSizeOption(sizeOption, dimIdx, matrixRect) { return confineSize(parsePositionSizeOption(sizeOption, matrixRect[WH$2[dimIdx]]), matrixRect[WH$2[dimIdx]]); } function confineSize(sizeNum, sizeLimit) { return Math.max(Math.min(sizeNum, retrieve2(sizeLimit, Infinity)), 0); } function getCoordSys(finder) { var matrixModel = finder.matrixModel; var seriesModel = finder.seriesModel; return matrixModel ? matrixModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null; } var CtxPointToDataAreaType = { inBody: 1, inCorner: 2, outside: 3 }; var _tmpCtxPointToData = { x: null, y: null, point: [] }; function pointToDataOneDimPrepareCtx(ctx, dimIdx, dims, point, clamp) { var thisDim = dims[XY$2[dimIdx]]; var otherDim = dims[XY$2[1 - dimIdx]]; var bodyMaxUnit = thisDim.getUnitLayoutInfo(dimIdx, thisDim.getLocatorCount(dimIdx) - 1); var body0Unit = thisDim.getUnitLayoutInfo(dimIdx, 0); var cornerMinUnit = otherDim.getUnitLayoutInfo(dimIdx, -otherDim.getLocatorCount(dimIdx)); var cornerMinus1Unit = otherDim.shouldShow() ? otherDim.getUnitLayoutInfo(dimIdx, -1) : null; var coord = ctx.point[dimIdx] = point[dimIdx]; if (!body0Unit && !cornerMinus1Unit) { ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.outside; return; } if (clamp === MatrixClampOption.body) { if (body0Unit) { ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.inBody; coord = mathMin$9(bodyMaxUnit.xy + bodyMaxUnit.wh, mathMax$9(body0Unit.xy, coord)); ctx.point[dimIdx] = coord; } else ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.outside; return; } else if (clamp === MatrixClampOption.corner) { if (cornerMinus1Unit) { ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.inCorner; coord = mathMin$9(cornerMinus1Unit.xy + cornerMinus1Unit.wh, mathMax$9(cornerMinUnit.xy, coord)); ctx.point[dimIdx] = coord; } else ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.outside; return; } var pxLoc0 = body0Unit ? body0Unit.xy : cornerMinus1Unit ? cornerMinus1Unit.xy + cornerMinus1Unit.wh : NaN; var pxMin = cornerMinUnit ? cornerMinUnit.xy : pxLoc0; var pxMax = bodyMaxUnit ? bodyMaxUnit.xy + bodyMaxUnit.wh : pxLoc0; if (coord < pxMin) { if (!clamp) { ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.outside; return; } coord = pxMin; } else if (coord > pxMax) { if (!clamp) { ctx[XY$2[dimIdx]] = CtxPointToDataAreaType.outside; return; } coord = pxMax; } ctx.point[dimIdx] = coord; ctx[XY$2[dimIdx]] = pxLoc0 <= coord && coord <= pxMax ? CtxPointToDataAreaType.inBody : pxMin <= coord && coord <= pxLoc0 ? CtxPointToDataAreaType.inCorner : CtxPointToDataAreaType.outside; } function pointToDataOnlyHeaderFillOut(ctx, partialOut, dimIdx, dims) { var otherDimIdx = 1 - dimIdx; if (ctx[XY$2[dimIdx]] === CtxPointToDataAreaType.outside) return; for (dims[XY$2[dimIdx]].resetCellIterator(_ptdDimCellIt); _ptdDimCellIt.next();) { var cell = _ptdDimCellIt.item; if (isCoordInRect(ctx.point[dimIdx], cell.rect, dimIdx) && isCoordInRect(ctx.point[otherDimIdx], cell.rect, otherDimIdx)) { partialOut[dimIdx] = cell.ordinal; partialOut[otherDimIdx] = cell.id[XY$2[otherDimIdx]]; return; } } } function pointToDataBodyCornerFillOut(ctx, partialOut, dimIdx, dims) { if (ctx[XY$2[dimIdx]] === CtxPointToDataAreaType.outside) return; for ((ctx[XY$2[dimIdx]] === CtxPointToDataAreaType.inCorner ? dims[XY$2[1 - dimIdx]] : dims[XY$2[dimIdx]]).resetLayoutIterator(_ptdLevelIt, dimIdx); _ptdLevelIt.next();) if (isCoordInLayoutInfo(ctx.point[dimIdx], _ptdLevelIt.item)) { partialOut[dimIdx] = _ptdLevelIt.item.id[XY$2[dimIdx]]; return; } } function isCoordInLayoutInfo(coord, cell) { return cell.xy <= coord && coord <= cell.xy + cell.wh; } function isCoordInRect(coord, rect, dimIdx) { return rect[XY$2[dimIdx]] <= coord && coord <= rect[XY$2[dimIdx]] + rect[WH$2[dimIdx]]; } //#endregion //#region node_modules/echarts/lib/component/matrix/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$23(registers) { registers.registerComponentModel(MatrixModel); registers.registerComponentView(MatrixView); registers.registerCoordinateSystem("matrix", Matrix); } //#endregion //#region node_modules/echarts/lib/component/graphic/GraphicModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function setKeyInfoToNewElOption(resultItem, newElOption) { var existElOption = resultItem.existing; newElOption.id = resultItem.keyInfo.id; !newElOption.type && existElOption && (newElOption.type = existElOption.type); if (newElOption.parentId == null) { var newElParentOption = newElOption.parentOption; if (newElParentOption) newElOption.parentId = newElParentOption.id; else if (existElOption) newElOption.parentId = existElOption.parentId; } newElOption.parentOption = null; } function isSetLoc(obj, props) { var isSet; each$12(props, function(prop) { obj[prop] != null && obj[prop] !== "auto" && (isSet = true); }); return isSet; } function mergeNewElOptionToExist(existList, index, newElOption) { var newElOptCopy = extend({}, newElOption); var existElOption = existList[index]; var $action = newElOption.$action || "merge"; if ($action === "merge") { if (existElOption) { var newType = newElOption.type; assert(!newType || existElOption.type === newType, "Please set $action: \"replace\" to change `type`"); merge(existElOption, newElOptCopy, true); mergeLayoutParam(existElOption, newElOptCopy, { ignoreSize: true }); copyLayoutParams(newElOption, existElOption); copyTransitionInfo(newElOption, existElOption); copyTransitionInfo(newElOption, existElOption, "shape"); copyTransitionInfo(newElOption, existElOption, "style"); copyTransitionInfo(newElOption, existElOption, "extra"); newElOption.clipPath = existElOption.clipPath; } else existList[index] = newElOptCopy; } else if ($action === "replace") existList[index] = newElOptCopy; else if ($action === "remove") existElOption && (existList[index] = null); } var TRANSITION_PROPS_TO_COPY = [ "transition", "enterFrom", "leaveTo" ]; var ROOT_TRANSITION_PROPS_TO_COPY = TRANSITION_PROPS_TO_COPY.concat([ "enterAnimation", "updateAnimation", "leaveAnimation" ]); function copyTransitionInfo(target, source, targetProp) { if (targetProp) { if (!target[targetProp] && source[targetProp]) target[targetProp] = {}; target = target[targetProp]; source = source[targetProp]; } if (!target || !source) return; var props = targetProp ? TRANSITION_PROPS_TO_COPY : ROOT_TRANSITION_PROPS_TO_COPY; for (var i = 0; i < props.length; i++) { var prop = props[i]; if (target[prop] == null && source[prop] != null) target[prop] = source[prop]; } } function setLayoutInfoToExist(existItem, newElOption) { if (!existItem) return; existItem.hv = newElOption.hv = [isSetLoc(newElOption, ["left", "right"]), isSetLoc(newElOption, ["top", "bottom"])]; if (existItem.type === "group") { var existingGroupOpt = existItem; var newGroupOpt = newElOption; existingGroupOpt.width ??= newGroupOpt.width = 0; existingGroupOpt.height ??= newGroupOpt.height = 0; } } var GraphicComponentModel = function(_super) { __extends(GraphicComponentModel, _super); function GraphicComponentModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GraphicComponentModel.type; _this.preventAutoZ = true; return _this; } GraphicComponentModel.prototype.mergeOption = function(option, ecModel) { var elements = this.option.elements; this.option.elements = null; _super.prototype.mergeOption.call(this, option, ecModel); this.option.elements = elements; }; GraphicComponentModel.prototype.optionUpdated = function(newOption, isInit) { var thisOption = this.option; var newList = (isInit ? thisOption : newOption).elements; var existList = thisOption.elements = isInit ? [] : thisOption.elements; var flattenedList = []; this._flatten(newList, flattenedList, null); var mappingResult = mappingToExists(existList, flattenedList, "normalMerge"); var elOptionsToUpdate = this._elOptionsToUpdate = []; each$12(mappingResult, function(resultItem, index) { var newElOption = resultItem.newOption; assert(isObject$3(newElOption) || resultItem.existing, "Empty graphic option definition"); if (!newElOption) return; elOptionsToUpdate.push(newElOption); setKeyInfoToNewElOption(resultItem, newElOption); mergeNewElOptionToExist(existList, index, newElOption); setLayoutInfoToExist(existList[index], newElOption); }, this); thisOption.elements = filter(existList, function(item) { item && delete item.$action; return item != null; }); }; /** * Convert * [{ * type: 'group', * id: 'xx', * children: [{type: 'circle'}, {type: 'polygon'}] * }] * to * [ * {type: 'group', id: 'xx'}, * {type: 'circle', parentId: 'xx'}, * {type: 'polygon', parentId: 'xx'} * ] */ GraphicComponentModel.prototype._flatten = function(optionList, result, parentOption) { each$12(optionList, function(option) { if (!option) return; if (parentOption) option.parentOption = parentOption; result.push(option); var children = option.children; if (children && children.length) this._flatten(children, result, option); delete option.children; }, this); }; GraphicComponentModel.prototype.useElOptionsToUpdate = function() { var els = this._elOptionsToUpdate; this._elOptionsToUpdate = null; return els; }; GraphicComponentModel.type = "graphic"; GraphicComponentModel.defaultOption = { elements: [] }; return GraphicComponentModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/graphic/GraphicView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var nonShapeGraphicElements = { path: null, compoundPath: null, group: Group$3, image: ZRImage, text: ZRText }; var inner$6 = makeInner(); var GraphicComponentView = function(_super) { __extends(GraphicComponentView, _super); function GraphicComponentView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = GraphicComponentView.type; return _this; } GraphicComponentView.prototype.init = function() { this._elMap = createHashMap(); }; GraphicComponentView.prototype.render = function(graphicModel, ecModel, api) { if (graphicModel !== this._lastGraphicModel) this._clear(); this._lastGraphicModel = graphicModel; this._updateElements(graphicModel); this._relocate(graphicModel, api); }; /** * Update graphic elements. */ GraphicComponentView.prototype._updateElements = function(graphicModel) { var elOptionsToUpdate = graphicModel.useElOptionsToUpdate(); if (!elOptionsToUpdate) return; var elMap = this._elMap; var rootGroup = this.group; var globalZ = graphicModel.get("z"); var globalZLevel = graphicModel.get("zlevel"); each$12(elOptionsToUpdate, function(elOption) { var id = convertOptionIdName(elOption.id, null); var elExisting = id != null ? elMap.get(id) : null; var parentId = convertOptionIdName(elOption.parentId, null); var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup; var elType = elOption.type; var elOptionStyle = elOption.style; if (elType === "text" && elOptionStyle) { if (elOption.hv && elOption.hv[1]) elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = elOptionStyle.verticalAlign = elOptionStyle.align = null; } var textContentOption = elOption.textContent; var textConfig = elOption.textConfig; if (elOptionStyle && isEC4CompatibleStyle(elOptionStyle, elType, !!textConfig, !!textContentOption)) { var convertResult = convertFromEC4CompatibleStyle(elOptionStyle, elType, true); if (!textConfig && convertResult.textConfig) textConfig = elOption.textConfig = convertResult.textConfig; if (!textContentOption && convertResult.textContent) textContentOption = convertResult.textContent; } var elOptionCleaned = getCleanedElOption(elOption); elExisting && assert(targetElParent === elExisting.parent, "Changing parent is not supported."); var $action = elOption.$action || "merge"; var isMerge = $action === "merge"; var isReplace = $action === "replace"; if (isMerge) { var isInit = !elExisting; var el_1 = elExisting; if (isInit) el_1 = createEl(id, targetElParent, elOption.type, elMap); else { el_1 && (inner$6(el_1).isNew = false); stopPreviousKeyframeAnimationAndRestore(el_1); } if (el_1) { applyUpdateTransition(el_1, elOptionCleaned, graphicModel, { isInit }); updateCommonAttrs(el_1, elOption, globalZ, globalZLevel); } } else if (isReplace) { removeEl$1(elExisting, elOption, elMap, graphicModel); var el_2 = createEl(id, targetElParent, elOption.type, elMap); if (el_2) { applyUpdateTransition(el_2, elOptionCleaned, graphicModel, { isInit: true }); updateCommonAttrs(el_2, elOption, globalZ, globalZLevel); } } else if ($action === "remove") { updateLeaveTo(elExisting, elOption); removeEl$1(elExisting, elOption, elMap, graphicModel); } var el = elMap.get(id); if (el && textContentOption) { if (isMerge) { var textContentExisting = el.getTextContent(); textContentExisting ? textContentExisting.attr(textContentOption) : el.setTextContent(new ZRText(textContentOption)); } else if (isReplace) el.setTextContent(new ZRText(textContentOption)); } if (el) { var clipPathOption = elOption.clipPath; if (clipPathOption) { var clipPathType = clipPathOption.type; var clipPath = void 0; var isInit = false; if (isMerge) { var oldClipPath = el.getClipPath(); isInit = !oldClipPath || inner$6(oldClipPath).type !== clipPathType; clipPath = isInit ? newEl(clipPathType) : oldClipPath; } else if (isReplace) { isInit = true; clipPath = newEl(clipPathType); } el.setClipPath(clipPath); applyUpdateTransition(clipPath, clipPathOption, graphicModel, { isInit }); applyKeyframeAnimation(clipPath, clipPathOption.keyframeAnimation, graphicModel); } var elInner = inner$6(el); el.setTextConfig(textConfig); elInner.option = elOption; setEventData(el, graphicModel, elOption); setTooltipConfig({ el, componentModel: graphicModel, itemName: el.name, itemTooltipOption: elOption.tooltip }); applyKeyframeAnimation(el, elOption.keyframeAnimation, graphicModel); } }); }; /** * Locate graphic elements. */ GraphicComponentView.prototype._relocate = function(graphicModel, api) { var elOptions = graphicModel.option.elements; var rootGroup = this.group; var elMap = this._elMap; var apiWidth = api.getWidth(); var apiHeight = api.getHeight(); var xy = ["x", "y"]; for (var i = 0; i < elOptions.length; i++) { var elOption = elOptions[i]; var id = convertOptionIdName(elOption.id, null); var el = id != null ? elMap.get(id) : null; if (!el || !el.isGroup) continue; var parentEl = el.parent; var isParentRoot = parentEl === rootGroup; var elInner = inner$6(el); var parentElInner = inner$6(parentEl); elInner.width = parsePercent(elInner.option.width, isParentRoot ? apiWidth : parentElInner.width) || 0; elInner.height = parsePercent(elInner.option.height, isParentRoot ? apiHeight : parentElInner.height) || 0; } for (var i = elOptions.length - 1; i >= 0; i--) { var elOption = elOptions[i]; var id = convertOptionIdName(elOption.id, null); var el = id != null ? elMap.get(id) : null; if (!el) continue; var parentEl = el.parent; var parentElInner = inner$6(parentEl); var containerInfo = parentEl === rootGroup ? { width: apiWidth, height: apiHeight } : { width: parentElInner.width, height: parentElInner.height }; var layoutPos = {}; var layouted = positionElement(el, elOption, containerInfo, null, { hv: elOption.hv, boundingMode: elOption.bounding }, layoutPos); if (!inner$6(el).isNew && layouted) { var transition = elOption.transition; var animatePos = {}; for (var k = 0; k < xy.length; k++) { var key = xy[k]; var val = layoutPos[key]; if (transition && (isTransitionAll(transition) || indexOf(transition, key) >= 0)) animatePos[key] = val; else el[key] = val; } updateProps$1(el, animatePos, graphicModel, 0); } else el.attr(layoutPos); } }; /** * Clear all elements. */ GraphicComponentView.prototype._clear = function() { var _this = this; var elMap = this._elMap; elMap.each(function(el) { removeEl$1(el, inner$6(el).option, elMap, _this._lastGraphicModel); }); this._elMap = createHashMap(); }; GraphicComponentView.prototype.dispose = function() { this._clear(); }; GraphicComponentView.type = "graphic"; return GraphicComponentView; }(ComponentView); function newEl(graphicType) { assert(graphicType, "graphic type MUST be set"); var Clz = hasOwn(nonShapeGraphicElements, graphicType) ? nonShapeGraphicElements[graphicType] : getShapeClass(graphicType); assert(Clz, "graphic type " + graphicType + " can not be found"); var el = new Clz({}); inner$6(el).type = graphicType; return el; } function createEl(id, targetElParent, graphicType, elMap) { var el = newEl(graphicType); targetElParent.add(el); elMap.set(id, el); inner$6(el).id = id; inner$6(el).isNew = true; return el; } function removeEl$1(elExisting, elOption, elMap, graphicModel) { if (elExisting && elExisting.parent) { elExisting.type === "group" && elExisting.traverse(function(el) { removeEl$1(el, elOption, elMap, graphicModel); }); applyLeaveTransition(elExisting, elOption, graphicModel); elMap.removeKey(inner$6(elExisting).id); } } function updateCommonAttrs(el, elOption, defaultZ, defaultZlevel) { if (!el.isGroup) each$12([ ["cursor", Displayable.prototype.cursor], ["zlevel", defaultZlevel || 0], ["z", defaultZ || 0], ["z2", 0] ], function(item) { var prop = item[0]; if (hasOwn(elOption, prop)) el[prop] = retrieve2(elOption[prop], item[1]); else if (el[prop] == null) el[prop] = item[1]; }); each$12(keys(elOption), function(key) { if (key.indexOf("on") === 0) { var val = elOption[key]; el[key] = isFunction(val) ? val : null; } }); if (hasOwn(elOption, "draggable")) el.draggable = elOption.draggable; elOption.name != null && (el.name = elOption.name); elOption.id != null && (el.id = elOption.id); } function getCleanedElOption(elOption) { elOption = extend({}, elOption); each$12([ "id", "parentId", "$action", "hv", "bounding", "textContent", "clipPath" ].concat(LOCATION_PARAMS), function(name) { delete elOption[name]; }); return elOption; } function setEventData(el, graphicModel, elOption) { var eventData = getECData(el).eventData; if (!el.silent && !el.ignore && !eventData) eventData = getECData(el).eventData = { componentType: "graphic", componentIndex: graphicModel.componentIndex, name: el.name }; if (eventData) eventData.info = elOption.info; } //#endregion //#region node_modules/echarts/lib/component/graphic/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$22(registers) { registers.registerComponentModel(GraphicComponentModel); registers.registerComponentView(GraphicComponentView); registers.registerPreprocessor(function(option) { var graphicOption = option.graphic; if (isArray$1(graphicOption)) { if (!graphicOption[0] || !graphicOption[0].elements) option.graphic = [{ elements: graphicOption }]; else option.graphic = [option.graphic[0]]; } else if (graphicOption && !graphicOption.elements) option.graphic = [{ elements: [graphicOption] }]; }); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DATA_ZOOM_AXIS_DIMENSIONS = [ "x", "y", "radius", "angle", "single" ]; var ecModelCacheInner = makeInner(); var SERIES_COORDS = [ "cartesian2d", "polar", "singleAxis" ]; function isCoordSupported(seriesModel) { return indexOf(SERIES_COORDS, seriesModel.get("coordinateSystem")) >= 0; } function getAxisMainType(axisDim) { assert(axisDim); return axisDim + "Axis"; } /** * If two dataZoomModels has the same axis controlled, we say that they are 'linked'. * This function finds all linked dataZoomModels start from the given payload. */ function findEffectedDataZooms(ecModel, payload) { var axisRecords = createHashMap(); var effectedModels = []; var effectedModelMap = createHashMap(); ecModel.eachComponent({ mainType: "dataZoom", query: payload }, function(dataZoomModel) { if (!effectedModelMap.get(dataZoomModel.uid)) addToEffected(dataZoomModel); }); var foundNewLink; do { foundNewLink = false; ecModel.eachComponent("dataZoom", processSingle); } while (foundNewLink); function processSingle(dataZoomModel) { if (!effectedModelMap.get(dataZoomModel.uid) && isLinked(dataZoomModel)) { addToEffected(dataZoomModel); foundNewLink = true; } } function addToEffected(dataZoom) { effectedModelMap.set(dataZoom.uid, true); effectedModels.push(dataZoom); markAxisControlled(dataZoom); } function isLinked(dataZoomModel) { var isLink = false; dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { var axisIdxArr = axisRecords.get(axisDim); if (axisIdxArr && axisIdxArr[axisIndex]) isLink = true; }); return isLink; } function markAxisControlled(dataZoomModel) { dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { (axisRecords.get(axisDim) || axisRecords.set(axisDim, []))[axisIndex] = true; }); } return effectedModels; } /** * Find the first target coordinate system. * Available after model built. * * @return Like { * grid: [ * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1}, * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0}, * ... * ], // cartesians must not be null/undefined. * polar: [ * {model: coord0, axisModels: [axis4], coordIndex: 0}, * ... * ], // polars must not be null/undefined. * singleAxis: [ * {model: coord0, axisModels: [], coordIndex: 0} * ] * } */ function collectReferCoordSysModelInfo(dataZoomModel) { var ecModel = dataZoomModel.ecModel; var coordSysInfoWrap = { infoList: [], infoMap: createHashMap() }; dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex); if (!axisModel) return; var coordSysModel = axisModel.getCoordSysModel(); if (!coordSysModel) return; var coordSysUid = coordSysModel.uid; var coordSysInfo = coordSysInfoWrap.infoMap.get(coordSysUid); if (!coordSysInfo) { coordSysInfo = { model: coordSysModel, axisModels: [] }; coordSysInfoWrap.infoList.push(coordSysInfo); coordSysInfoWrap.infoMap.set(coordSysUid, coordSysInfo); } coordSysInfo.axisModels.push(axisModel); }); return coordSysInfoWrap; } function ensureAxisProxyMap(ecModel) { var store = ecModelCacheInner(getCachePerECPrepare(ecModel)); return store.axisProxyMap || (store.axisProxyMap = createHashMap()); } function getAxisProxyFromModel(axisModel) { if (!axisModel) return; assert(axisModel.ecModel); return ensureAxisProxyMap(axisModel.ecModel).get(axisModel.uid); } function setAxisProxyToModel(axisModel, axisProxy) { assert(axisModel.ecModel); ensureAxisProxyMap(axisModel.ecModel).set(axisModel.uid, axisProxy); } /** * NOTICE: If `axis_a` aligns to `axis_b`, but they are not controlled by * the same `dataZoom`, do not consider `axis_b` as `alignTo` and * then do not input it into `AxisProxy#reset`. */ function getAlignTo(dataZoomModel, axisProxy) { var alignToAxis = axisProxy.getAxisModel().axis.__alignTo; return alignToAxis && dataZoomModel.getAxisProxy(alignToAxis.dim, alignToAxis.model.componentIndex) ? getAxisProxyFromModel(alignToAxis.model) : null; } //#endregion //#region node_modules/echarts/lib/component/dataZoom/DataZoomModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DataZoomAxisInfo = function() { function DataZoomAxisInfo() { this.indexList = []; this.indexMap = []; } DataZoomAxisInfo.prototype.add = function(axisCmptIdx) { if (!this.indexMap[axisCmptIdx]) { this.indexList.push(axisCmptIdx); this.indexMap[axisCmptIdx] = true; } }; return DataZoomAxisInfo; }(); var DataZoomModel = function(_super) { __extends(DataZoomModel, _super); function DataZoomModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = DataZoomModel.type; _this._autoThrottle = true; _this._noTarget = true; /** * It is `[rangeModeForMin, rangeModeForMax]`. * The optional values for `rangeMode`: * + `'value'` mode: the axis extent will always be determined by * `dataZoom.startValue` and `dataZoom.endValue`, despite * how data like and how `axis.min` and `axis.max` are. * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`, * where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`, * and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`. * Axis extent will be determined by the result of the percent of `[dMin, dMax]`. * * For example, when users are using dynamic data (update data periodically via `setOption`), * if in `'value`' mode, the window will be kept in a fixed value range despite how * data are appended, while if in `'percent'` mode, whe window range will be changed alone with * the appended data (suppose `axis.min` and `axis.max` are not specified). */ _this._rangePropMode = ["percent", "percent"]; return _this; } DataZoomModel.prototype.init = function(option, parentModel, ecModel) { var inputRawOption = retrieveRawOption(option); /** * Suppose a "main process" start at the point that model prepared (that is, * model initialized or merged or method called in `action`). * We should keep the `main process` idempotent, that is, given a set of values * on `option`, we get the same result. * * But sometimes, values on `option` will be updated for providing users * a "final calculated value" (`dataZoomProcessor` will do that). Those value * should not be the base/input of the `main process`. * * So in that case we should save and keep the input of the `main process` * separately, called `settledOption`. * * For example, consider the case: * (Step_1) brush zoom the grid by `toolbox.dataZoom`, * where the original input `option.startValue`, `option.endValue` are earsed by * calculated value. * (Step)2) click the legend to hide and show a series, * where the new range is calculated by the earsed `startValue` and `endValue`, * which brings incorrect result. */ this.settledOption = inputRawOption; this.mergeDefaultAndTheme(option, ecModel); this._doInit(inputRawOption); }; DataZoomModel.prototype.mergeOption = function(newOption) { var inputRawOption = retrieveRawOption(newOption); merge(this.option, newOption, true); merge(this.settledOption, inputRawOption, true); this._doInit(inputRawOption); }; DataZoomModel.prototype._doInit = function(inputRawOption) { var thisOption = this.option; this._setDefaultThrottle(inputRawOption); this._updateRangeUse(inputRawOption); var settledOption = this.settledOption; each$12([["start", "startValue"], ["end", "endValue"]], function(names, index) { if (this._rangePropMode[index] === "value") thisOption[names[0]] = settledOption[names[0]] = null; }, this); this._resetTarget(); }; DataZoomModel.prototype._resetTarget = function() { var optionOrient = this.get("orient", true); var targetAxisIndexMap = this._targetAxisInfoMap = createHashMap(); if (this._fillSpecifiedTargetAxis(targetAxisIndexMap)) this._orient = optionOrient || this._makeAutoOrientByTargetAxis(); else { this._orient = optionOrient || "horizontal"; this._fillAutoTargetAxisByOrient(targetAxisIndexMap, this._orient); } this._noTarget = true; targetAxisIndexMap.each(function(axisInfo) { if (axisInfo.indexList.length) this._noTarget = false; }, this); }; DataZoomModel.prototype._fillSpecifiedTargetAxis = function(targetAxisIndexMap) { var hasAxisSpecified = false; each$12(DATA_ZOOM_AXIS_DIMENSIONS, function(axisDim) { var refering = this.getReferringComponents(getAxisMainType(axisDim), MULTIPLE_REFERRING); if (!refering.specified) return; hasAxisSpecified = true; var axisInfo = new DataZoomAxisInfo(); each$12(refering.models, function(axisModel) { axisInfo.add(axisModel.componentIndex); }); targetAxisIndexMap.set(axisDim, axisInfo); }, this); return hasAxisSpecified; }; DataZoomModel.prototype._fillAutoTargetAxisByOrient = function(targetAxisIndexMap, orient) { var ecModel = this.ecModel; var needAuto = true; if (needAuto) { var axisDim = orient === "vertical" ? "y" : "x"; var axisModels = ecModel.findComponents({ mainType: axisDim + "Axis" }); setParallelAxis(axisModels, axisDim); } if (needAuto) { var axisModels = ecModel.findComponents({ mainType: "singleAxis", filter: function(axisModel) { return axisModel.get("orient", true) === orient; } }); setParallelAxis(axisModels, "single"); } function setParallelAxis(axisModels, axisDim) { var axisModel = axisModels[0]; if (!axisModel) return; var axisInfo = new DataZoomAxisInfo(); axisInfo.add(axisModel.componentIndex); targetAxisIndexMap.set(axisDim, axisInfo); needAuto = false; if (axisDim === "x" || axisDim === "y") { var gridModel_1 = axisModel.getReferringComponents("grid", SINGLE_REFERRING).models[0]; gridModel_1 && each$12(axisModels, function(axModel) { if (axisModel.componentIndex !== axModel.componentIndex && gridModel_1 === axModel.getReferringComponents("grid", SINGLE_REFERRING).models[0]) axisInfo.add(axModel.componentIndex); }); } } if (needAuto) each$12(DATA_ZOOM_AXIS_DIMENSIONS, function(axisDim) { if (!needAuto) return; var axisModels = ecModel.findComponents({ mainType: getAxisMainType(axisDim), filter: function(axisModel) { return axisModel.get("type", true) === "category"; } }); if (axisModels[0]) { var axisInfo = new DataZoomAxisInfo(); axisInfo.add(axisModels[0].componentIndex); targetAxisIndexMap.set(axisDim, axisInfo); needAuto = false; } }, this); }; DataZoomModel.prototype._makeAutoOrientByTargetAxis = function() { var dim; this.eachTargetAxis(function(axisDim) { !dim && (dim = axisDim); }, this); return dim === "y" ? "vertical" : "horizontal"; }; DataZoomModel.prototype._setDefaultThrottle = function(inputRawOption) { if (inputRawOption.hasOwnProperty("throttle")) this._autoThrottle = false; if (this._autoThrottle) { var globalOption = this.ecModel.option; this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 100 : 20; } }; DataZoomModel.prototype._updateRangeUse = function(inputRawOption) { var rangePropMode = this._rangePropMode; var rangeModeInOption = this.get("rangeMode"); each$12([["start", "startValue"], ["end", "endValue"]], function(names, index) { var percentSpecified = inputRawOption[names[0]] != null; var valueSpecified = inputRawOption[names[1]] != null; if (percentSpecified && !valueSpecified) rangePropMode[index] = "percent"; else if (!percentSpecified && valueSpecified) rangePropMode[index] = "value"; else if (rangeModeInOption) rangePropMode[index] = rangeModeInOption[index]; else if (percentSpecified) rangePropMode[index] = "percent"; }); }; DataZoomModel.prototype.noTarget = function() { return this._noTarget; }; DataZoomModel.prototype.getFirstTargetAxisModel = function() { var firstAxisModel; this.eachTargetAxis(function(axisDim, axisIndex) { if (firstAxisModel == null) firstAxisModel = this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex); }, this); return firstAxisModel; }; /** * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel */ DataZoomModel.prototype.eachTargetAxis = function(callback, context) { this._targetAxisInfoMap.each(function(axisInfo, axisDim) { each$12(axisInfo.indexList, function(axisIndex) { callback.call(context, axisDim, axisIndex); }); }); }; /** * @return If not found, return null/undefined. */ DataZoomModel.prototype.getAxisProxy = function(axisDim, axisIndex) { return getAxisProxyFromModel(this.getAxisModel(axisDim, axisIndex)); }; /** * @return If not found, return null/undefined. */ DataZoomModel.prototype.getAxisModel = function(axisDim, axisIndex) { assert(axisDim && axisIndex != null); var axisInfo = this._targetAxisInfoMap.get(axisDim); if (axisInfo && axisInfo.indexMap[axisIndex]) return this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex); }; /** * If not specified, set to undefined. */ DataZoomModel.prototype.setRawRange = function(opt) { var thisOption = this.option; var settledOption = this.settledOption; each$12([["start", "startValue"], ["end", "endValue"]], function(names) { if (opt[names[0]] != null || opt[names[1]] != null) { thisOption[names[0]] = settledOption[names[0]] = opt[names[0]]; thisOption[names[1]] = settledOption[names[1]] = opt[names[1]]; } }, this); this._updateRangeUse(opt); }; DataZoomModel.prototype.setCalculatedRange = function(opt) { var option = this.option; each$12([ "start", "startValue", "end", "endValue" ], function(name) { option[name] = opt[name]; }); }; DataZoomModel.prototype.getPercentRange = function() { var axisProxy = this.findRepresentativeAxisProxy(); if (axisProxy) return axisProxy.getWindow().percent; }; /** * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0); * * @return [startValue, endValue] value can only be '-' or finite number. */ DataZoomModel.prototype.getValueRange = function(axisDim, axisIndex) { if (axisDim == null && axisIndex == null) { var axisProxy = this.findRepresentativeAxisProxy(); if (axisProxy) return axisProxy.getWindow().value; } else return this.getAxisProxy(axisDim, axisIndex).getWindow().value; }; /** * @param axisModel If axisModel given, find axisProxy * corresponding to the axisModel */ DataZoomModel.prototype.findRepresentativeAxisProxy = function(axisModel) { if (axisModel) return getAxisProxyFromModel(axisModel); var firstProxy; var axisDimList = this._targetAxisInfoMap.keys(); for (var i = 0; i < axisDimList.length; i++) { var axisDim = axisDimList[i]; var axisInfo = this._targetAxisInfoMap.get(axisDim); for (var j = 0; j < axisInfo.indexList.length; j++) { var proxy = this.getAxisProxy(axisDim, axisInfo.indexList[j]); if (proxy.hostedBy(this)) return proxy; if (!firstProxy) firstProxy = proxy; } } return firstProxy; }; DataZoomModel.prototype.getRangePropMode = function() { return this._rangePropMode.slice(); }; DataZoomModel.prototype.getOrient = function() { assert(this._orient); return this._orient; }; DataZoomModel.type = "dataZoom"; DataZoomModel.dependencies = [ "xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "series", "toolbox" ]; DataZoomModel.defaultOption = { z: 4, filterMode: "filter", start: 0, end: 100 }; return DataZoomModel; }(ComponentModel); /** * Retrieve those raw params from option, which will be cached separately, * because they will be overwritten by normalized/calculated values in the main * process. */ function retrieveRawOption(option) { var ret = {}; each$12([ "start", "end", "startValue", "endValue", "throttle" ], function(name) { option.hasOwnProperty(name) && (ret[name] = option[name]); }); return ret; } //#endregion //#region node_modules/echarts/lib/component/dataZoom/SelectZoomModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SelectDataZoomModel = function(_super) { __extends(SelectDataZoomModel, _super); function SelectDataZoomModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SelectDataZoomModel.type; return _this; } SelectDataZoomModel.type = "dataZoom.select"; return SelectDataZoomModel; }(DataZoomModel); //#endregion //#region node_modules/echarts/lib/component/dataZoom/DataZoomView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DataZoomView = function(_super) { __extends(DataZoomView, _super); function DataZoomView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = DataZoomView.type; return _this; } DataZoomView.prototype.render = function(dataZoomModel, ecModel, api, payload) { this.dataZoomModel = dataZoomModel; this.ecModel = ecModel; this.api = api; }; DataZoomView.type = "dataZoom"; return DataZoomView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/dataZoom/SelectZoomView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SelectDataZoomView = function(_super) { __extends(SelectDataZoomView, _super); function SelectDataZoomView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SelectDataZoomView.type; return _this; } SelectDataZoomView.type = "dataZoom.select"; return SelectDataZoomView; }(DataZoomView); //#endregion //#region node_modules/echarts/lib/component/dataZoom/AxisProxy.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Operate single axis. * One axis can only operated by one axis operator. * Different dataZoomModels may be defined to operate the same axis. * (i.e. 'inside' data zoom and 'slider' data zoom components) * So dataZoomModels share one axisProxy in that case. */ var AxisProxy = function() { function AxisProxy(dimName, axisIndex, dataZoomModel, ecModel) { this._dimName = dimName; this._axisIndex = axisIndex; this.ecModel = ecModel; this._dataZoomModel = dataZoomModel; } /** * Whether the axisProxy is hosted by dataZoomModel. */ AxisProxy.prototype.hostedBy = function(dataZoomModel) { return this._dataZoomModel === dataZoomModel; }; /** * @return `getWindow().value` can only have NaN or finite value. */ AxisProxy.prototype.getWindow = function() { return clone$4(this._window); }; AxisProxy.prototype.getTargetSeriesModels = function() { var seriesModels = []; this.ecModel.eachSeries(function(seriesModel) { if (isCoordSupported(seriesModel)) { var axisMainType = getAxisMainType(this._dimName); var axisModel = seriesModel.getReferringComponents(axisMainType, SINGLE_REFERRING).models[0]; if (axisModel && this._axisIndex === axisModel.componentIndex) seriesModels.push(seriesModel); } }, this); return seriesModels; }; AxisProxy.prototype.getAxisModel = function() { return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex); }; AxisProxy.prototype.getMinMaxSpan = function() { return clone$4(this._minMaxSpan); }; /** * [CAVEAT] Keep this method pure, so that it can be called multiple times. */ AxisProxy.prototype.calculateDataWindow = function(opt) { var dataExtent = this._extent; var axis = this.getAxisModel().axis; var scale = axis.scale; var rangePropMode = this._dataZoomModel.getRangePropMode(); var percentExtent = [0, 100]; var percentWindow = []; var valueWindow = []; var hasPropModeValue; var needRound = [false, false]; each$12(["start", "end"], function(prop, idx) { var boundPercent = opt[prop]; var boundValue = opt[prop + "Value"]; if (rangePropMode[idx] === "percent") { boundPercent ??= percentExtent[idx]; boundValue = linearMap$2(boundPercent, percentExtent, dataExtent); needRound[idx] = true; } else { hasPropModeValue = true; if (boundValue == null) boundValue = dataExtent[idx]; else { boundValue = scale.parse(boundValue); if (scale.sanitize) boundValue = scale.sanitize(boundValue, dataExtent); } boundPercent = linearMap$2(boundValue, dataExtent, percentExtent); } valueWindow[idx] = boundValue == null || isNaN(boundValue) ? dataExtent[idx] : boundValue; percentWindow[idx] = boundPercent == null || isNaN(boundPercent) ? percentExtent[idx] : boundPercent; }); asc$1(valueWindow); asc$1(percentWindow); var spans = this._minMaxSpan; hasPropModeValue ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false) : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true); function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) { var suffix = toValue ? "Span" : "ValueSpan"; sliderMove(0, fromWindow, fromExtent, "all", spans["min" + suffix], spans["max" + suffix]); for (var i = 0; i < 2; i++) { toWindow[i] = linearMap$2(fromWindow[i], fromExtent, toExtent, true); if (toValue) { toWindow[i] = toWindow[i]; needRound[i] = true; } } ensureExtentAscSimply(toWindow); } var isScaleOrdinalOrTime = isOrdinalScale(scale) || isTimeScale(scale); var pxExtent = axis.getExtent(); var pxSpan = mathAbs$4(pxExtent[1] - pxExtent[0]); var precision = isScaleOrdinalOrTime ? 0 : getAcceptableTickPrecision(valueWindow, pxSpan, .5); each$12([[0, mathCeil], [1, mathFloor]], function(_a) { var idx = _a[0], ceilOrFloor = _a[1]; if (!needRound[idx] || !isFinite(precision)) return; valueWindow[idx] = round$3(valueWindow[idx], precision); valueWindow[idx] = mathMin$9(dataExtent[1], mathMax$9(dataExtent[0], valueWindow[idx])); if (percentWindow[idx] === percentExtent[idx]) { valueWindow[idx] = dataExtent[idx]; if (isScaleOrdinalOrTime) valueWindow[idx] = ceilOrFloor(valueWindow[idx]); } }); ensureExtentAscSimply(valueWindow); var percentInvertedWindow = [linearMap$2(valueWindow[0], dataExtent, percentExtent, true), linearMap$2(valueWindow[1], dataExtent, percentExtent, true)]; ensureExtentAscSimply(percentInvertedWindow); return { value: valueWindow, percent: percentWindow, percentInverted: percentInvertedWindow, valuePrecision: precision }; }; /** * Notice: reset should not be called before series.restoreData() is called, * so it is recommended to be called in "process stage" but not "model init * stage". */ AxisProxy.prototype.reset = function(dataZoomModel, alignToPercentInverted) { if (!this.hostedBy(dataZoomModel)) return; var axis = this.getAxisModel().axis; scaleRawExtentInfoCreate(axis, 2); var rawExtentInfo = axis.scale.rawExtentInfo; this._extent = rawExtentInfo.makeNoZoom(); this._updateMinMaxSpan(); var opt = dataZoomModel.settledOption; if (alignToPercentInverted) opt = defaults({ start: alignToPercentInverted[0], end: alignToPercentInverted[1] }, opt); var _a = this._window = this.calculateDataWindow(opt), percent = _a.percent, value = _a.value; if (percent[0] !== 0) rawExtentInfo.setZoomMM(0, value[0]); if (percent[1] !== 100) rawExtentInfo.setZoomMM(1, value[1]); }; AxisProxy.prototype.filterData = function(dataZoomModel, api) { if (!this.hostedBy(dataZoomModel)) return; var axisDim = this._dimName; var seriesModels = this.getTargetSeriesModels(); var filterMode = dataZoomModel.get("filterMode"); var valueWindow = this._window.value; if (filterMode === "none") return; each$12(seriesModels, function(seriesModel) { var seriesData = seriesModel.getData(); var dataDims = seriesData.mapDimensionsAll(axisDim); if (!dataDims.length) return; if (filterMode === "weakFilter") { var store_1 = seriesData.getStore(); var dataDimIndices_1 = map$1(dataDims, function(dim) { return seriesData.getDimensionIndex(dim); }, seriesData); seriesData.filterSelf(function(dataIndex) { var leftOut; var rightOut; var hasValue; for (var i = 0; i < dataDims.length; i++) { var value = store_1.get(dataDimIndices_1[i], dataIndex); var thisHasValue = !isNaN(value); var thisLeftOut = value < valueWindow[0]; var thisRightOut = value > valueWindow[1]; if (thisHasValue && !thisLeftOut && !thisRightOut) return true; thisHasValue && (hasValue = true); thisLeftOut && (leftOut = true); thisRightOut && (rightOut = true); } return hasValue && leftOut && rightOut; }); } else each$12(dataDims, function(dim) { if (filterMode === "empty") seriesModel.setData(seriesData = seriesData.map(dim, function(value) { return !isInWindow(value) ? NaN : value; })); else { var range = {}; range[dim] = valueWindow; seriesData.selectRange(range); } }); each$12(dataDims, function(dim) { seriesData.setApproximateExtent(valueWindow, dim); }); }); function isInWindow(value) { return value >= valueWindow[0] && value <= valueWindow[1]; } }; AxisProxy.prototype._updateMinMaxSpan = function() { var minMaxSpan = this._minMaxSpan = {}; var dataZoomModel = this._dataZoomModel; var dataExtent = this._extent; each$12(["min", "max"], function(minMax) { var percentSpan = dataZoomModel.get(minMax + "Span"); var valueSpan = dataZoomModel.get(minMax + "ValueSpan"); valueSpan != null && (valueSpan = this.getAxisModel().axis.scale.parse(valueSpan)); if (valueSpan != null) percentSpan = linearMap$2(dataExtent[0] + valueSpan, dataExtent, [0, 100], true); else if (percentSpan != null) valueSpan = linearMap$2(percentSpan, [0, 100], dataExtent, true) - dataExtent[0]; minMaxSpan[minMax + "Span"] = percentSpan; minMaxSpan[minMax + "ValueSpan"] = valueSpan; }, this); }; return AxisProxy; }(); //#endregion //#region node_modules/echarts/lib/component/dataZoom/dataZoomProcessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var dataZoomProcessor = { dirtyOnOverallProgress: true, getTargetSeries: function(ecModel) { function eachAxisModel(cb) { ecModel.eachComponent("dataZoom", function(dataZoomModel) { dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { cb(axisDim, axisIndex, ecModel.getComponent(getAxisMainType(axisDim), axisIndex), dataZoomModel); }); }); } var proxyList = []; eachAxisModel(function(axisDim, axisIndex, axisModel, dataZoomModel) { if (!getAxisProxyFromModel(axisModel)) { var axisProxy = new AxisProxy(axisDim, axisIndex, dataZoomModel, ecModel); proxyList.push(axisProxy); setAxisProxyToModel(axisModel, axisProxy); } }); var seriesModelMap = createHashMap(); each$12(proxyList, function(axisProxy) { each$12(axisProxy.getTargetSeriesModels(), function(seriesModel) { seriesModelMap.set(seriesModel.uid, seriesModel); }); }); return seriesModelMap; }, overallReset: function(ecModel, api) { ecModel.eachComponent("dataZoom", function(dataZoomModel) { var axisProxyNeedAlign = []; dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { var axisProxy = dataZoomModel.getAxisProxy(axisDim, axisIndex); var alignToAxisProxy = getAlignTo(dataZoomModel, axisProxy); if (alignToAxisProxy) axisProxyNeedAlign.push([axisProxy, alignToAxisProxy]); else axisProxy.reset(dataZoomModel, null); }); each$12(axisProxyNeedAlign, function(item) { item[0].reset(dataZoomModel, item[1].getWindow().percentInverted); }); dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { dataZoomModel.getAxisProxy(axisDim, axisIndex).filterData(dataZoomModel, api); }); }); ecModel.eachComponent("dataZoom", function(dataZoomModel) { var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); if (axisProxy) { var _a = axisProxy.getWindow(), percent = _a.percent, value = _a.value; dataZoomModel.setCalculatedRange({ start: percent[0], end: percent[1], startValue: value[0], endValue: value[1] }); } }); } }; //#endregion //#region node_modules/echarts/lib/component/dataZoom/dataZoomAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function installDataZoomAction(registers) { registers.registerAction("dataZoom", function(payload, ecModel) { each$12(findEffectedDataZooms(ecModel, payload), function(dataZoomModel) { dataZoomModel.setRawRange({ start: payload.start, end: payload.end, startValue: payload.startValue, endValue: payload.endValue }); }); }); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/installCommon.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var callOnlyOnce = makeCallOnlyOnce(); function installCommon$1(registers) { callOnlyOnce(registers, function() { registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, dataZoomProcessor); installDataZoomAction(registers); registers.registerSubTypeDefaulter("dataZoom", function() { return "slider"; }); }); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/installDataZoomSelect.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$21(registers) { registers.registerComponentModel(SelectDataZoomModel); registers.registerComponentView(SelectDataZoomView); installCommon$1(registers); } //#endregion //#region node_modules/echarts/lib/component/toolbox/featureManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ToolboxFeature = function() { function ToolboxFeature() {} return ToolboxFeature; }(); var features = {}; function registerFeature(name, ctor) { features[name] = ctor; } function getFeature(name) { return features[name]; } //#endregion //#region node_modules/echarts/lib/component/toolbox/ToolboxModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ToolboxModel = function(_super) { __extends(ToolboxModel, _super); function ToolboxModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ToolboxModel.type; return _this; } ToolboxModel.prototype.init = function(option, parentModel, ecModel) { var toolboxOptionInTheme = ecModel.getTheme().get("toolbox"); var themeFeatureOption = toolboxOptionInTheme ? toolboxOptionInTheme.feature : null; if (themeFeatureOption) { this._themeFeatureOption = extend({}, themeFeatureOption); toolboxOptionInTheme.feature = {}; } _super.prototype.init.call(this, option, parentModel, ecModel); if (themeFeatureOption) toolboxOptionInTheme.feature = themeFeatureOption; }; ToolboxModel.prototype.optionUpdated = function() { each$12(this.option.feature, function(featureOpt, featureName) { var themeFeatureOption = this._themeFeatureOption; var Feature = getFeature(featureName); if (Feature) { if (Feature.getDefaultOption) Feature.defaultOption = Feature.getDefaultOption(this.ecModel); if (themeFeatureOption && themeFeatureOption[featureName]) { merge(featureOpt, themeFeatureOption[featureName]); themeFeatureOption[featureName] = null; } merge(featureOpt, Feature.defaultOption); } }, this); }; ToolboxModel.type = "toolbox"; ToolboxModel.layoutMode = { type: "box", ignoreSize: true }; ToolboxModel.defaultOption = { show: true, z: 6, orient: "horizontal", left: "right", top: "top", backgroundColor: "transparent", borderColor: tokens.color.border, borderRadius: 0, borderWidth: 0, padding: tokens.size.m, itemSize: 15, itemGap: tokens.size.s, showTitle: true, iconStyle: { borderColor: tokens.color.accent50, color: "none" }, emphasis: { iconStyle: { borderColor: tokens.color.accent70 } }, tooltip: { show: false, position: "bottom" } }; return ToolboxModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/helper/listComponent.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function makeBackground(rect, componentModel) { var padding = normalizeCssArray(componentModel.get("padding")); var style = componentModel.getItemStyle(["color", "opacity"]); style.fill = componentModel.get("backgroundColor"); return new Rect$2({ shape: { x: rect.x - padding[3], y: rect.y - padding[0], width: rect.width + padding[1] + padding[3], height: rect.height + padding[0] + padding[2], r: componentModel.get("borderRadius") }, style, silent: true, z2: -1 }); } //#endregion //#region node_modules/echarts/lib/component/toolbox/ToolboxView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ToolboxView = function(_super) { __extends(ToolboxView, _super); function ToolboxView() { return _super !== null && _super.apply(this, arguments) || this; } ToolboxView.prototype.render = function(toolboxModel, ecModel, api, payload) { var group = this.group; group.removeAll(); if (!toolboxModel.get("show")) return; var itemSize = +toolboxModel.get("itemSize"); var isVertical = toolboxModel.get("orient") === "vertical"; var featureOpts = toolboxModel.get("feature") || {}; var features = this._features || (this._features = createHashMap()); var newFeatureNames = []; each$12(featureOpts, function(opt, name) { newFeatureNames.push(name); }); new DataDiffer(this._featureNames || [], newFeatureNames).add(processFeature).update(processFeature).remove(curry$1(processFeature, null)).execute(); this._featureNames = filter(newFeatureNames, function(name) { return features.hasKey(name); }); function processFeature(newIndex, oldIndex) { var isDiffAdd = newIndex != null && oldIndex == null; var isDiffUpdate = newIndex != null && oldIndex != null; var isDiffRemove = newIndex == null; var featureName = isDiffAdd || isDiffUpdate ? newFeatureNames[newIndex] : newFeatureNames[oldIndex]; var featureOpt = featureOpts[featureName]; var featureModel = isDiffAdd || isDiffUpdate ? new Model(featureOpt, toolboxModel, ecModel) : null; var isFeatureShow = featureModel && featureModel.get("show"); var feature; if (isDiffAdd) { if (!isFeatureShow) return; if (isUserFeatureName(featureName)) feature = { onclick: featureModel.option.onclick, featureName }; else { var Feature = getFeature(featureName); if (!Feature) return; feature = new Feature(); } features.set(featureName, feature); } else feature = features.get(featureName); if (isDiffRemove || !isFeatureShow) { if (isTooltipFeature(feature) && feature.dispose) feature.dispose(ecModel, api); features.removeKey(featureName); return; } if (payload && payload.newTitle != null && payload.featureName === featureName) featureOpt.title = payload.newTitle; if (isDiffAdd) feature.uid = getUID("toolbox-feature"); feature.model = featureModel; feature.ecModel = ecModel; feature.api = api; createIconPaths(featureModel, feature, featureName); featureModel.setIconStatus = function(iconName, status) { var option = this.option; var iconPaths = this.iconPaths; option.iconStatus = option.iconStatus || {}; option.iconStatus[iconName] = status; if (iconPaths[iconName]) (status === "emphasis" ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]); }; if (isTooltipFeature(feature) && feature.render) feature.render(featureModel, ecModel, api, payload); } function createIconPaths(featureModel, feature, featureName) { var iconStyleModel = featureModel.getModel("iconStyle"); var iconStyleEmphasisModel = featureModel.getModel(["emphasis", "iconStyle"]); var icons = feature instanceof ToolboxFeature && feature.getIcons ? feature.getIcons() : featureModel.get("icon"); var titles = featureModel.get("title") || {}; var iconsMap; var titlesMap; if (isString(icons)) { iconsMap = {}; iconsMap[featureName] = icons; } else iconsMap = icons; if (isString(titles)) { titlesMap = {}; titlesMap[featureName] = titles; } else titlesMap = titles; var iconPaths = featureModel.iconPaths = {}; each$12(iconsMap, function(iconStr, iconName) { var path = createIcon(iconStr, {}, { x: -itemSize / 2, y: -itemSize / 2, width: itemSize, height: itemSize }); path.setStyle(iconStyleModel.getItemStyle()); var pathEmphasisState = path.ensureState("emphasis"); pathEmphasisState.style = iconStyleEmphasisModel.getItemStyle(); var textContent = new ZRText({ style: { text: titlesMap[iconName], align: iconStyleEmphasisModel.get("textAlign"), borderRadius: iconStyleEmphasisModel.get("textBorderRadius"), padding: iconStyleEmphasisModel.get("textPadding"), fill: null, font: getFont({ fontStyle: iconStyleEmphasisModel.get("textFontStyle"), fontFamily: iconStyleEmphasisModel.get("textFontFamily"), fontSize: iconStyleEmphasisModel.get("textFontSize"), fontWeight: iconStyleEmphasisModel.get("textFontWeight") }, ecModel) }, ignore: true }); path.setTextContent(textContent); setTooltipConfig({ el: path, componentModel: toolboxModel, itemName: iconName, formatterParamsExtra: { title: titlesMap[iconName] } }); path.__title = titlesMap[iconName]; path.on("mouseover", function() { var hoverStyle = iconStyleEmphasisModel.getItemStyle(); var defaultTextPosition = isVertical ? toolboxModel.get("right") == null && toolboxModel.get("left") !== "right" ? "right" : "left" : toolboxModel.get("bottom") == null && toolboxModel.get("top") !== "bottom" ? "bottom" : "top"; textContent.setStyle({ fill: iconStyleEmphasisModel.get("textFill") || hoverStyle.fill || hoverStyle.stroke || tokens.color.neutral99, backgroundColor: iconStyleEmphasisModel.get("textBackgroundColor") }); path.setTextConfig({ position: iconStyleEmphasisModel.get("textPosition") || defaultTextPosition }); textContent.ignore = !toolboxModel.get("showTitle"); api.enterEmphasis(this); }).on("mouseout", function() { if (featureModel.get(["iconStatus", iconName]) !== "emphasis") api.leaveEmphasis(this); textContent.hide(); }); (featureModel.get(["iconStatus", iconName]) === "emphasis" ? enterEmphasis : leaveEmphasis)(path); group.add(path); path.on("click", bind$1(feature.onclick, feature, ecModel, api, iconName)); iconPaths[iconName] = path; }); } var refContainer = createBoxLayoutReference(toolboxModel, api).refContainer; var boxLayoutParams = toolboxModel.getBoxLayoutParams(); var padding = toolboxModel.get("padding"); var viewRect = getLayoutRect(boxLayoutParams, refContainer, padding); box(toolboxModel.get("orient"), group, toolboxModel.get("itemGap"), viewRect.width, viewRect.height); positionElement(group, boxLayoutParams, refContainer, padding); group.add(makeBackground(group.getBoundingRect(), toolboxModel)); isVertical || group.eachChild(function(icon) { var titleText = icon.__title; var emphasisState = icon.ensureState("emphasis"); var emphasisTextConfig = emphasisState.textConfig || (emphasisState.textConfig = {}); var textContent = icon.getTextContent(); var emphasisTextState = textContent && textContent.ensureState("emphasis"); if (emphasisTextState && !isFunction(emphasisTextState) && titleText) { var emphasisTextStyle = emphasisTextState.style || (emphasisTextState.style = {}); var rect = getBoundingRect(titleText, ZRText.makeFont(emphasisTextStyle)); var offsetX = icon.x + group.x; var offsetY = icon.y + group.y + itemSize; var needPutOnTop = false; if (offsetY + rect.height > api.getHeight()) { emphasisTextConfig.position = "top"; needPutOnTop = true; } var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 10; if (offsetX + rect.width / 2 > api.getWidth()) { emphasisTextConfig.position = ["100%", topOffset]; emphasisTextStyle.align = "right"; } else if (offsetX - rect.width / 2 < 0) { emphasisTextConfig.position = [0, topOffset]; emphasisTextStyle.align = "left"; } } }); }; ToolboxView.prototype.updateView = function(toolboxModel, ecModel, api, payload) { each$12(this._features, function(feature) { feature && feature instanceof ToolboxFeature && feature.updateView && feature.updateView(feature.model, ecModel, api, payload); }); }; ToolboxView.prototype.dispose = function(ecModel, api) { each$12(this._features, function(feature) { feature && feature instanceof ToolboxFeature && feature.dispose && feature.dispose(ecModel, api); }); }; ToolboxView.type = "toolbox"; return ToolboxView; }(ComponentView); function isUserFeatureName(featureName) { return featureName.indexOf("my") === 0; } function isTooltipFeature(feature) { return feature instanceof ToolboxFeature; } //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/SaveAsImage.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SaveAsImage = function(_super) { __extends(SaveAsImage, _super); function SaveAsImage() { return _super !== null && _super.apply(this, arguments) || this; } SaveAsImage.prototype.onclick = function(ecModel, api) { var model = this.model; var title = model.get("name") || ecModel.get("title.0.text") || "echarts"; var isSvg = api.getZr().painter.getType() === "svg"; var type = isSvg ? "svg" : model.get("type", true) || "png"; var url = api.getConnectedDataURL({ type, backgroundColor: model.get("backgroundColor", true) || ecModel.get("backgroundColor") || tokens.color.neutral00, connectedBackgroundColor: model.get("connectedBackgroundColor"), excludeComponents: model.get("excludeComponents"), pixelRatio: model.get("pixelRatio") }); var browser = env.browser; if (typeof MouseEvent === "function" && (browser.newEdge || !browser.ie && !browser.edge)) { var $a = document.createElement("a"); $a.download = title + "." + type; $a.target = "_blank"; $a.href = url; var evt = new MouseEvent("click", { view: document.defaultView, bubbles: true, cancelable: false }); $a.dispatchEvent(evt); } else if (window.navigator.msSaveOrOpenBlob || isSvg) { var parts = url.split(","); var base64Encoded = parts[0].indexOf("base64") > -1; var bstr = isSvg ? decodeURIComponent(parts[1]) : parts[1]; base64Encoded && (bstr = window.atob(bstr)); var filename = title + "." + type; if (window.navigator.msSaveOrOpenBlob) { var n = bstr.length; var u8arr = new Uint8Array(n); while (n--) u8arr[n] = bstr.charCodeAt(n); var blob = new Blob([u8arr]); window.navigator.msSaveOrOpenBlob(blob, filename); } else { var frame = document.createElement("iframe"); document.body.appendChild(frame); var cw = frame.contentWindow; var doc = cw.document; doc.open("image/svg+xml", "replace"); doc.write(bstr); doc.close(); cw.focus(); doc.execCommand("SaveAs", true, filename); document.body.removeChild(frame); } } else { var lang = model.get("lang"); var html = ""; var tab = window.open(); tab.document.write(html); tab.document.title = title; } }; SaveAsImage.getDefaultOption = function(ecModel) { return { show: true, icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0", title: ecModel.getLocaleModel().get([ "toolbox", "saveAsImage", "title" ]), type: "png", connectedBackgroundColor: tokens.color.neutral00, name: "", excludeComponents: ["toolbox"], lang: ecModel.getLocaleModel().get([ "toolbox", "saveAsImage", "lang" ]) }; }; return SaveAsImage; }(ToolboxFeature); //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/MagicType.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var INNER_STACK_KEYWORD = "__ec_magicType_stack__"; var radioTypes = [["line", "bar"], ["stack"]]; var MagicType = function(_super) { __extends(MagicType, _super); function MagicType() { return _super !== null && _super.apply(this, arguments) || this; } MagicType.prototype.getIcons = function() { var model = this.model; var availableIcons = model.get("icon"); var icons = {}; each$12(model.get("type"), function(type) { if (availableIcons[type]) icons[type] = availableIcons[type]; }); return icons; }; MagicType.getDefaultOption = function(ecModel) { return { show: true, type: [], icon: { line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4", bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7", stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z" }, title: ecModel.getLocaleModel().get([ "toolbox", "magicType", "title" ]), option: {}, seriesIndex: {} }; }; MagicType.prototype.onclick = function(ecModel, api, type) { var model = this.model; var seriesIndex = model.get(["seriesIndex", type]); if (!seriesOptGenreator[type]) return; var newOption = { series: [] }; var generateNewSeriesTypes = function(seriesModel) { var seriesType = seriesModel.subType; var seriesId = seriesModel.id; var newSeriesOpt = seriesOptGenreator[type](seriesType, seriesId, seriesModel, model); if (newSeriesOpt) { defaults(newSeriesOpt, seriesModel.option); newOption.series.push(newSeriesOpt); } var coordSys = seriesModel.coordinateSystem; if (coordSys && coordSys.type === "cartesian2d" && (type === "line" || type === "bar")) { var categoryAxis = coordSys.getAxesByScale("ordinal")[0]; if (categoryAxis) { var axisType = categoryAxis.dim + "Axis"; var axisIndex = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0].componentIndex; newOption[axisType] = newOption[axisType] || []; for (var i = 0; i <= axisIndex; i++) newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {}; newOption[axisType][axisIndex].boundaryGap = type === "bar"; } } }; each$12(radioTypes, function(radio) { if (indexOf(radio, type) >= 0) each$12(radio, function(item) { model.setIconStatus(item, "normal"); }); }); model.setIconStatus(type, "emphasis"); ecModel.eachComponent({ mainType: "series", query: seriesIndex == null ? null : { seriesIndex } }, generateNewSeriesTypes); var newTitle; var currentType = type; if (type === "stack") { newTitle = merge({ stack: model.option.title.tiled, tiled: model.option.title.stack }, model.option.title); if (model.get(["iconStatus", type]) !== "emphasis") currentType = "tiled"; } api.dispatchAction({ type: "changeMagicType", currentType, newOption, newTitle, featureName: "magicType" }); }; return MagicType; }(ToolboxFeature); var seriesOptGenreator = { "line": function(seriesType, seriesId, seriesModel, model) { if (seriesType === "bar") return merge({ id: seriesId, type: "line", data: seriesModel.get("data"), stack: seriesModel.get("stack"), markPoint: seriesModel.get("markPoint"), markLine: seriesModel.get("markLine") }, model.get(["option", "line"]) || {}, true); }, "bar": function(seriesType, seriesId, seriesModel, model) { if (seriesType === "line") return merge({ id: seriesId, type: "bar", data: seriesModel.get("data"), stack: seriesModel.get("stack"), markPoint: seriesModel.get("markPoint"), markLine: seriesModel.get("markLine") }, model.get(["option", "bar"]) || {}, true); }, "stack": function(seriesType, seriesId, seriesModel, model) { var isStack = seriesModel.get("stack") === INNER_STACK_KEYWORD; if (seriesType === "line" || seriesType === "bar") { model.setIconStatus("stack", isStack ? "normal" : "emphasis"); return merge({ id: seriesId, stack: isStack ? "" : INNER_STACK_KEYWORD }, model.get(["option", "stack"]) || {}, true); } } }; registerAction({ type: "changeMagicType", event: "magicTypeChanged", update: "prepareAndUpdate" }, function(payload, ecModel) { ecModel.mergeOption(payload.newOption); }); //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/DataView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BLOCK_SPLITER = new Array(60).join("-"); var ITEM_SPLITER = " "; /** * Group series into two types * 1. on category axis, like line, bar * 2. others, like scatter, pie */ function groupSeries(ecModel) { var seriesGroupByCategoryAxis = {}; var otherSeries = []; var meta = []; ecModel.eachRawSeries(function(seriesModel) { var coordSys = seriesModel.coordinateSystem; if (coordSys && (coordSys.type === "cartesian2d" || coordSys.type === "polar")) { var baseAxis = coordSys.getBaseAxis(); if (baseAxis.type === "category") { var key = getCartesianAxisHashKey(baseAxis); if (!seriesGroupByCategoryAxis[key]) { seriesGroupByCategoryAxis[key] = { categoryAxis: baseAxis, valueAxis: coordSys.getOtherAxis(baseAxis), series: [] }; meta.push({ axisDim: baseAxis.dim, axisIndex: baseAxis.index }); } seriesGroupByCategoryAxis[key].series.push(seriesModel); } else otherSeries.push(seriesModel); } else otherSeries.push(seriesModel); }); return { seriesGroupByCategoryAxis, other: otherSeries, meta }; } /** * Assemble content of series on cateogory axis * @inner */ function assembleSeriesWithCategoryAxis(groups) { var tables = []; each$12(groups, function(group, key) { var categoryAxis = group.categoryAxis; var valueAxisDim = group.valueAxis.dim; var headers = [" "].concat(map$1(group.series, function(series) { return series.name; })); var columns = [categoryAxis.model.getCategories()]; each$12(group.series, function(series) { var rawData = series.getRawData(); columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function(val) { return val; })); }); var lines = [headers.join(ITEM_SPLITER)]; for (var i = 0; i < columns[0].length; i++) { var items = []; for (var j = 0; j < columns.length; j++) items.push(columns[j][i]); lines.push(items.join(ITEM_SPLITER)); } tables.push(lines.join("\n")); }); return tables.join("\n\n" + BLOCK_SPLITER + "\n\n"); } /** * Assemble content of other series */ function assembleOtherSeries(series) { return map$1(series, function(series) { var data = series.getRawData(); var lines = [series.name]; var vals = []; data.each(data.dimensions, function() { var argLen = arguments.length; var dataIndex = arguments[argLen - 1]; var name = data.getName(dataIndex); for (var i = 0; i < argLen - 1; i++) vals[i] = arguments[i]; lines.push((name ? name + ITEM_SPLITER : "") + vals.join(ITEM_SPLITER)); }); return lines.join("\n"); }).join("\n\n" + BLOCK_SPLITER + "\n\n"); } function getContentFromModel(ecModel) { var result = groupSeries(ecModel); return { value: filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function(str) { return !!str.replace(/[\n\t\s]/g, ""); }).join("\n\n" + BLOCK_SPLITER + "\n\n"), meta: result.meta }; } function trim(str) { return str.replace(/^\s\s*/, "").replace(/\s\s*$/, ""); } /** * If a block is tsv format */ function isTSVFormat(block) { if (block.slice(0, block.indexOf("\n")).indexOf(ITEM_SPLITER) >= 0) return true; } var itemSplitRegex = new RegExp("[" + ITEM_SPLITER + "]+", "g"); /** * @param {string} tsv * @return {Object} */ function parseTSVContents(tsv) { var tsvLines = tsv.split(/\n+/g); var headers = trim(tsvLines.shift()).split(itemSplitRegex); var categories = []; var series = map$1(headers, function(header) { return { name: header, data: [] }; }); for (var i = 0; i < tsvLines.length; i++) { var items = trim(tsvLines[i]).split(itemSplitRegex); categories.push(items.shift()); for (var j = 0; j < items.length; j++) series[j] && (series[j].data[i] = items[j]); } return { series, categories }; } function parseListContents(str) { var lines = str.split(/\n+/g); var seriesName = trim(lines.shift()); var data = []; for (var i = 0; i < lines.length; i++) { var line = trim(lines[i]); if (!line) continue; var items = line.split(itemSplitRegex); var name_1 = ""; var value = void 0; var hasName = false; if (isNaN(items[0])) { hasName = true; name_1 = items[0]; items = items.slice(1); data[i] = { name: name_1, value: [] }; value = data[i].value; } else value = data[i] = []; for (var j = 0; j < items.length; j++) value.push(+items[j]); if (value.length === 1) hasName ? data[i].value = value[0] : data[i] = value[0]; } return { name: seriesName, data }; } function parseContents(str, blockMetaList) { var blocks = str.split(new RegExp("\n*" + BLOCK_SPLITER + "\n*", "g")); var newOption = { series: [] }; each$12(blocks, function(block, idx) { if (isTSVFormat(block)) { var result = parseTSVContents(block); var blockMeta = blockMetaList[idx]; var axisKey = blockMeta.axisDim + "Axis"; if (blockMeta) { newOption[axisKey] = newOption[axisKey] || []; newOption[axisKey][blockMeta.axisIndex] = { data: result.categories }; newOption.series = newOption.series.concat(result.series); } } else { var result = parseListContents(block); newOption.series.push(result); } }); return newOption; } var DataView = function(_super) { __extends(DataView, _super); function DataView() { return _super !== null && _super.apply(this, arguments) || this; } DataView.prototype.onclick = function(ecModel, api) { setTimeout(function() { api.dispatchAction({ type: "hideTip" }); }); var container = api.getDom(); var model = this.model; if (this._dom) container.removeChild(this._dom); var root = document.createElement("div"); root.style.cssText = "position:absolute;top:0;bottom:0;left:0;right:0;padding:5px"; root.style.backgroundColor = model.get("backgroundColor") || tokens.color.neutral00; var header = document.createElement("h4"); var lang = model.get("lang") || []; header.innerHTML = lang[0] || model.get("title"); header.style.cssText = "margin:10px 20px"; header.style.color = model.get("textColor"); var viewMain = document.createElement("div"); var textarea = document.createElement("textarea"); viewMain.style.cssText = "overflow:auto"; var optionToContent = model.get("optionToContent"); var contentToOption = model.get("contentToOption"); var result = getContentFromModel(ecModel); if (isFunction(optionToContent)) { var htmlOrDom = optionToContent(api.getOption()); if (isString(htmlOrDom)) viewMain.innerHTML = htmlOrDom; else if (isDom(htmlOrDom)) viewMain.appendChild(htmlOrDom); } else { textarea.readOnly = model.get("readOnly"); var style = textarea.style; style.cssText = "display:block;width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;resize:none;box-sizing:border-box;outline:none"; style.color = model.get("textColor"); style.borderColor = model.get("textareaBorderColor"); style.backgroundColor = model.get("textareaColor"); textarea.value = result.value; viewMain.appendChild(textarea); } var blockMetaList = result.meta; var buttonContainer = document.createElement("div"); buttonContainer.style.cssText = "position:absolute;bottom:5px;left:0;right:0"; var buttonStyle = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px"; var closeButton = document.createElement("div"); var refreshButton = document.createElement("div"); buttonStyle += ";background-color:" + model.get("buttonColor"); buttonStyle += ";color:" + model.get("buttonTextColor"); var self = this; function close() { container.removeChild(root); self._dom = null; } addEventListener(closeButton, "click", close); addEventListener(refreshButton, "click", function() { if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) { warn("It seems you have just provided one of `contentToOption` and `optionToContent` functions but missed the other one. Data change is ignored."); close(); return; } var newOption; try { if (isFunction(contentToOption)) newOption = contentToOption(viewMain, api.getOption()); else newOption = parseContents(textarea.value, blockMetaList); } catch (e) { close(); throw new Error("Data view format error " + e); } if (newOption) api.dispatchAction({ type: "changeDataView", newOption }); close(); }); closeButton.innerHTML = lang[1]; refreshButton.innerHTML = lang[2]; refreshButton.style.cssText = closeButton.style.cssText = buttonStyle; !model.get("readOnly") && buttonContainer.appendChild(refreshButton); buttonContainer.appendChild(closeButton); root.appendChild(header); root.appendChild(viewMain); root.appendChild(buttonContainer); viewMain.style.height = container.clientHeight - 80 + "px"; container.appendChild(root); this._dom = root; }; DataView.prototype.dispose = function(ecModel, api) { this._dom && api.getDom().removeChild(this._dom); }; DataView.getDefaultOption = function(ecModel) { return { show: true, readOnly: false, optionToContent: null, contentToOption: null, icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28", title: ecModel.getLocaleModel().get([ "toolbox", "dataView", "title" ]), lang: ecModel.getLocaleModel().get([ "toolbox", "dataView", "lang" ]), backgroundColor: tokens.color.background, textColor: tokens.color.primary, textareaColor: tokens.color.background, textareaBorderColor: tokens.color.border, buttonColor: tokens.color.accent50, buttonTextColor: tokens.color.neutral00 }; }; return DataView; }(ToolboxFeature); /** * @inner */ function tryMergeDataOption(newData, originalData) { return map$1(newData, function(newVal, idx) { var original = originalData && originalData[idx]; if (isObject$3(original) && !isArray$1(original)) { if (!(isObject$3(newVal) && !isArray$1(newVal))) newVal = { value: newVal }; var shouldDeleteName = original.name != null && newVal.name == null; newVal = defaults(newVal, original); shouldDeleteName && delete newVal.name; return newVal; } else return newVal; }); } registerAction({ type: "changeDataView", event: "dataViewChanged", update: "prepareAndUpdate" }, function(payload, ecModel) { var newSeriesOptList = []; each$12(payload.newOption.series, function(seriesOpt) { var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0]; if (!seriesModel) newSeriesOptList.push(extend({ type: "scatter" }, seriesOpt)); else { var originalData = seriesModel.get("data"); newSeriesOptList.push({ name: seriesOpt.name, data: tryMergeDataOption(seriesOpt.data, originalData) }); } }); ecModel.mergeOption(defaults({ series: newSeriesOptList }, payload.newOption)); }); //#endregion //#region node_modules/echarts/lib/component/dataZoom/history.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each$6 = each$12; var inner$5 = makeInner(); /** * @param ecModel * @param newSnapshot key is dataZoomId */ function push(ecModel, newSnapshot) { var storedSnapshots = getStoreSnapshots(ecModel); each$6(newSnapshot, function(batchItem, dataZoomId) { var i = storedSnapshots.length - 1; for (; i >= 0; i--) if (storedSnapshots[i][dataZoomId]) break; if (i < 0) { var dataZoomModel = ecModel.queryComponents({ mainType: "dataZoom", subType: "select", id: dataZoomId })[0]; if (dataZoomModel) { var percentRange = dataZoomModel.getPercentRange(); storedSnapshots[0][dataZoomId] = { dataZoomId, start: percentRange[0], end: percentRange[1] }; } } }); storedSnapshots.push(newSnapshot); } function pop(ecModel) { var storedSnapshots = getStoreSnapshots(ecModel); var head = storedSnapshots[storedSnapshots.length - 1]; storedSnapshots.length > 1 && storedSnapshots.pop(); var snapshot = {}; each$6(head, function(batchItem, dataZoomId) { for (var i = storedSnapshots.length - 1; i >= 0; i--) { batchItem = storedSnapshots[i][dataZoomId]; if (batchItem) { snapshot[dataZoomId] = batchItem; break; } } }); return snapshot; } function clear(ecModel) { inner$5(ecModel).snapshots = null; } function count(ecModel) { return getStoreSnapshots(ecModel).length; } /** * History length of each dataZoom may be different. * this._history[0] is used to store origin range. */ function getStoreSnapshots(ecModel) { var store = inner$5(ecModel); if (!store.snapshots) store.snapshots = [{}]; return store.snapshots; } //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/Restore.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RestoreOption = function(_super) { __extends(RestoreOption, _super); function RestoreOption() { return _super !== null && _super.apply(this, arguments) || this; } RestoreOption.prototype.onclick = function(ecModel, api) { clear(ecModel); api.dispatchAction({ type: "restore", from: this.uid }); }; RestoreOption.getDefaultOption = function(ecModel) { return { show: true, icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5", title: ecModel.getLocaleModel().get([ "toolbox", "restore", "title" ]) }; }; return RestoreOption; }(ToolboxFeature); registerAction({ type: "restore", event: "restore", update: "prepareAndUpdate" }, function(payload, ecModel) { ecModel.resetOption("recreate"); }); //#endregion //#region node_modules/echarts/lib/component/helper/BrushTargetManager.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var INCLUDE_FINDER_MAIN_TYPES = [ "grid", "xAxis", "yAxis", "geo", "graph", "polar", "radiusAxis", "angleAxis", "bmap" ]; var BrushTargetManager = function() { /** * @param finder contains Index/Id/Name of xAxis/yAxis/geo/grid * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]} * @param opt.include include coordinate system types. */ function BrushTargetManager(finder, ecModel, opt) { var _this = this; this._targetInfoList = []; var foundCpts = parseFinder(ecModel, finder); each$12(targetInfoBuilders, function(builder, type) { if (!opt || !opt.include || indexOf(opt.include, type) >= 0) builder(foundCpts, _this._targetInfoList); }); } BrushTargetManager.prototype.setOutputRanges = function(areas, ecModel) { this.matchOutputRanges(areas, ecModel, function(area, coordRange, coordSys) { (area.coordRanges || (area.coordRanges = [])).push(coordRange); if (!area.coordRange) { area.coordRange = coordRange; var result = coordConvert[area.brushType](0, coordSys, coordRange); area.__rangeOffset = { offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]), xyMinMax: result.xyMinMax }; } }); return areas; }; BrushTargetManager.prototype.matchOutputRanges = function(areas, ecModel, cb) { each$12(areas, function(area) { var targetInfo = this.findTargetInfo(area, ecModel); if (targetInfo && targetInfo !== true) each$12(targetInfo.coordSyses, function(coordSys) { cb(area, coordConvert[area.brushType](1, coordSys, area.range, true).values, coordSys, ecModel); }); }, this); }; /** * the `areas` is `BrushModel.areas`. * Called in layout stage. * convert `area.coordRange` to global range and set panelId to `area.range`. */ BrushTargetManager.prototype.setInputRanges = function(areas, ecModel) { each$12(areas, function(area) { var targetInfo = this.findTargetInfo(area, ecModel); assert(!targetInfo || targetInfo === true || area.coordRange, "coordRange must be specified when coord index specified."); assert(!targetInfo || targetInfo !== true || area.range, "range must be specified in global brush."); area.range = area.range || []; if (targetInfo && targetInfo !== true) { area.panelId = targetInfo.panelId; var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange); var rangeOffset = area.__rangeOffset; area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values; } }, this); }; BrushTargetManager.prototype.makePanelOpts = function(api, getDefaultBrushType) { return map$1(this._targetInfoList, function(targetInfo) { var rect = targetInfo.getPanelRect(); return { panelId: targetInfo.panelId, defaultBrushType: getDefaultBrushType ? getDefaultBrushType(targetInfo) : null, clipPath: makeRectPanelClipPath(rect), isTargetByCursor: makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel), getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect) }; }); }; BrushTargetManager.prototype.controlSeries = function(area, seriesModel, ecModel) { var targetInfo = this.findTargetInfo(area, ecModel); return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0; }; /** * If return Object, a coord found. * If return true, global found. * Otherwise nothing found. */ BrushTargetManager.prototype.findTargetInfo = function(area, ecModel) { var targetInfoList = this._targetInfoList; var foundCpts = parseFinder(ecModel, area); for (var i = 0; i < targetInfoList.length; i++) { var targetInfo = targetInfoList[i]; var areaPanelId = area.panelId; if (areaPanelId) { if (targetInfo.panelId === areaPanelId) return targetInfo; } else for (var j = 0; j < targetInfoMatchers.length; j++) if (targetInfoMatchers[j](foundCpts, targetInfo)) return targetInfo; } return true; }; return BrushTargetManager; }(); function formatMinMax(minMax) { minMax[0] > minMax[1] && minMax.reverse(); return minMax; } function parseFinder(ecModel, finder) { return parseFinder$1(ecModel, finder, { includeMainTypes: INCLUDE_FINDER_MAIN_TYPES }); } var targetInfoBuilders = { grid: function(foundCpts, targetInfoList) { var xAxisModels = foundCpts.xAxisModels; var yAxisModels = foundCpts.yAxisModels; var gridModels = foundCpts.gridModels; var gridModelMap = createHashMap(); var xAxesHas = {}; var yAxesHas = {}; if (!xAxisModels && !yAxisModels && !gridModels) return; each$12(xAxisModels, function(axisModel) { var gridModel = axisModel.axis.grid.model; gridModelMap.set(gridModel.id, gridModel); xAxesHas[gridModel.id] = true; }); each$12(yAxisModels, function(axisModel) { var gridModel = axisModel.axis.grid.model; gridModelMap.set(gridModel.id, gridModel); yAxesHas[gridModel.id] = true; }); each$12(gridModels, function(gridModel) { gridModelMap.set(gridModel.id, gridModel); xAxesHas[gridModel.id] = true; yAxesHas[gridModel.id] = true; }); gridModelMap.each(function(gridModel) { var grid = gridModel.coordinateSystem; var cartesians = []; each$12(grid.getCartesians(), function(cartesian, index) { if (indexOf(xAxisModels, cartesian.getAxis("x").model) >= 0 || indexOf(yAxisModels, cartesian.getAxis("y").model) >= 0) cartesians.push(cartesian); }); targetInfoList.push({ panelId: "grid--" + gridModel.id, gridModel, coordSysModel: gridModel, coordSys: cartesians[0], coordSyses: cartesians, getPanelRect: panelRectBuilders.grid, xAxisDeclared: xAxesHas[gridModel.id], yAxisDeclared: yAxesHas[gridModel.id] }); }); }, geo: function(foundCpts, targetInfoList) { each$12(foundCpts.geoModels, function(geoModel) { var coordSys = geoModel.coordinateSystem; targetInfoList.push({ panelId: "geo--" + geoModel.id, geoModel, coordSysModel: geoModel, coordSys, coordSyses: [coordSys], getPanelRect: panelRectBuilders.geo }); }); } }; var targetInfoMatchers = [function(foundCpts, targetInfo) { var xAxisModel = foundCpts.xAxisModel; var yAxisModel = foundCpts.yAxisModel; var gridModel = foundCpts.gridModel; !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model); !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model); return gridModel && gridModel === targetInfo.gridModel; }, function(foundCpts, targetInfo) { var geoModel = foundCpts.geoModel; return geoModel && geoModel === targetInfo.geoModel; }]; var panelRectBuilders = { grid: function() { return this.coordSys.master.getRect().clone(); }, geo: function() { var viewCoordSys = this.coordSys.view; var rect = viewCoordSysCopyBoundingRect(null, viewCoordSys); boundingRectApplyTransform(rect, rect, viewCoordSysCopyOverallMatrix(null, viewCoordSys)); return rect; } }; var coordConvert = { lineX: curry$1(axisConvert, 0), lineY: curry$1(axisConvert, 1), rect: function(to, coordSys, rangeOrCoordRange, clamp) { var xminymin = to ? coordSys.pointToData([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp); var xmaxymax = to ? coordSys.pointToData([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp); var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])]; return { values, xyMinMax: values }; }, polygon: function(to, coordSys, rangeOrCoordRange, clamp) { var xyMinMax = [initExtentForUnion(), initExtentForUnion()]; return { values: map$1(rangeOrCoordRange, function(item) { var p = to ? coordSys.pointToData(item, clamp) : coordSys.dataToPoint(item, clamp); xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]); xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]); xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]); xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]); return p; }), xyMinMax }; } }; function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) { assert(coordSys.type === "cartesian2d", "lineX/lineY brush is available only in cartesian2d."); var axis = coordSys.getAxis(["x", "y"][axisNameIndex]); var values = formatMinMax(map$1([0, 1], function(i) { return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]), true) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i])); })); var xyMinMax = []; xyMinMax[axisNameIndex] = values; xyMinMax[1 - axisNameIndex] = [NaN, NaN]; return { values, xyMinMax }; } var diffProcessor = { lineX: curry$1(axisDiffProcessor, 0), lineY: curry$1(axisDiffProcessor, 1), rect: function(values, refer, scales) { return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]]; }, polygon: function(values, refer, scales) { return map$1(values, function(item, idx) { return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]]; }); } }; function axisDiffProcessor(axisNameIndex, values, refer, scales) { return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]]; } function getScales(xyMinMaxCurr, xyMinMaxOrigin) { var sizeCurr = getSize(xyMinMaxCurr); var sizeOrigin = getSize(xyMinMaxOrigin); var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]]; isNaN(scales[0]) && (scales[0] = 1); isNaN(scales[1]) && (scales[1] = 1); return scales; } function getSize(xyMinMax) { return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN]; } //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/DataZoom.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each$5 = each$12; var DATA_ZOOM_ID_BASE = makeInternalComponentId("toolbox-dataZoom_"); var XY2WH = { x: "width", y: "height" }; var DataZoomFeature = function(_super) { __extends(DataZoomFeature, _super); function DataZoomFeature() { return _super !== null && _super.apply(this, arguments) || this; } DataZoomFeature.prototype.render = function(featureModel, ecModel, api, payload) { if (!this._brushController) { this._brushController = new BrushController(api.getZr()); this._brushController.on("brush", bind$1(this._onBrush, this)).mount(); } updateZoomBtnStatus(featureModel, ecModel, this, payload, api); updateBackBtnStatus(featureModel, ecModel); }; DataZoomFeature.prototype.onclick = function(ecModel, api, type) { handlers[type].call(this); }; DataZoomFeature.prototype.dispose = function(ecModel, api) { this._brushController && this._brushController.dispose(); }; DataZoomFeature.prototype._onBrush = function(eventParam) { var areas = eventParam.areas; if (!eventParam.isEnd || !areas.length) return; var snapshot = {}; var ecModel = this.ecModel; this._brushController.updateCovers([]); new BrushTargetManager(makeAxisFinder(this.model), ecModel, { include: ["grid"] }).matchOutputRanges(areas, ecModel, function(area, coordRange, coordSys) { if (coordSys.type !== "cartesian2d") return; var coordSysRect = coordSys.master.getRect().clone(); var brushType = area.brushType; if (brushType === "rect") { setBatch("x", coordSys, coordSysRect, coordRange[0]); setBatch("y", coordSys, coordSysRect, coordRange[1]); } else setBatch({ lineX: "x", lineY: "y" }[brushType], coordSys, coordSysRect, coordRange); }); push(ecModel, snapshot); this._dispatchZoomAction(snapshot); function setBatch(dimName, coordSys, coordSysRect, minMax) { var axis = coordSys.getAxis(dimName); var axisModel = axis.model; var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan(); var scaleExtent = axis.scale.getExtent(); if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) minMax = sliderMove(0, minMax.slice(), scaleExtent, 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan); var precision = getAcceptableTickPrecision(scaleExtent, coordSysRect[XY2WH[dimName]], .5); dataZoomModel && (snapshot[dataZoomModel.id] = { dataZoomId: dataZoomModel.id, startValue: isFinite(precision) ? round$3(minMax[0], precision) : minMax[0], endValue: isFinite(precision) ? round$3(minMax[1], precision) : minMax[1] }); } function findDataZoom(dimName, axisModel, ecModel) { var found; ecModel.eachComponent({ mainType: "dataZoom", subType: "select" }, function(dzModel) { dzModel.getAxisModel(dimName, axisModel.componentIndex) && (found = dzModel); }); return found; } }; DataZoomFeature.prototype._dispatchZoomAction = function(snapshot) { var batch = []; each$5(snapshot, function(batchItem, dataZoomId) { batch.push(clone$4(batchItem)); }); batch.length && this.api.dispatchAction({ type: "dataZoom", from: this.uid, batch }); }; DataZoomFeature.getDefaultOption = function(ecModel) { return { show: true, filterMode: "filter", icon: { zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1", back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26" }, title: ecModel.getLocaleModel().get([ "toolbox", "dataZoom", "title" ]), brushStyle: { borderWidth: 0, color: tokens.color.backgroundTint } }; }; return DataZoomFeature; }(ToolboxFeature); var handlers = { zoom: function() { var nextActive = !this._isZoomActive; this.api.dispatchAction({ type: "takeGlobalCursor", key: "dataZoomSelect", dataZoomSelectActive: nextActive }); }, back: function() { this._dispatchZoomAction(pop(this.ecModel)); } }; function makeAxisFinder(dzFeatureModel) { var setting = { xAxisIndex: dzFeatureModel.get("xAxisIndex", true), yAxisIndex: dzFeatureModel.get("yAxisIndex", true), xAxisId: dzFeatureModel.get("xAxisId", true), yAxisId: dzFeatureModel.get("yAxisId", true) }; if (setting.xAxisIndex == null && setting.xAxisId == null) setting.xAxisIndex = "all"; if (setting.yAxisIndex == null && setting.yAxisId == null) setting.yAxisIndex = "all"; return setting; } function updateBackBtnStatus(featureModel, ecModel) { featureModel.setIconStatus("back", count(ecModel) > 1 ? "emphasis" : "normal"); } function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) { var zoomActive = view._isZoomActive; if (payload && payload.type === "takeGlobalCursor") zoomActive = payload.key === "dataZoomSelect" ? payload.dataZoomSelectActive : false; view._isZoomActive = zoomActive; featureModel.setIconStatus("zoom", zoomActive ? "emphasis" : "normal"); var panels = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, { include: ["grid"] }).makePanelOpts(api, function(targetInfo) { return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? "lineX" : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? "lineY" : "rect"; }); view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? { brushType: "auto", brushStyle: featureModel.getModel("brushStyle").getItemStyle() } : false); } registerInternalOptionCreator("dataZoom", function(ecModel) { var toolboxModel = ecModel.getComponent("toolbox", 0); var featureDataZoomPath = ["feature", "dataZoom"]; if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) return; var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath); var dzOptions = []; var finderResult = parseFinder$1(ecModel, makeAxisFinder(dzFeatureModel)); each$5(finderResult.xAxisModels, function(axisModel) { return buildInternalOptions(axisModel, "xAxis", "xAxisIndex"); }); each$5(finderResult.yAxisModels, function(axisModel) { return buildInternalOptions(axisModel, "yAxis", "yAxisIndex"); }); function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) { var axisIndex = axisModel.componentIndex; var newOpt = { type: "select", $fromToolbox: true, filterMode: dzFeatureModel.get("filterMode", true) || "filter", id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex }; newOpt[axisIndexPropName] = axisIndex; dzOptions.push(newOpt); } return dzOptions; }); //#endregion //#region node_modules/echarts/lib/component/toolbox/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$20(registers) { registers.registerComponentModel(ToolboxModel); registers.registerComponentView(ToolboxView); registerFeature("saveAsImage", SaveAsImage); registerFeature("magicType", MagicType); registerFeature("dataView", DataView); registerFeature("dataZoom", DataZoomFeature); registerFeature("restore", RestoreOption); use(install$21); } //#endregion //#region node_modules/echarts/lib/component/tooltip/TooltipModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TooltipModel = function(_super) { __extends(TooltipModel, _super); function TooltipModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TooltipModel.type; return _this; } TooltipModel.type = "tooltip"; TooltipModel.dependencies = ["axisPointer"]; TooltipModel.defaultOption = { z: 60, show: true, showContent: true, trigger: "item", triggerOn: "mousemove|click|mousewheel", alwaysShowContent: false, renderMode: "auto", confine: null, showDelay: 0, hideDelay: 100, transitionDuration: .4, displayTransition: true, enterable: false, backgroundColor: tokens.color.neutral00, shadowBlur: 10, shadowColor: "rgba(0, 0, 0, .2)", shadowOffsetX: 1, shadowOffsetY: 2, borderRadius: 4, borderWidth: 1, defaultBorderColor: tokens.color.border, padding: null, extraCssText: "", axisPointer: { type: "line", axis: "auto", animation: "auto", animationDurationUpdate: 200, animationEasingUpdate: "exponentialOut", crossStyle: { color: tokens.color.borderShade, width: 1, type: "dashed", textStyle: {} } }, textStyle: { color: tokens.color.tertiary, fontSize: 14 } }; return TooltipModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/tooltip/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function shouldTooltipConfine(tooltipModel) { var confineOption = tooltipModel.get("confine"); return confineOption != null ? !!confineOption : tooltipModel.get("renderMode") === "richText"; } function testStyle(styleProps) { if (!env.domSupported) return; var style = document.documentElement.style; for (var i = 0, len = styleProps.length; i < len; i++) if (styleProps[i] in style) return styleProps[i]; } var TRANSFORM_VENDOR = testStyle([ "transform", "webkitTransform", "OTransform", "MozTransform", "msTransform" ]); var TRANSITION_VENDOR = testStyle([ "webkitTransition", "transition", "OTransition", "MozTransition", "msTransition" ]); function toCSSVendorPrefix(styleVendor, styleProp) { if (!styleVendor) return styleProp; styleProp = toCamelCase(styleProp, true); var idx = styleVendor.indexOf(styleProp); styleVendor = idx === -1 ? styleProp : "-" + styleVendor.slice(0, idx) + "-" + styleProp; return styleVendor.toLowerCase(); } function getComputedStyle(el, style) { var stl = el.currentStyle || document.defaultView && document.defaultView.getComputedStyle(el); return stl ? style ? stl[style] : stl : null; } //#endregion //#region node_modules/echarts/lib/component/tooltip/TooltipHTMLContent.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var CSS_TRANSITION_VENDOR = toCSSVendorPrefix(TRANSITION_VENDOR, "transition"); var CSS_TRANSFORM_VENDOR = toCSSVendorPrefix(TRANSFORM_VENDOR, "transform"); var gCssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + (env.transform3dSupported ? "will-change:transform;" : ""); function mirrorPos(pos) { pos = pos === "left" ? "right" : pos === "right" ? "left" : pos === "top" ? "bottom" : "top"; return pos; } function assembleArrow(tooltipModel, borderColor, arrowPosition) { if (!isString(arrowPosition) || arrowPosition === "inside") return ""; var backgroundColor = tooltipModel.get("backgroundColor"); var borderWidth = tooltipModel.get("borderWidth"); borderColor = convertToColorString(borderColor); var arrowPos = mirrorPos(arrowPosition); var arrowSize = Math.max(Math.round(borderWidth) * 1.5, 6); var positionStyle = ""; var transformStyle = CSS_TRANSFORM_VENDOR + ":"; var rotateDeg; if (indexOf(["left", "right"], arrowPos) > -1) { positionStyle += "top:50%"; transformStyle += "translateY(-50%) rotate(" + (rotateDeg = arrowPos === "left" ? -225 : -45) + "deg)"; } else { positionStyle += "left:50%"; transformStyle += "translateX(-50%) rotate(" + (rotateDeg = arrowPos === "top" ? 225 : 45) + "deg)"; } var rotateRadian = rotateDeg * Math.PI / 180; var arrowWH = arrowSize + borderWidth; var rotatedWH = arrowWH * Math.abs(Math.cos(rotateRadian)) + arrowWH * Math.abs(Math.sin(rotateRadian)); var arrowOffset = Math.round(((rotatedWH - Math.SQRT2 * borderWidth) / 2 + Math.SQRT2 * borderWidth - (rotatedWH - arrowWH) / 2) * 100) / 100; positionStyle += ";" + arrowPos + ":-" + arrowOffset + "px"; var borderStyle = borderColor + " solid " + borderWidth + "px;"; return "
"; } function assembleTransition(duration, onlyFadeTransition, enableDisplayTransition) { var transitionCurve = "cubic-bezier(0.23,1,0.32,1)"; var transitionOption = ""; var transitionText = ""; if (enableDisplayTransition) { transitionOption = " " + duration / 2 + "s " + transitionCurve; transitionText = "opacity" + transitionOption + ",visibility" + transitionOption; } if (!onlyFadeTransition) { transitionOption = " " + duration + "s " + transitionCurve; transitionText += (transitionText.length ? "," : "") + (env.transformSupported ? "" + CSS_TRANSFORM_VENDOR + transitionOption : ",left" + transitionOption + ",top" + transitionOption); } return CSS_TRANSITION_VENDOR + ":" + transitionText; } function assembleTransform(x, y, toString) { var x0 = x.toFixed(0) + "px"; var y0 = y.toFixed(0) + "px"; if (!env.transformSupported) return toString ? "top:" + y0 + ";left:" + x0 + ";" : [["top", y0], ["left", x0]]; var is3d = env.transform3dSupported; var translate = "translate" + (is3d ? "3d" : "") + "(" + x0 + "," + y0 + (is3d ? ",0" : "") + ")"; return toString ? "top:0;left:0;" + CSS_TRANSFORM_VENDOR + ":" + translate + ";" : [ ["top", 0], ["left", 0], [TRANSFORM_VENDOR, translate] ]; } /** * @param {Object} textStyle * @return {string} * @inner */ function assembleFont(textStyleModel) { var cssText = []; var fontSize = textStyleModel.get("fontSize"); var color = textStyleModel.getTextColor(); color && cssText.push("color:" + color); cssText.push("font:" + textStyleModel.getFont()); var lineHeight = retrieve2(textStyleModel.get("lineHeight"), Math.round(fontSize * 3 / 2)); fontSize && cssText.push("line-height:" + lineHeight + "px"); var shadowColor = textStyleModel.get("textShadowColor"); var shadowBlur = textStyleModel.get("textShadowBlur") || 0; var shadowOffsetX = textStyleModel.get("textShadowOffsetX") || 0; var shadowOffsetY = textStyleModel.get("textShadowOffsetY") || 0; shadowColor && shadowBlur && cssText.push("text-shadow:" + shadowOffsetX + "px " + shadowOffsetY + "px " + shadowBlur + "px " + shadowColor); each$12(["decoration", "align"], function(name) { var val = textStyleModel.get(name); val && cssText.push("text-" + name + ":" + val); }); return cssText.join(";"); } function assembleCssText(tooltipModel, enableTransition, onlyFadeTransition, enableDisplayTransition) { var cssText = []; var transitionDuration = tooltipModel.get("transitionDuration"); var backgroundColor = tooltipModel.get("backgroundColor"); var shadowBlur = tooltipModel.get("shadowBlur"); var shadowColor = tooltipModel.get("shadowColor"); var shadowOffsetX = tooltipModel.get("shadowOffsetX"); var shadowOffsetY = tooltipModel.get("shadowOffsetY"); var textStyleModel = tooltipModel.getModel("textStyle"); var padding = getPaddingFromTooltipModel(tooltipModel, "html"); var boxShadow = shadowOffsetX + "px " + shadowOffsetY + "px " + shadowBlur + "px " + shadowColor; cssText.push("box-shadow:" + boxShadow); enableTransition && transitionDuration > 0 && cssText.push(assembleTransition(transitionDuration, onlyFadeTransition, enableDisplayTransition)); if (backgroundColor) cssText.push("background-color:" + backgroundColor); each$12([ "width", "color", "radius" ], function(name) { var borderName = "border-" + name; var camelCase = toCamelCase(borderName); var val = tooltipModel.get(camelCase); val != null && cssText.push(borderName + ":" + val + (name === "color" ? "" : "px")); }); cssText.push(assembleFont(textStyleModel)); if (padding != null) cssText.push("padding:" + normalizeCssArray(padding).join("px ") + "px"); return cssText.join(";") + ";"; } function makeStyleCoord$1(out, zr, container, zrX, zrY) { var zrPainter = zr && zr.painter; if (container) { var zrViewportRoot = zrPainter && zrPainter.getViewportRoot(); if (zrViewportRoot) transformLocalCoord(out, zrViewportRoot, container, zrX, zrY); } else { out[0] = zrX; out[1] = zrY; var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset(); if (viewportRootOffset) { out[0] += viewportRootOffset.offsetLeft; out[1] += viewportRootOffset.offsetTop; } } out[2] = out[0] / zr.getWidth(); out[3] = out[1] / zr.getHeight(); } var TooltipHTMLContent = function() { function TooltipHTMLContent(api, opt) { this._show = false; this._styleCoord = [ 0, 0, 0, 0 ]; this._enterable = true; this._alwaysShowContent = false; this._firstShow = true; this._longHide = true; if (env.wxa) return null; var el = document.createElement("div"); el.domBelongToZr = true; this.el = el; var zr = this._zr = api.getZr(); var appendTo = opt.appendTo; var container = appendTo && (isString(appendTo) ? document.querySelector(appendTo) : isDom(appendTo) ? appendTo : isFunction(appendTo) && appendTo(api.getDom())); makeStyleCoord$1(this._styleCoord, zr, container, api.getWidth() / 2, api.getHeight() / 2); (container || api.getDom()).appendChild(el); this._api = api; this._container = container; var self = this; el.onmouseenter = function() { if (self._enterable) { clearTimeout(self._hideTimeout); self._show = true; } self._inContent = true; }; el.onmousemove = function(e) { e = e || window.event; if (!self._enterable) { var handler = zr.handler; normalizeEvent(zr.painter.getViewportRoot(), e, true); handler.dispatch("mousemove", e); } }; el.onmouseleave = function() { self._inContent = false; if (self._enterable) { if (self._show) self.hideLater(self._hideDelay); } }; } /** * Update when tooltip is rendered */ TooltipHTMLContent.prototype.update = function(tooltipModel) { if (!this._container) { var container = this._api.getDom(); var position = getComputedStyle(container, "position"); var domStyle = container.style; if (domStyle.position !== "absolute" && position !== "absolute") domStyle.position = "relative"; } var alwaysShowContent = tooltipModel.get("alwaysShowContent"); alwaysShowContent && this._moveIfResized(); this._alwaysShowContent = alwaysShowContent; this._enableDisplayTransition = tooltipModel.get("displayTransition") && tooltipModel.get("transitionDuration") > 0; this.el.className = tooltipModel.get("className") || ""; }; TooltipHTMLContent.prototype.show = function(tooltipModel, nearPointColor) { clearTimeout(this._hideTimeout); clearTimeout(this._longHideTimeout); var el = this.el; var style = el.style; var styleCoord = this._styleCoord; if (!el.innerHTML) style.display = "none"; else style.cssText = gCssText + assembleCssText(tooltipModel, !this._firstShow, this._longHide, this._enableDisplayTransition) + assembleTransform(styleCoord[0], styleCoord[1], true) + ("border-color:" + convertToColorString(nearPointColor) + ";") + (tooltipModel.get("extraCssText") || "") + (";pointer-events:" + (this._enterable ? "auto" : "none")); this._show = true; this._firstShow = false; this._longHide = false; }; TooltipHTMLContent.prototype.setContent = function(content, markers, tooltipModel, borderColor, arrowPosition) { var el = this.el; if (content == null) { el.innerHTML = ""; return; } var arrow = ""; if (isString(arrowPosition) && tooltipModel.get("trigger") === "item" && !shouldTooltipConfine(tooltipModel)) arrow = assembleArrow(tooltipModel, borderColor, arrowPosition); if (isString(content)) el.innerHTML = content + arrow; else if (content) { el.innerHTML = ""; if (!isArray$1(content)) content = [content]; for (var i = 0; i < content.length; i++) if (isDom(content[i]) && content[i].parentNode !== el) el.appendChild(content[i]); if (arrow && el.childNodes.length) { var arrowEl = document.createElement("div"); arrowEl.innerHTML = arrow; el.appendChild(arrowEl); } } }; TooltipHTMLContent.prototype.setEnterable = function(enterable) { this._enterable = enterable; }; TooltipHTMLContent.prototype.getSize = function() { var el = this.el; return el ? [el.offsetWidth, el.offsetHeight] : [0, 0]; }; TooltipHTMLContent.prototype.moveTo = function(zrX, zrY) { if (!this.el) return; var styleCoord = this._styleCoord; makeStyleCoord$1(styleCoord, this._zr, this._container, zrX, zrY); if (styleCoord[0] != null && styleCoord[1] != null) { var style_1 = this.el.style; each$12(assembleTransform(styleCoord[0], styleCoord[1]), function(transform) { style_1[transform[0]] = transform[1]; }); } }; /** * when `alwaysShowContent` is true, * move the tooltip after chart resized */ TooltipHTMLContent.prototype._moveIfResized = function() { var ratioX = this._styleCoord[2]; var ratioY = this._styleCoord[3]; this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight()); }; TooltipHTMLContent.prototype.hide = function() { var _this = this; var style = this.el.style; if (this._enableDisplayTransition) { style.visibility = "hidden"; style.opacity = "0"; } else style.display = "none"; env.transform3dSupported && (style.willChange = ""); this._show = false; this._longHideTimeout = setTimeout(function() { return _this._longHide = true; }, 500); }; TooltipHTMLContent.prototype.hideLater = function(time) { if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) { if (time) { this._hideDelay = time; this._show = false; this._hideTimeout = setTimeout(bind$1(this.hide, this), time); } else this.hide(); } }; TooltipHTMLContent.prototype.isShow = function() { return this._show; }; TooltipHTMLContent.prototype.dispose = function() { clearTimeout(this._hideTimeout); clearTimeout(this._longHideTimeout); var zr = this._zr; transformLocalCoordClear(zr && zr.painter && zr.painter.getViewportRoot(), this._container); var el = this.el; if (el) { el.onmouseenter = el.onmousemove = el.onmouseleave = null; var parentNode = el.parentNode; parentNode && parentNode.removeChild(el); } this.el = this._container = null; }; return TooltipHTMLContent; }(); //#endregion //#region node_modules/echarts/lib/component/tooltip/TooltipRichContent.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TooltipRichContent = function() { function TooltipRichContent(api) { this._show = false; this._styleCoord = [ 0, 0, 0, 0 ]; this._alwaysShowContent = false; this._enterable = true; this._zr = api.getZr(); makeStyleCoord(this._styleCoord, this._zr, api.getWidth() / 2, api.getHeight() / 2); } /** * Update when tooltip is rendered */ TooltipRichContent.prototype.update = function(tooltipModel) { var alwaysShowContent = tooltipModel.get("alwaysShowContent"); alwaysShowContent && this._moveIfResized(); this._alwaysShowContent = alwaysShowContent; }; TooltipRichContent.prototype.show = function() { if (this._hideTimeout) clearTimeout(this._hideTimeout); this.el.show(); this._show = true; }; /** * Set tooltip content */ TooltipRichContent.prototype.setContent = function(content, markupStyleCreator, tooltipModel, borderColor, arrowPosition) { var _this = this; if (isObject$3(content)) throwError("Passing DOM nodes as content is not supported in richText tooltip!"); if (this.el) this._zr.remove(this.el); var textStyleModel = tooltipModel.getModel("textStyle"); this.el = new ZRText({ style: { rich: markupStyleCreator.richTextStyles, text: content, lineHeight: 22, borderWidth: 1, borderColor, textShadowColor: textStyleModel.get("textShadowColor"), fill: tooltipModel.get(["textStyle", "color"]), padding: getPaddingFromTooltipModel(tooltipModel, "richText"), verticalAlign: "top", align: "left" }, z: tooltipModel.get("z") }); each$12([ "backgroundColor", "borderRadius", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY" ], function(propName) { _this.el.style[propName] = tooltipModel.get(propName); }); each$12([ "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY" ], function(propName) { _this.el.style[propName] = textStyleModel.get(propName) || 0; }); this._zr.add(this.el); var self = this; this.el.on("mouseover", function() { if (self._enterable) { clearTimeout(self._hideTimeout); self._show = true; } self._inContent = true; }); this.el.on("mouseout", function() { if (self._enterable) { if (self._show) self.hideLater(self._hideDelay); } self._inContent = false; }); }; TooltipRichContent.prototype.setEnterable = function(enterable) { this._enterable = enterable; }; TooltipRichContent.prototype.getSize = function() { var el = this.el; var bounding = this.el.getBoundingRect(); var shadowOuterSize = calcShadowOuterSize(el.style); return [bounding.width + shadowOuterSize.left + shadowOuterSize.right, bounding.height + shadowOuterSize.top + shadowOuterSize.bottom]; }; TooltipRichContent.prototype.moveTo = function(x, y) { var el = this.el; if (el) { var styleCoord = this._styleCoord; makeStyleCoord(styleCoord, this._zr, x, y); x = styleCoord[0]; y = styleCoord[1]; var style = el.style; var borderWidth = mathMaxWith0(style.borderWidth || 0); var shadowOuterSize = calcShadowOuterSize(style); el.x = x + borderWidth + shadowOuterSize.left; el.y = y + borderWidth + shadowOuterSize.top; el.markRedraw(); } }; /** * when `alwaysShowContent` is true, * move the tooltip after chart resized */ TooltipRichContent.prototype._moveIfResized = function() { var ratioX = this._styleCoord[2]; var ratioY = this._styleCoord[3]; this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight()); }; TooltipRichContent.prototype.hide = function() { if (this.el) this.el.hide(); this._show = false; }; TooltipRichContent.prototype.hideLater = function(time) { if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) { if (time) { this._hideDelay = time; this._show = false; this._hideTimeout = setTimeout(bind$1(this.hide, this), time); } else this.hide(); } }; TooltipRichContent.prototype.isShow = function() { return this._show; }; TooltipRichContent.prototype.dispose = function() { this._zr.remove(this.el); }; return TooltipRichContent; }(); function mathMaxWith0(val) { return Math.max(0, val); } function calcShadowOuterSize(style) { var shadowBlur = mathMaxWith0(style.shadowBlur || 0); var shadowOffsetX = mathMaxWith0(style.shadowOffsetX || 0); var shadowOffsetY = mathMaxWith0(style.shadowOffsetY || 0); return { left: mathMaxWith0(shadowBlur - shadowOffsetX), right: mathMaxWith0(shadowBlur + shadowOffsetX), top: mathMaxWith0(shadowBlur - shadowOffsetY), bottom: mathMaxWith0(shadowBlur + shadowOffsetY) }; } function makeStyleCoord(out, zr, zrX, zrY) { out[0] = zrX; out[1] = zrY; out[2] = out[0] / zr.getWidth(); out[3] = out[1] / zr.getHeight(); } //#endregion //#region node_modules/echarts/lib/component/tooltip/TooltipView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var proxyRect = new Rect$2({ shape: { x: -1, y: -1, width: 2, height: 2 } }); var TooltipView = function(_super) { __extends(TooltipView, _super); function TooltipView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TooltipView.type; return _this; } TooltipView.prototype.init = function(ecModel, api) { if (env.node || !api.getDom()) return; var tooltipModel = ecModel.getComponent("tooltip"); var renderMode = this._renderMode = getTooltipRenderMode(tooltipModel.get("renderMode")); this._tooltipContent = renderMode === "richText" ? new TooltipRichContent(api) : new TooltipHTMLContent(api, { appendTo: tooltipModel.get("appendToBody", true) ? "body" : tooltipModel.get("appendTo", true) }); }; TooltipView.prototype.render = function(tooltipModel, ecModel, api) { if (env.node || !api.getDom()) return; this.group.removeAll(); this._tooltipModel = tooltipModel; this._ecModel = ecModel; this._api = api; var tooltipContent = this._tooltipContent; tooltipContent.update(tooltipModel); tooltipContent.setEnterable(tooltipModel.get("enterable")); this._initGlobalListener(); this._keepShow(); if (this._renderMode !== "richText" && tooltipModel.get("transitionDuration")) createOrUpdate(this, "_updatePosition", 50, "fixRate"); else clear$1(this, "_updatePosition"); }; TooltipView.prototype._initGlobalListener = function() { var triggerOn = this._tooltipModel.get("triggerOn"); register("itemTooltip", this._api, bind$1(function(currTrigger, e, dispatchAction) { if (triggerOn !== "none") { if (triggerOn.indexOf(currTrigger) >= 0) this._tryShow(e, dispatchAction); else if (currTrigger === "leave") this._hide(dispatchAction); } }, this)); }; TooltipView.prototype._keepShow = function() { var tooltipModel = this._tooltipModel; var ecModel = this._ecModel; var api = this._api; var triggerOn = tooltipModel.get("triggerOn"); if (tooltipModel.get("trigger") !== "axis") { this._lastDataByCoordSys = null; this._cbParamsList = null; } if (this._lastX != null && this._lastY != null && triggerOn !== "none" && triggerOn !== "click") { var self_1 = this; clearTimeout(this._refreshUpdateTimeout); this._refreshUpdateTimeout = setTimeout(function() { !api.isDisposed() && self_1.manuallyShowTip(tooltipModel, ecModel, api, { x: self_1._lastX, y: self_1._lastY, dataByCoordSys: self_1._lastDataByCoordSys }); }); } }; /** * Show tip manually by * dispatchAction({ * type: 'showTip', * x: 10, * y: 10 * }); * Or * dispatchAction({ * type: 'showTip', * seriesIndex: 0, * dataIndex or dataIndexInside or name * }); * * TODO Batch */ TooltipView.prototype.manuallyShowTip = function(tooltipModel, ecModel, api, payload) { if (payload.from === this.uid || env.node || !api.getDom()) return; var dispatchAction = makeDispatchAction(payload, api); this._ticket = ""; var dataByCoordSys = payload.dataByCoordSys; var cmptRef = findComponentReference(payload, ecModel, api); if (cmptRef) { var rect = cmptRef.el.getBoundingRect().clone(); rect.applyTransform(cmptRef.el.transform); this._tryShow({ offsetX: rect.x + rect.width / 2, offsetY: rect.y + rect.height / 2, target: cmptRef.el, position: payload.position, positionDefault: "bottom" }, dispatchAction); } else if (payload.tooltip && payload.x != null && payload.y != null) { var el = proxyRect; el.x = payload.x; el.y = payload.y; el.update(); getECData(el).tooltipConfig = { name: null, option: payload.tooltip }; this._tryShow({ offsetX: payload.x, offsetY: payload.y, target: el }, dispatchAction); } else if (dataByCoordSys) this._tryShow({ offsetX: payload.x, offsetY: payload.y, position: payload.position, dataByCoordSys, tooltipOption: payload.tooltipOption }, dispatchAction); else if (payload.seriesIndex != null) { if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) return; var pointInfo = findPointFromSeries(payload, ecModel); var cx = pointInfo.point[0]; var cy = pointInfo.point[1]; if (cx != null && cy != null) this._tryShow({ offsetX: cx, offsetY: cy, target: pointInfo.el, position: payload.position, positionDefault: "bottom" }, dispatchAction); } else if (payload.x != null && payload.y != null) { api.dispatchAction({ type: "updateAxisPointer", x: payload.x, y: payload.y }); this._tryShow({ offsetX: payload.x, offsetY: payload.y, position: payload.position, target: api.getZr().findHover(payload.x, payload.y).target }, dispatchAction); } }; TooltipView.prototype.manuallyHideTip = function(tooltipModel, ecModel, api, payload) { var tooltipContent = this._tooltipContent; if (this._tooltipModel) tooltipContent.hideLater(this._tooltipModel.get("hideDelay")); this._lastX = this._lastY = this._lastDataByCoordSys = null; this._cbParamsList = null; if (payload.from !== this.uid) this._hide(makeDispatchAction(payload, api)); }; TooltipView.prototype._manuallyAxisShowTip = function(tooltipModel, ecModel, api, payload) { var seriesIndex = payload.seriesIndex; var dataIndex = payload.dataIndex; var coordSysAxesInfo = ecModel.getComponent("axisPointer").coordSysAxesInfo; if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) return; var seriesModel = ecModel.getSeriesByIndex(seriesIndex); if (!seriesModel) return; if (buildTooltipModel([ seriesModel.getData().getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model ], this._tooltipModel).get("trigger") !== "axis") return; api.dispatchAction({ type: "updateAxisPointer", seriesIndex, dataIndex, position: payload.position }); return true; }; TooltipView.prototype._tryShow = function(e, dispatchAction) { var el = e.target; if (!this._tooltipModel) return; this._lastX = e.offsetX; this._lastY = e.offsetY; var dataByCoordSys = e.dataByCoordSys; if (dataByCoordSys && dataByCoordSys.length) this._showAxisTooltip(dataByCoordSys, e); else if (el) { if (getECData(el).ssrType === "legend") return; this._lastDataByCoordSys = null; this._cbParamsList = null; var seriesDispatcher_1; var cmptDispatcher_1; findEventDispatcher(el, function(target) { if (target.tooltipDisabled) { seriesDispatcher_1 = cmptDispatcher_1 = null; return true; } if (seriesDispatcher_1 || cmptDispatcher_1) return; if (getECData(target).dataIndex != null) seriesDispatcher_1 = target; else if (getECData(target).tooltipConfig != null) cmptDispatcher_1 = target; }, true); if (seriesDispatcher_1) this._showSeriesItemTooltip(e, seriesDispatcher_1, dispatchAction); else if (cmptDispatcher_1) this._showComponentItemTooltip(e, cmptDispatcher_1, dispatchAction); else this._hide(dispatchAction); } else { this._lastDataByCoordSys = null; this._cbParamsList = null; this._hide(dispatchAction); } }; TooltipView.prototype._showOrMove = function(tooltipModel, cb) { var delay = tooltipModel.get("showDelay"); cb = bind$1(cb, this); clearTimeout(this._showTimout); delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb(); }; TooltipView.prototype._showAxisTooltip = function(dataByCoordSys, e) { var ecModel = this._ecModel; var globalTooltipModel = this._tooltipModel; var point = [e.offsetX, e.offsetY]; var singleTooltipModel = buildTooltipModel([e.tooltipOption], globalTooltipModel); var renderMode = this._renderMode; var cbParamsList = []; var articleMarkup = createTooltipMarkup("section", { blocks: [], noHeader: true }); var markupTextArrLegacy = []; var markupStyleCreator = new TooltipMarkupStyleCreator(); each$12(dataByCoordSys, function(itemCoordSys) { each$12(itemCoordSys.dataByAxis, function(axisItem) { var axisModel = ecModel.getComponent(axisItem.axisDim + "Axis", axisItem.axisIndex); var axisValue = axisItem.value; var axis = axisModel.axis; var axisValueParsed = axis.scale.parse(axisValue); if (!axisModel || axisValue == null) return; var axisValueLabel = getValueLabel(axisValue, axis, ecModel, axisItem.seriesDataIndices, axisItem.valueLabelOpt); var axisSectionMarkup = createTooltipMarkup("section", { header: axisValueLabel, noHeader: !trim$1(axisValueLabel), sortBlocks: true, blocks: [] }); articleMarkup.blocks.push(axisSectionMarkup); each$12(axisItem.seriesDataIndices, function(idxItem) { var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); var dataIndex = idxItem.dataIndexInside; var cbParams = series.getDataParams(dataIndex); if (cbParams.dataIndex < 0) return; cbParams.axisDim = axisItem.axisDim; cbParams.axisIndex = axisItem.axisIndex; cbParams.axisType = axisItem.axisType; cbParams.axisId = axisItem.axisId; cbParams.axisValue = getAxisRawValue(axisModel.axis, { value: axisValueParsed }); cbParams.axisValueLabel = axisValueLabel; cbParams.marker = markupStyleCreator.makeTooltipMarker("item", convertToColorString(cbParams.color), renderMode); var seriesTooltipResult = normalizeTooltipFormatResult(series.formatTooltip(dataIndex, true, null)); var frag = seriesTooltipResult.frag; if (frag) { var valueFormatter = buildTooltipModel([series], globalTooltipModel).get("valueFormatter"); axisSectionMarkup.blocks.push(valueFormatter ? extend({ valueFormatter }, frag) : frag); } if (seriesTooltipResult.text) markupTextArrLegacy.push(seriesTooltipResult.text); cbParamsList.push(cbParams); }); }); }); articleMarkup.blocks.reverse(); markupTextArrLegacy.reverse(); var positionExpr = e.position; var builtMarkupText = buildTooltipMarkup(articleMarkup, markupStyleCreator, renderMode, singleTooltipModel.get("order"), ecModel.get("useUTC"), singleTooltipModel.get("textStyle")); builtMarkupText && markupTextArrLegacy.unshift(builtMarkupText); var blockBreak = renderMode === "richText" ? "\n\n" : "
"; var allMarkupText = markupTextArrLegacy.join(blockBreak); this._showOrMove(singleTooltipModel, function() { if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, cbParamsList); else this._showTooltipContent(singleTooltipModel, allMarkupText, cbParamsList, Math.random() + "", point[0], point[1], positionExpr, null, markupStyleCreator); }); }; TooltipView.prototype._showSeriesItemTooltip = function(e, dispatcher, dispatchAction) { var ecModel = this._ecModel; var ecData = getECData(dispatcher); var seriesIndex = ecData.seriesIndex; var seriesModel = ecModel.getSeriesByIndex(seriesIndex); var dataModel = ecData.dataModel || seriesModel; var dataIndex = ecData.dataIndex; var dataType = ecData.dataType; var data = dataModel.getData(dataType); var renderMode = this._renderMode; var positionDefault = e.positionDefault; var tooltipModel = buildTooltipModel([ data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model ], this._tooltipModel, positionDefault ? { position: positionDefault } : null); var tooltipTrigger = tooltipModel.get("trigger"); if (tooltipTrigger != null && tooltipTrigger !== "item") return; var params = dataModel.getDataParams(dataIndex, dataType); var markupStyleCreator = new TooltipMarkupStyleCreator(); params.marker = markupStyleCreator.makeTooltipMarker("item", convertToColorString(params.color), renderMode); var seriesTooltipResult = normalizeTooltipFormatResult(dataModel.formatTooltip(dataIndex, false, dataType)); var orderMode = tooltipModel.get("order"); var valueFormatter = tooltipModel.get("valueFormatter"); var frag = seriesTooltipResult.frag; var markupText = frag ? buildTooltipMarkup(valueFormatter ? extend({ valueFormatter }, frag) : frag, markupStyleCreator, renderMode, orderMode, ecModel.get("useUTC"), tooltipModel.get("textStyle")) : seriesTooltipResult.text; var asyncTicket = "item_" + dataModel.name + "_" + dataIndex; this._showOrMove(tooltipModel, function() { this._showTooltipContent(tooltipModel, markupText, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target, markupStyleCreator); }); dispatchAction({ type: "showTip", dataIndexInside: dataIndex, dataIndex: data.getRawIndex(dataIndex), seriesIndex, from: this.uid }); }; TooltipView.prototype._showComponentItemTooltip = function(e, el, dispatchAction) { var isHTMLRenderMode = this._renderMode === "html"; var ecData = getECData(el); var tooltipOpt = ecData.tooltipConfig.option || {}; var encodeHTMLContent = tooltipOpt.encodeHTMLContent; if (isString(tooltipOpt)) { var content = tooltipOpt; tooltipOpt = { content, formatter: content }; encodeHTMLContent = true; } if (encodeHTMLContent && isHTMLRenderMode && tooltipOpt.content) { tooltipOpt = clone$4(tooltipOpt); tooltipOpt.content = encodeHTML(tooltipOpt.content); } var tooltipModelCascade = [tooltipOpt]; var cmpt = this._ecModel.getComponent(ecData.componentMainType, ecData.componentIndex); if (cmpt) tooltipModelCascade.push(cmpt); tooltipModelCascade.push({ formatter: tooltipOpt.content }); var positionDefault = e.positionDefault; var subTooltipModel = buildTooltipModel(tooltipModelCascade, this._tooltipModel, positionDefault ? { position: positionDefault } : null); var defaultHtml = subTooltipModel.get("content"); var asyncTicket = Math.random() + ""; var markupStyleCreator = new TooltipMarkupStyleCreator(); this._showOrMove(subTooltipModel, function() { var formatterParams = clone$4(subTooltipModel.get("formatterParams") || {}); this._showTooltipContent(subTooltipModel, defaultHtml, formatterParams, asyncTicket, e.offsetX, e.offsetY, e.position, el, markupStyleCreator); }); dispatchAction({ type: "showTip", from: this.uid }); }; TooltipView.prototype._showTooltipContent = function(tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markupStyleCreator) { this._ticket = ""; if (!tooltipModel.get("showContent") || !tooltipModel.get("show")) return; var tooltipContent = this._tooltipContent; tooltipContent.setEnterable(tooltipModel.get("enterable")); var formatter = tooltipModel.get("formatter"); positionExpr = positionExpr || tooltipModel.get("position"); var html = defaultHtml; var nearPointColor = this._getNearestPoint([x, y], params, tooltipModel.get("trigger"), tooltipModel.get("borderColor"), tooltipModel.get("defaultBorderColor", true)).color; if (formatter) { if (isString(formatter)) { var useUTC = tooltipModel.ecModel.get("useUTC"); var params0 = isArray$1(params) ? params[0] : params; var isTimeAxis = params0 && params0.axisType && params0.axisType.indexOf("time") >= 0; html = formatter; if (isTimeAxis) html = format(params0.axisValue, html, useUTC); html = formatTpl(html, params, true); } else if (isFunction(formatter)) { var callback = bind$1(function(cbTicket, html) { if (cbTicket === this._ticket) { tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr); this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el); } }, this); this._ticket = asyncTicket; html = formatter(params, asyncTicket, callback); } else html = formatter; } tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr); tooltipContent.show(tooltipModel, nearPointColor); this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el); }; TooltipView.prototype._getNearestPoint = function(point, tooltipDataParams, trigger, borderColor, defaultBorderColor) { if (trigger === "axis" || isArray$1(tooltipDataParams)) return { color: borderColor || defaultBorderColor }; if (!isArray$1(tooltipDataParams)) return { color: borderColor || tooltipDataParams.color || tooltipDataParams.borderColor }; }; TooltipView.prototype._updatePosition = function(tooltipModel, positionExpr, x, y, content, params, el) { var viewWidth = this._api.getWidth(); var viewHeight = this._api.getHeight(); positionExpr = positionExpr || tooltipModel.get("position"); var contentSize = content.getSize(); var align = tooltipModel.get("align"); var vAlign = tooltipModel.get("verticalAlign"); var rect = el && el.getBoundingRect().clone(); el && rect.applyTransform(el.transform); if (isFunction(positionExpr)) positionExpr = positionExpr([x, y], params, content.el, rect, { viewSize: [viewWidth, viewHeight], contentSize: contentSize.slice() }); if (isArray$1(positionExpr)) { x = parsePercent(positionExpr[0], viewWidth); y = parsePercent(positionExpr[1], viewHeight); } else if (isObject$3(positionExpr)) { var boxLayoutPosition = positionExpr; boxLayoutPosition.width = contentSize[0]; boxLayoutPosition.height = contentSize[1]; var layoutRect = getLayoutRect(boxLayoutPosition, { width: viewWidth, height: viewHeight }); x = layoutRect.x; y = layoutRect.y; align = null; vAlign = null; } else if (isString(positionExpr) && el) { var pos = calcTooltipPosition(positionExpr, rect, contentSize, tooltipModel.get("borderWidth")); x = pos[0]; y = pos[1]; } else { var pos = refixTooltipPosition(x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20); x = pos[0]; y = pos[1]; } align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === "right" ? contentSize[0] : 0); vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === "bottom" ? contentSize[1] : 0); if (shouldTooltipConfine(tooltipModel)) { var pos = confineTooltipPosition(x, y, content, viewWidth, viewHeight); x = pos[0]; y = pos[1]; } content.moveTo(x, y); }; TooltipView.prototype._updateContentNotChangedOnAxis = function(dataByCoordSys, cbParamsList) { var lastCoordSys = this._lastDataByCoordSys; var lastCbParamsList = this._cbParamsList; var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length; contentNotChanged && each$12(lastCoordSys, function(lastItemCoordSys, indexCoordSys) { var lastDataByAxis = lastItemCoordSys.dataByAxis || []; var thisDataByAxis = (dataByCoordSys[indexCoordSys] || {}).dataByAxis || []; contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length; contentNotChanged && each$12(lastDataByAxis, function(lastItem, indexAxis) { var thisItem = thisDataByAxis[indexAxis] || {}; var lastIndices = lastItem.seriesDataIndices || []; var newIndices = thisItem.seriesDataIndices || []; contentNotChanged = contentNotChanged && lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length; contentNotChanged && each$12(lastIndices, function(lastIdxItem, j) { var newIdxItem = newIndices[j]; contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex; }); lastCbParamsList && each$12(lastItem.seriesDataIndices, function(idxItem) { var seriesIdx = idxItem.seriesIndex; var cbParams = cbParamsList[seriesIdx]; var lastCbParams = lastCbParamsList[seriesIdx]; if (cbParams && lastCbParams && lastCbParams.data !== cbParams.data) contentNotChanged = false; }); }); }); this._lastDataByCoordSys = dataByCoordSys; this._cbParamsList = cbParamsList; return !!contentNotChanged; }; TooltipView.prototype._hide = function(dispatchAction) { this._lastDataByCoordSys = null; this._cbParamsList = null; dispatchAction({ type: "hideTip", from: this.uid }); }; TooltipView.prototype.dispose = function(ecModel, api) { if (env.node || !api.getDom()) return; clear$1(this, "_updatePosition"); this._tooltipContent.dispose(); unregister("itemTooltip", api); this._tooltipContent = null; this._tooltipModel = null; this._lastDataByCoordSys = null; this._cbParamsList = null; }; TooltipView.type = "tooltip"; return TooltipView; }(ComponentView); /** * From top to bottom. (the last one should be globalTooltipModel); */ function buildTooltipModel(modelCascade, globalTooltipModel, defaultTooltipOption) { var ecModel = globalTooltipModel.ecModel; var resultModel; if (defaultTooltipOption) { resultModel = new Model(defaultTooltipOption, ecModel, ecModel); resultModel = new Model(globalTooltipModel.option, resultModel, ecModel); } else resultModel = globalTooltipModel; for (var i = modelCascade.length - 1; i >= 0; i--) { var tooltipOpt = modelCascade[i]; if (tooltipOpt) { if (tooltipOpt instanceof Model) tooltipOpt = tooltipOpt.get("tooltip", true); if (isString(tooltipOpt)) tooltipOpt = { formatter: tooltipOpt }; if (tooltipOpt) resultModel = new Model(tooltipOpt, resultModel, ecModel); } } return resultModel; } function makeDispatchAction(payload, api) { return payload.dispatchAction || bind$1(api.dispatchAction, api); } function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) { var size = content.getSize(); var width = size[0]; var height = size[1]; if (gapH != null) { if (x + width + gapH + 2 > viewWidth) x -= width + gapH; else x += gapH; } if (gapV != null) { if (y + height + gapV > viewHeight) y -= height + gapV; else y += gapV; } return [x, y]; } function confineTooltipPosition(x, y, content, viewWidth, viewHeight) { var size = content.getSize(); var width = size[0]; var height = size[1]; x = Math.min(x + width, viewWidth) - width; y = Math.min(y + height, viewHeight) - height; x = Math.max(x, 0); y = Math.max(y, 0); return [x, y]; } function calcTooltipPosition(position, rect, contentSize, borderWidth) { var domWidth = contentSize[0]; var domHeight = contentSize[1]; var offset = Math.ceil(Math.SQRT2 * borderWidth) + 8; var x = 0; var y = 0; var rectWidth = rect.width; var rectHeight = rect.height; switch (position) { case "inside": x = rect.x + rectWidth / 2 - domWidth / 2; y = rect.y + rectHeight / 2 - domHeight / 2; break; case "top": x = rect.x + rectWidth / 2 - domWidth / 2; y = rect.y - domHeight - offset; break; case "bottom": x = rect.x + rectWidth / 2 - domWidth / 2; y = rect.y + rectHeight + offset; break; case "left": x = rect.x - domWidth - offset; y = rect.y + rectHeight / 2 - domHeight / 2; break; case "right": x = rect.x + rectWidth + offset; y = rect.y + rectHeight / 2 - domHeight / 2; } return [x, y]; } function isCenterAlign(align) { return align === "center" || align === "middle"; } /** * Find target component by payload like: * ```js * { legendId: 'some_id', name: 'xxx' } * { toolboxIndex: 1, name: 'xxx' } * { geoName: 'some_name', name: 'xxx' } * ``` * PENDING: at present only * * If not found, return null/undefined. */ function findComponentReference(payload, ecModel, api) { var queryOptionMap = preParseFinder(payload).queryOptionMap; var componentMainType = queryOptionMap.keys()[0]; if (!componentMainType || componentMainType === "series") return; var model = queryReferringComponents(ecModel, componentMainType, queryOptionMap.get(componentMainType), { useDefault: false, enableAll: false, enableNone: false }).models[0]; if (!model) return; var view = api.getViewOfComponentModel(model); var el; view.group.traverse(function(subEl) { var tooltipConfig = getECData(subEl).tooltipConfig; if (tooltipConfig && tooltipConfig.name === payload.name) { el = subEl; return true; } }); if (el) return { componentMainType, componentIndex: model.componentIndex, el }; } //#endregion //#region node_modules/echarts/lib/component/tooltip/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$19(registers) { use(install$28); registers.registerComponentModel(TooltipModel); registers.registerComponentView(TooltipView); /** * @action * @property {string} type * @property {number} seriesIndex * @property {number} dataIndex * @property {number} [x] * @property {number} [y] */ registers.registerAction({ type: "showTip", event: "showTip", update: "tooltip:manuallyShowTip" }, noop); registers.registerAction({ type: "hideTip", event: "hideTip", update: "tooltip:manuallyHideTip" }, noop); } //#endregion //#region node_modules/echarts/lib/component/brush/preprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_TOOLBOX_BTNS = [ "rect", "polygon", "keep", "clear" ]; function brushPreprocessor(option, isNew) { var brushComponents = normalizeToArray(option ? option.brush : []); if (!brushComponents.length) return; var brushComponentSpecifiedBtns = []; each$12(brushComponents, function(brushOpt) { var tbs = brushOpt.hasOwnProperty("toolbox") ? brushOpt.toolbox : []; if (tbs instanceof Array) brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs); }); var toolbox = option && option.toolbox; if (isArray$1(toolbox)) toolbox = toolbox[0]; if (!toolbox) { toolbox = { feature: {} }; option.toolbox = [toolbox]; } var toolboxFeature = toolbox.feature || (toolbox.feature = {}); var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {}); var brushTypes = toolboxBrush.type || (toolboxBrush.type = []); brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns); removeDuplicates(brushTypes, function(item) { return item + ""; }, null); if (isNew && !brushTypes.length) brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS); } //#endregion //#region node_modules/echarts/lib/visual/visualSolution.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @file Visual solution, for consistent option specification. */ var each$4 = each$12; function hasKeys(obj) { if (obj) { for (var name_1 in obj) if (obj.hasOwnProperty(name_1)) return true; } } function createVisualMappings(option, stateList, supplementVisualOption) { var visualMappings = {}; each$4(stateList, function(state) { var mappings = visualMappings[state] = createMappings(); each$4(option[state], function(visualData, visualType) { if (!VisualMapping.isValidType(visualType)) return; var mappingOption = { type: visualType, visual: visualData }; supplementVisualOption && supplementVisualOption(mappingOption, state); mappings[visualType] = new VisualMapping(mappingOption); if (visualType === "opacity") { mappingOption = clone$4(mappingOption); mappingOption.type = "colorAlpha"; mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption); } }); }); return visualMappings; function createMappings() { var Creater = function() {}; Creater.prototype.__hidden = Creater.prototype; return new Creater(); } } function replaceVisualOption(thisOption, newOption, keys) { var has; each$12(keys, function(key) { if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) has = true; }); has && each$12(keys, function(key) { if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) thisOption[key] = clone$4(newOption[key]); else delete thisOption[key]; }); } /** * @param stateList * @param visualMappings * @param list * @param getValueState param: valueOrIndex, return: state. * @param scope Scope for getValueState * @param dimension Concrete dimension, if used. */ function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) { var visualTypesMap = {}; each$12(stateList, function(state) { visualTypesMap[state] = VisualMapping.prepareVisualTypes(visualMappings[state]); }); var dataIndex; function getVisual(key) { return getItemVisualFromData(data, dataIndex, key); } function setVisual(key, value) { setItemVisualFromData(data, dataIndex, key, value); } if (dimension == null) data.each(eachItem); else data.each([dimension], eachItem); function eachItem(valueOrIndex, index) { dataIndex = dimension == null ? valueOrIndex : index; var rawDataItem = data.getRawDataItem(dataIndex); if (rawDataItem && rawDataItem.visualMap === false) return; var valueState = getValueState.call(scope, valueOrIndex); var mappings = visualMappings[valueState]; var visualTypes = visualTypesMap[valueState]; for (var i = 0, len = visualTypes.length; i < len; i++) { var type = visualTypes[i]; mappings[type] && mappings[type].applyVisual(valueOrIndex, getVisual, setVisual); } } } /** * @param data * @param stateList * @param visualMappings > * @param getValueState param: valueOrIndex, return: state. * @param dim dimension or dimension index. */ function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) { var visualTypesMap = {}; each$12(stateList, function(state) { visualTypesMap[state] = VisualMapping.prepareVisualTypes(visualMappings[state]); }); return { progress: function progress(params, data) { var dimIndex; if (dim != null) dimIndex = data.getDimensionIndex(dim); function getVisual(key) { return getItemVisualFromData(data, dataIndex, key); } function setVisual(key, value) { setItemVisualFromData(data, dataIndex, key, value); } var dataIndex; var store = data.getStore(); while ((dataIndex = params.next()) != null) { var rawDataItem = data.getRawDataItem(dataIndex); if (rawDataItem && rawDataItem.visualMap === false) continue; var value = dim != null ? store.get(dimIndex, dataIndex) : dataIndex; var valueState = getValueState(value); var mappings = visualMappings[valueState]; var visualTypes = visualTypesMap[valueState]; for (var i = 0, len = visualTypes.length; i < len; i++) { var type = visualTypes[i]; mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual); } } } }; } //#endregion //#region node_modules/echarts/lib/component/brush/selector.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function makeBrushCommonSelectorForSeries(area) { var brushType = area.brushType; var selectors = { point: function(itemLayout) { return selector[brushType].point(itemLayout, selectors, area); }, rect: function(itemLayout) { return selector[brushType].rect(itemLayout, selectors, area); } }; return selectors; } var selector = { lineX: getLineSelectors(0), lineY: getLineSelectors(1), rect: { point: function(itemLayout, selectors, area) { return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]); }, rect: function(itemLayout, selectors, area) { return itemLayout && area.boundingRect.intersect(itemLayout); } }, polygon: { point: function(itemLayout, selectors, area) { return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && contain(area.range, itemLayout[0], itemLayout[1]); }, rect: function(itemLayout, selectors, area) { var points = area.range; if (!itemLayout || points.length <= 1) return false; var x = itemLayout.x; var y = itemLayout.y; var width = itemLayout.width; var height = itemLayout.height; var p = points[0]; if (contain(points, x, y) || contain(points, x + width, y) || contain(points, x, y + height) || contain(points, x + width, y + height) || BoundingRect.create(itemLayout).contain(p[0], p[1]) || linePolygonIntersect(x, y, x + width, y, points) || linePolygonIntersect(x, y, x, y + height, points) || linePolygonIntersect(x + width, y, x + width, y + height, points) || linePolygonIntersect(x, y + height, x + width, y + height, points)) return true; } } }; function getLineSelectors(xyIndex) { var xy = ["x", "y"]; var wh = ["width", "height"]; return { point: function(itemLayout, selectors, area) { if (itemLayout) { var range = area.range; var p = itemLayout[xyIndex]; return inLineRange(p, range); } }, rect: function(itemLayout, selectors, area) { if (itemLayout) { var range = area.range; var layoutRange = [itemLayout[xy[xyIndex]], itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]]; layoutRange[1] < layoutRange[0] && layoutRange.reverse(); return inLineRange(layoutRange[0], range) || inLineRange(layoutRange[1], range) || inLineRange(range[0], layoutRange) || inLineRange(range[1], layoutRange); } } }; } function inLineRange(p, range) { return range[0] <= p && p <= range[1]; } //#endregion //#region node_modules/echarts/lib/component/brush/visualEncoding.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var STATE_LIST = ["inBrush", "outOfBrush"]; var DISPATCH_METHOD = "__ecBrushSelect"; var DISPATCH_FLAG = "__ecInBrushSelectEvent"; function layoutCovers(ecModel) { ecModel.eachComponent({ mainType: "brush" }, function(brushModel) { (brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel)).setInputRanges(brushModel.areas, ecModel); }); } var brushVisualStageHandler = createSimpleOverallStageHandler2(brushVisual); /** * Register the visual encoding if this modules required. */ function brushVisual(ecModel, api, payload) { var brushSelected = []; var throttleType; var throttleDelay; ecModel.eachComponent({ mainType: "brush" }, function(brushModel) { payload && payload.type === "takeGlobalCursor" && brushModel.setBrushOption(payload.key === "brush" ? payload.brushOption : { brushType: false }); }); layoutCovers(ecModel); ecModel.eachComponent({ mainType: "brush" }, function(brushModel, brushIndex) { var thisBrushSelected = { brushId: brushModel.id, brushIndex, brushName: brushModel.name, areas: clone$4(brushModel.areas), selected: [] }; brushSelected.push(thisBrushSelected); var brushOption = brushModel.option; var brushLink = brushOption.brushLink; var linkedSeriesMap = []; var selectedDataIndexForLink = []; var rangeInfoBySeries = []; var hasBrushExists = false; if (!brushIndex) { throttleType = brushOption.throttleType; throttleDelay = brushOption.throttleDelay; } var areas = map$1(brushModel.areas, function(area) { var builder = boundingRectBuilders[area.brushType]; var selectableArea = defaults({ boundingRect: builder ? builder(area) : void 0 }, area); selectableArea.selectors = makeBrushCommonSelectorForSeries(selectableArea); return selectableArea; }); var visualMappings = createVisualMappings(brushModel.option, STATE_LIST, function(mappingOption) { mappingOption.mappingMethod = "fixed"; }); isArray$1(brushLink) && each$12(brushLink, function(seriesIndex) { linkedSeriesMap[seriesIndex] = 1; }); function linkOthers(seriesIndex) { return brushLink === "all" || !!linkedSeriesMap[seriesIndex]; } function brushed(rangeInfoList) { return !!rangeInfoList.length; } /** * Logic for each series: (If the logic has to be modified one day, do it carefully!) * * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers ) => StepA: ┬record, ┬ StepB: ┬visualByRecord. * !brushed┘ ├hasBrushExist ┤ └nothing,┘ ├visualByRecord. * └!hasBrushExist┘ └nothing. * ( !brushed && ┬hasBrushExist ┬ && linkOthers ) => StepA: nothing, StepB: ┬visualByRecord. * └!hasBrushExist┘ └nothing. * ( brushed ┬ && !linkOthers ) => StepA: nothing, StepB: ┬visualByCheck. * !brushed┘ └nothing. * ( !brushed && !linkOthers ) => StepA: nothing, StepB: nothing. */ ecModel.eachSeries(function(seriesModel, seriesIndex) { var rangeInfoList = rangeInfoBySeries[seriesIndex] = []; seriesModel.subType === "parallel" ? stepAParallel(seriesModel, seriesIndex) : stepAOthers(seriesModel, seriesIndex, rangeInfoList); }); function stepAParallel(seriesModel, seriesIndex) { var coordSys = seriesModel.coordinateSystem; hasBrushExists = hasBrushExists || coordSys.hasAxisBrushed(); linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function(activeState, dataIndex) { activeState === "active" && (selectedDataIndexForLink[dataIndex] = 1); }); } function stepAOthers(seriesModel, seriesIndex, rangeInfoList) { if (!seriesModel.brushSelector || brushModelNotControll(brushModel, seriesIndex)) return; each$12(areas, function(area) { if (brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)) rangeInfoList.push(area); hasBrushExists = hasBrushExists || brushed(rangeInfoList); }); if (linkOthers(seriesIndex) && brushed(rangeInfoList)) { var data_1 = seriesModel.getData(); data_1.each(function(dataIndex) { if (checkInRange(seriesModel, rangeInfoList, data_1, dataIndex)) selectedDataIndexForLink[dataIndex] = 1; }); } } ecModel.eachSeries(function(seriesModel, seriesIndex) { var seriesBrushSelected = { seriesId: seriesModel.id, seriesIndex, seriesName: seriesModel.name, dataIndex: [] }; thisBrushSelected.selected.push(seriesBrushSelected); var rangeInfoList = rangeInfoBySeries[seriesIndex]; var data = seriesModel.getData(); var getValueState = linkOthers(seriesIndex) ? function(dataIndex) { return selectedDataIndexForLink[dataIndex] ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), "inBrush") : "outOfBrush"; } : function(dataIndex) { return checkInRange(seriesModel, rangeInfoList, data, dataIndex) ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), "inBrush") : "outOfBrush"; }; (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) && applyVisual(STATE_LIST, visualMappings, data, getValueState); }); }); dispatchAction$1(api, throttleType, throttleDelay, brushSelected, payload); } function dispatchAction$1(api, throttleType, throttleDelay, brushSelected, payload) { if (!payload) return; var zr = api.getZr(); if (zr[DISPATCH_FLAG]) return; if (!zr[DISPATCH_METHOD]) zr[DISPATCH_METHOD] = doDispatch; createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType)(api, brushSelected); } function doDispatch(api, brushSelected) { if (!api.isDisposed()) { var zr = api.getZr(); zr[DISPATCH_FLAG] = true; api.dispatchAction({ type: "brushSelect", batch: brushSelected }); zr[DISPATCH_FLAG] = false; } } function checkInRange(seriesModel, rangeInfoList, data, dataIndex) { for (var i = 0, len = rangeInfoList.length; i < len; i++) { var area = rangeInfoList[i]; if (seriesModel.brushSelector(dataIndex, data, area.selectors, area)) return true; } } function brushModelNotControll(brushModel, seriesIndex) { var seriesIndices = brushModel.option.seriesIndex; return seriesIndices != null && seriesIndices !== "all" && (isArray$1(seriesIndices) ? indexOf(seriesIndices, seriesIndex) < 0 : seriesIndex !== seriesIndices); } var boundingRectBuilders = { rect: function(area) { return getBoundingRectFromMinMax(area.range); }, polygon: function(area) { var minMax; var range = area.range; for (var i = 0, len = range.length; i < len; i++) { minMax = minMax || [initExtentForUnion(), initExtentForUnion()]; var rg = range[i]; rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]); rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]); rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]); rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]); } return minMax && getBoundingRectFromMinMax(minMax); } }; function getBoundingRectFromMinMax(minMax) { return new BoundingRect(minMax[0][0], minMax[1][0], minMax[0][1] - minMax[0][0], minMax[1][1] - minMax[1][0]); } //#endregion //#region node_modules/echarts/lib/component/brush/BrushView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BrushView = function(_super) { __extends(BrushView, _super); function BrushView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = BrushView.type; return _this; } BrushView.prototype.init = function(ecModel, api) { this.ecModel = ecModel; this.api = api; this.model; (this._brushController = new BrushController(api.getZr())).on("brush", bind$1(this._onBrush, this)).mount(); }; BrushView.prototype.render = function(brushModel, ecModel, api, payload) { this.model = brushModel; this._updateController(brushModel, ecModel, api, payload); }; BrushView.prototype.updateTransform = function(brushModel, ecModel, api, payload) { layoutCovers(ecModel); this._updateController(brushModel, ecModel, api, payload); }; BrushView.prototype.updateVisual = function(brushModel, ecModel, api, payload) { this.updateTransform(brushModel, ecModel, api, payload); }; BrushView.prototype.updateView = function(brushModel, ecModel, api, payload) { this._updateController(brushModel, ecModel, api, payload); }; BrushView.prototype._updateController = function(brushModel, ecModel, api, payload) { (!payload || payload.$from !== brushModel.id) && this._brushController.setPanels(brushModel.brushTargetManager.makePanelOpts(api)).enableBrush(brushModel.brushOption).updateCovers(brushModel.areas.slice()); }; BrushView.prototype.dispose = function() { this._brushController.dispose(); }; BrushView.prototype._onBrush = function(eventParam) { var modelId = this.model.id; var areas = this.model.brushTargetManager.setOutputRanges(eventParam.areas, this.ecModel); (!eventParam.isEnd || eventParam.removeOnClick) && this.api.dispatchAction({ type: "brush", brushId: modelId, areas: clone$4(areas), $from: modelId }); eventParam.isEnd && this.api.dispatchAction({ type: "brushEnd", brushId: modelId, areas: clone$4(areas), $from: modelId }); }; BrushView.type = "brush"; return BrushView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/brush/BrushModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BrushModel = function(_super) { __extends(BrushModel, _super); function BrushModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = BrushModel.type; /** * @readOnly */ _this.areas = []; /** * Current brush painting area settings. * @readOnly */ _this.brushOption = {}; return _this; } BrushModel.prototype.optionUpdated = function(newOption, isInit) { var thisOption = this.option; !isInit && replaceVisualOption(thisOption, newOption, ["inBrush", "outOfBrush"]); var inBrush = thisOption.inBrush = thisOption.inBrush || {}; thisOption.outOfBrush = thisOption.outOfBrush || { color: this.option.defaultOutOfBrushColor }; if (!inBrush.hasOwnProperty("liftZ")) inBrush.liftZ = 5; }; /** * If `areas` is null/undefined, range state remain. */ BrushModel.prototype.setAreas = function(areas) { assert(isArray$1(areas)); each$12(areas, function(area) { assert(area.brushType, "Illegal areas"); }); if (!areas) return; this.areas = map$1(areas, function(area) { return generateBrushOption(this.option, area); }, this); }; /** * Set the current painting brush option. */ BrushModel.prototype.setBrushOption = function(brushOption) { this.brushOption = generateBrushOption(this.option, brushOption); this.brushType = this.brushOption.brushType; }; BrushModel.type = "brush"; BrushModel.dependencies = [ "geo", "grid", "xAxis", "yAxis", "parallel", "series" ]; BrushModel.defaultOption = { seriesIndex: "all", brushType: "rect", brushMode: "single", transformable: true, brushStyle: { borderWidth: 1, color: tokens.color.backgroundTint, borderColor: tokens.color.borderTint }, throttleType: "fixRate", throttleDelay: 0, removeOnClick: true, z: 1e4, defaultOutOfBrushColor: tokens.color.disabled }; return BrushModel; }(ComponentModel); function generateBrushOption(option, brushOption) { return merge({ brushType: option.brushType, brushMode: option.brushMode, transformable: option.transformable, brushStyle: new Model(option.brushStyle).getItemStyle(), removeOnClick: option.removeOnClick, z: option.z }, brushOption, true); } //#endregion //#region node_modules/echarts/lib/component/toolbox/feature/Brush.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ICON_TYPES = [ "rect", "polygon", "lineX", "lineY", "keep", "clear" ]; var BrushFeature = function(_super) { __extends(BrushFeature, _super); function BrushFeature() { return _super !== null && _super.apply(this, arguments) || this; } BrushFeature.prototype.render = function(featureModel, ecModel, api) { var brushType; var brushMode; var isBrushed; ecModel.eachComponent({ mainType: "brush" }, function(brushModel) { brushType = brushModel.brushType; brushMode = brushModel.brushOption.brushMode || "single"; isBrushed = isBrushed || !!brushModel.areas.length; }); this._brushType = brushType; this._brushMode = brushMode; each$12(featureModel.get("type", true), function(type) { featureModel.setIconStatus(type, (type === "keep" ? brushMode === "multiple" : type === "clear" ? isBrushed : type === brushType) ? "emphasis" : "normal"); }); }; BrushFeature.prototype.updateView = function(featureModel, ecModel, api) { this.render(featureModel, ecModel, api); }; BrushFeature.prototype.getIcons = function() { var model = this.model; var availableIcons = model.get("icon", true); var icons = {}; each$12(model.get("type", true), function(type) { if (availableIcons[type]) icons[type] = availableIcons[type]; }); return icons; }; BrushFeature.prototype.onclick = function(ecModel, api, type) { var brushType = this._brushType; var brushMode = this._brushMode; if (type === "clear") { api.dispatchAction({ type: "axisAreaSelect", intervals: [] }); api.dispatchAction({ type: "brush", command: "clear", areas: [] }); } else api.dispatchAction({ type: "takeGlobalCursor", key: "brush", brushOption: { brushType: type === "keep" ? brushType : brushType === type ? false : type, brushMode: type === "keep" ? brushMode === "multiple" ? "single" : "multiple" : brushMode } }); }; BrushFeature.getDefaultOption = function(ecModel) { return { show: true, type: ICON_TYPES.slice(), icon: { rect: "M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13", polygon: "M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2", lineX: "M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4", lineY: "M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4", keep: "M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z", clear: "M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2" }, title: ecModel.getLocaleModel().get([ "toolbox", "brush", "title" ]) }; }; return BrushFeature; }(ToolboxFeature); //#endregion //#region node_modules/echarts/lib/component/brush/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$18(registers) { registers.registerComponentView(BrushView); registers.registerComponentModel(BrushModel); registers.registerPreprocessor(brushPreprocessor); registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, brushVisualStageHandler); registers.registerAction({ type: "brush", event: "brush", update: "updateVisual" }, function(payload, ecModel) { ecModel.eachComponent({ mainType: "brush", query: payload }, function(brushModel) { brushModel.setAreas(payload.areas); }); }); /** * payload: { * brushComponents: [ * { * brushId, * brushIndex, * brushName, * series: [ * { * seriesId, * seriesIndex, * seriesName, * rawIndices: [21, 34, ...] * }, * ... * ] * }, * ... * ] * } */ registers.registerAction({ type: "brushSelect", event: "brushSelected", update: "none" }, noop); registers.registerAction({ type: "brushEnd", event: "brushEnd", update: "none" }, noop); registerFeature("brush", BrushFeature); } //#endregion //#region node_modules/echarts/lib/component/title/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TitleModel = function(_super) { __extends(TitleModel, _super); function TitleModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TitleModel.type; _this.layoutMode = { type: "box", ignoreSize: true }; return _this; } TitleModel.type = "title"; TitleModel.defaultOption = { z: 6, show: true, text: "", target: "blank", subtext: "", subtarget: "blank", left: "center", top: tokens.size.m, backgroundColor: tokens.color.transparent, borderColor: tokens.color.primary, borderWidth: 0, padding: 5, itemGap: 10, textStyle: { fontSize: 18, fontWeight: "bold", color: tokens.color.primary }, subtextStyle: { fontSize: 12, color: tokens.color.quaternary } }; return TitleModel; }(ComponentModel); var TitleView = function(_super) { __extends(TitleView, _super); function TitleView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TitleView.type; return _this; } TitleView.prototype.render = function(titleModel, ecModel, api) { this.group.removeAll(); if (!titleModel.get("show")) return; var group = this.group; var textStyleModel = titleModel.getModel("textStyle"); var subtextStyleModel = titleModel.getModel("subtextStyle"); var textAlign = titleModel.get("textAlign"); var textVerticalAlign = retrieve2(titleModel.get("textBaseline"), titleModel.get("textVerticalAlign")); var textEl = new ZRText({ style: createTextStyle$1(textStyleModel, { text: titleModel.get("text"), fill: textStyleModel.getTextColor() }, { disableBox: true }), z2: 10 }); var textRect = textEl.getBoundingRect(); var subText = titleModel.get("subtext"); var subTextEl = new ZRText({ style: createTextStyle$1(subtextStyleModel, { text: subText, fill: subtextStyleModel.getTextColor(), y: textRect.height + titleModel.get("itemGap"), verticalAlign: "top" }, { disableBox: true }), z2: 10 }); var link = titleModel.get("link"); var sublink = titleModel.get("sublink"); var triggerEvent = titleModel.get("triggerEvent", true); textEl.silent = !link && !triggerEvent; subTextEl.silent = !sublink && !triggerEvent; if (link) textEl.on("click", function() { windowOpen(link, "_" + titleModel.get("target")); }); if (sublink) subTextEl.on("click", function() { windowOpen(sublink, "_" + titleModel.get("subtarget")); }); getECData(textEl).eventData = getECData(subTextEl).eventData = triggerEvent ? { componentType: "title", componentIndex: titleModel.componentIndex } : null; group.add(textEl); subText && group.add(subTextEl); var groupRect = group.getBoundingRect(); var layoutOption = titleModel.getBoxLayoutParams(); layoutOption.width = groupRect.width; layoutOption.height = groupRect.height; var layoutRect = getLayoutRect(layoutOption, createBoxLayoutReference(titleModel, api).refContainer, titleModel.get("padding")); if (!textAlign) { textAlign = titleModel.get("left") || titleModel.get("right"); if (textAlign === "middle") textAlign = "center"; if (textAlign === "right") layoutRect.x += layoutRect.width; else if (textAlign === "center") layoutRect.x += layoutRect.width / 2; } if (!textVerticalAlign) { textVerticalAlign = titleModel.get("top") || titleModel.get("bottom"); if (textVerticalAlign === "center") textVerticalAlign = "middle"; if (textVerticalAlign === "bottom") layoutRect.y += layoutRect.height; else if (textVerticalAlign === "middle") layoutRect.y += layoutRect.height / 2; textVerticalAlign = textVerticalAlign || "top"; } group.x = layoutRect.x; group.y = layoutRect.y; group.markRedraw(); var alignStyle = { align: textAlign, verticalAlign: textVerticalAlign }; textEl.setStyle(alignStyle); subTextEl.setStyle(alignStyle); groupRect = group.getBoundingRect(); var padding = layoutRect.margin; var style = titleModel.getItemStyle(["color", "opacity"]); style.fill = titleModel.get("backgroundColor"); var rect = new Rect$2({ shape: { x: groupRect.x - padding[3], y: groupRect.y - padding[0], width: groupRect.width + padding[1] + padding[3], height: groupRect.height + padding[0] + padding[2], r: titleModel.get("borderRadius") }, style, subPixelOptimize: true, silent: true }); group.add(rect); }; TitleView.type = "title"; return TitleView; }(ComponentView); function install$17(registers) { registers.registerComponentModel(TitleModel); registers.registerComponentView(TitleView); } //#endregion //#region node_modules/echarts/lib/component/timeline/TimelineModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TimelineModel = function(_super) { __extends(TimelineModel, _super); function TimelineModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TimelineModel.type; _this.layoutMode = "box"; return _this; } /** * @override */ TimelineModel.prototype.init = function(option, parentModel, ecModel) { this.mergeDefaultAndTheme(option, ecModel); this._initData(); }; /** * @override */ TimelineModel.prototype.mergeOption = function(option) { _super.prototype.mergeOption.apply(this, arguments); this._initData(); }; TimelineModel.prototype.setCurrentIndex = function(currentIndex) { if (currentIndex == null) currentIndex = this.option.currentIndex; var count = this._data.count(); if (this.option.loop) currentIndex = (currentIndex % count + count) % count; else { currentIndex >= count && (currentIndex = count - 1); currentIndex < 0 && (currentIndex = 0); } this.option.currentIndex = currentIndex; }; /** * @return {number} currentIndex */ TimelineModel.prototype.getCurrentIndex = function() { return this.option.currentIndex; }; /** * @return {boolean} */ TimelineModel.prototype.isIndexMax = function() { return this.getCurrentIndex() >= this._data.count() - 1; }; /** * @param {boolean} state true: play, false: stop */ TimelineModel.prototype.setPlayState = function(state) { this.option.autoPlay = !!state; }; /** * @return {boolean} true: play, false: stop */ TimelineModel.prototype.getPlayState = function() { return !!this.option.autoPlay; }; /** * @private */ TimelineModel.prototype._initData = function() { var thisOption = this.option; var dataArr = thisOption.data || []; var axisType = thisOption.axisType; var names = this._names = []; var processedDataArr; if (axisType === "category") { processedDataArr = []; each$12(dataArr, function(item, index) { var value = convertOptionIdName(getDataItemValue(item), ""); var newItem; if (isObject$3(item)) { newItem = clone$4(item); newItem.value = index; } else newItem = index; processedDataArr.push(newItem); names.push(value); }); } else processedDataArr = dataArr; var dimType = { category: "ordinal", time: "time", value: "number" }[axisType] || "number"; (this._data = new SeriesData([{ name: "value", type: dimType }], this)).initData(processedDataArr, names); }; TimelineModel.prototype.getData = function() { return this._data; }; TimelineModel.prototype.getCategories = function() { if (this.get("axisType") === "category") return this._names.slice(); }; TimelineModel.type = "timeline"; /** * @protected */ TimelineModel.defaultOption = { z: 4, show: true, axisType: "time", realtime: true, left: "20%", top: null, right: "20%", bottom: 0, width: null, height: 40, padding: tokens.size.m, controlPosition: "left", autoPlay: false, rewind: false, loop: true, playInterval: 2e3, currentIndex: 0, itemStyle: {}, label: { color: tokens.color.secondary }, data: [] }; return TimelineModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/timeline/SliderTimelineModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SliderTimelineModel = function(_super) { __extends(SliderTimelineModel, _super); function SliderTimelineModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SliderTimelineModel.type; return _this; } SliderTimelineModel.type = "timeline.slider"; /** * @protected */ SliderTimelineModel.defaultOption = inheritDefaultOption(TimelineModel.defaultOption, { backgroundColor: "rgba(0,0,0,0)", borderColor: tokens.color.border, borderWidth: 0, orient: "horizontal", inverse: false, tooltip: { trigger: "item" }, symbol: "circle", symbolSize: 12, lineStyle: { show: true, width: 2, color: tokens.color.accent10 }, label: { position: "auto", show: true, interval: "auto", rotate: 0, color: tokens.color.tertiary }, itemStyle: { color: tokens.color.accent20, borderWidth: 0 }, checkpointStyle: { symbol: "circle", symbolSize: 15, color: tokens.color.accent50, borderColor: tokens.color.accent50, borderWidth: 0, shadowBlur: 0, shadowOffsetX: 0, shadowOffsetY: 0, shadowColor: "rgba(0, 0, 0, 0)", animation: true, animationDuration: 300, animationEasing: "quinticInOut" }, controlStyle: { show: true, showPlayBtn: true, showPrevBtn: true, showNextBtn: true, itemSize: 24, itemGap: 12, position: "left", playIcon: "path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10.6699C11.5 9.90014 12.3333 9.41887 13 9.80371L20.5 14.1338C21.1667 14.5187 21.1667 15.4813 20.5 15.8662L13 20.1963C12.3333 20.5811 11.5 20.0999 11.5 19.3301V10.6699Z", stopIcon: "path://M15 0C23.2843 0 30 6.71573 30 15C30 23.2843 23.2843 30 15 30C6.71573 30 0 23.2843 0 15C0 6.71573 6.71573 0 15 0ZM15 3C8.37258 3 3 8.37258 3 15C3 21.6274 8.37258 27 15 27C21.6274 27 27 21.6274 27 15C27 8.37258 21.6274 3 15 3ZM11.5 10C12.3284 10 13 10.6716 13 11.5V18.5C13 19.3284 12.3284 20 11.5 20C10.6716 20 10 19.3284 10 18.5V11.5C10 10.6716 10.6716 10 11.5 10ZM18.5 10C19.3284 10 20 10.6716 20 11.5V18.5C20 19.3284 19.3284 20 18.5 20C17.6716 20 17 19.3284 17 18.5V11.5C17 10.6716 17.6716 10 18.5 10Z", nextIcon: "path://M0.838834 18.7383C0.253048 18.1525 0.253048 17.2028 0.838834 16.617L7.55635 9.89949L0.838834 3.18198C0.253048 2.59619 0.253048 1.64645 0.838834 1.06066C1.42462 0.474874 2.37437 0.474874 2.96015 1.06066L10.7383 8.83883L10.8412 8.95277C11.2897 9.50267 11.2897 10.2963 10.8412 10.8462L10.7383 10.9602L2.96015 18.7383C2.37437 19.3241 1.42462 19.3241 0.838834 18.7383Z", prevIcon: "path://M10.9602 1.06066C11.5459 1.64645 11.5459 2.59619 10.9602 3.18198L4.24264 9.89949L10.9602 16.617C11.5459 17.2028 11.5459 18.1525 10.9602 18.7383C10.3744 19.3241 9.42462 19.3241 8.83883 18.7383L1.06066 10.9602L0.957771 10.8462C0.509245 10.2963 0.509245 9.50267 0.957771 8.95277L1.06066 8.83883L8.83883 1.06066C9.42462 0.474874 10.3744 0.474874 10.9602 1.06066Z", prevBtnSize: 18, nextBtnSize: 18, color: tokens.color.accent50, borderColor: tokens.color.accent50, borderWidth: 0 }, emphasis: { label: { show: true, color: tokens.color.accent60 }, itemStyle: { color: tokens.color.accent60, borderColor: tokens.color.accent60 }, controlStyle: { color: tokens.color.accent70, borderColor: tokens.color.accent70 } }, progress: { lineStyle: { color: tokens.color.accent30 }, itemStyle: { color: tokens.color.accent40 } }, data: [] }); return SliderTimelineModel; }(TimelineModel); mixin(SliderTimelineModel, DataFormatMixin.prototype); //#endregion //#region node_modules/echarts/lib/component/timeline/TimelineView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var TimelineView = function(_super) { __extends(TimelineView, _super); function TimelineView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = TimelineView.type; return _this; } TimelineView.type = "timeline"; return TimelineView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/timeline/TimelineAxis.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Extend axis 2d */ var TimelineAxis = function(_super) { __extends(TimelineAxis, _super); function TimelineAxis(dim, scale, coordExtent, axisType) { var _this = _super.call(this, dim, scale, coordExtent) || this; _this.type = axisType || "value"; return _this; } /** * @override */ TimelineAxis.prototype.getLabelModel = function() { return this.model.getModel("label"); }; /** * @override */ TimelineAxis.prototype.isHorizontal = function() { return this.model.get("orient") === "horizontal"; }; return TimelineAxis; }(Axis); //#endregion //#region node_modules/echarts/lib/component/timeline/SliderTimelineView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PI = Math.PI; var labelDataIndexStore = makeInner(); var SliderTimelineView = function(_super) { __extends(SliderTimelineView, _super); function SliderTimelineView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SliderTimelineView.type; return _this; } SliderTimelineView.prototype.init = function(ecModel, api) { this.api = api; }; /** * @override */ SliderTimelineView.prototype.render = function(timelineModel, ecModel, api) { this.model = timelineModel; this.api = api; this.ecModel = ecModel; this.group.removeAll(); if (timelineModel.get("show", true)) { var layoutInfo_1 = this._layout(timelineModel, api); var mainGroup_1 = this._createGroup("_mainGroup"); var labelGroup = this._createGroup("_labelGroup"); var axis_1 = this._axis = this._createAxis(layoutInfo_1, timelineModel); timelineModel.formatTooltip = function(dataIndex) { return createTooltipMarkup("nameValue", { noName: true, value: axis_1.scale.getLabel({ value: dataIndex }) }); }; each$12([ "AxisLine", "AxisTick", "Control", "CurrentPointer" ], function(name) { this["_render" + name](layoutInfo_1, mainGroup_1, axis_1, timelineModel); }, this); this._renderAxisLabel(layoutInfo_1, labelGroup, axis_1, timelineModel); this._position(layoutInfo_1, timelineModel); } this._doPlayStop(); this._updateTicksStatus(); }; /** * @override */ SliderTimelineView.prototype.remove = function() { this._clearTimer(); this.group.removeAll(); }; /** * @override */ SliderTimelineView.prototype.dispose = function() { this._clearTimer(); }; SliderTimelineView.prototype._layout = function(timelineModel, api) { var labelPosOpt = timelineModel.get(["label", "position"]); var orient = timelineModel.get("orient"); var viewRect = getViewRect(timelineModel, api); var parsedLabelPos; if (labelPosOpt == null || labelPosOpt === "auto") parsedLabelPos = orient === "horizontal" ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? "-" : "+" : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? "+" : "-"; else if (isString(labelPosOpt)) parsedLabelPos = { horizontal: { top: "-", bottom: "+" }, vertical: { left: "-", right: "+" } }[orient][labelPosOpt]; else parsedLabelPos = labelPosOpt; var labelAlignMap = { horizontal: "center", vertical: parsedLabelPos >= 0 || parsedLabelPos === "+" ? "left" : "right" }; var labelBaselineMap = { horizontal: parsedLabelPos >= 0 || parsedLabelPos === "+" ? "top" : "bottom", vertical: "middle" }; var rotationMap = { horizontal: 0, vertical: PI / 2 }; var mainLength = orient === "vertical" ? viewRect.height : viewRect.width; var controlModel = timelineModel.getModel("controlStyle"); var showControl = controlModel.get("show", true); var controlSize = showControl ? controlModel.get("itemSize") : 0; var controlGap = showControl ? controlModel.get("itemGap") : 0; var sizePlusGap = controlSize + controlGap; var labelRotation = timelineModel.get(["label", "rotate"]) || 0; labelRotation = labelRotation * PI / 180; var playPosition; var prevBtnPosition; var nextBtnPosition; var controlPosition = controlModel.get("position", true); var showPlayBtn = showControl && controlModel.get("showPlayBtn", true); var showPrevBtn = showControl && controlModel.get("showPrevBtn", true); var showNextBtn = showControl && controlModel.get("showNextBtn", true); var xLeft = 0; var xRight = mainLength; if (controlPosition === "left" || controlPosition === "bottom") { showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap); showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap); showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); } else { showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap); showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); } var axisExtent = [xLeft, xRight]; if (timelineModel.get("inverse")) axisExtent.reverse(); return { viewRect, mainLength, orient, rotation: rotationMap[orient], labelRotation, labelPosOpt: parsedLabelPos, labelAlign: timelineModel.get(["label", "align"]) || labelAlignMap[orient], labelBaseline: timelineModel.get(["label", "verticalAlign"]) || timelineModel.get(["label", "baseline"]) || labelBaselineMap[orient], playPosition, prevBtnPosition, nextBtnPosition, axisExtent, controlSize, controlGap }; }; SliderTimelineView.prototype._position = function(layoutInfo, timelineModel) { var mainGroup = this._mainGroup; var labelGroup = this._labelGroup; var viewRect = layoutInfo.viewRect; if (layoutInfo.orient === "vertical") { var m = create$1(); var rotateOriginX = viewRect.x; var rotateOriginY = viewRect.y + viewRect.height; translate(m, m, [-rotateOriginX, -rotateOriginY]); rotate(m, m, -PI / 2); translate(m, m, [rotateOriginX, rotateOriginY]); viewRect = viewRect.clone(); viewRect.applyTransform(m); } var viewBound = getBound(viewRect); var mainBound = getBound(mainGroup.getBoundingRect()); var labelBound = getBound(labelGroup.getBoundingRect()); var mainPosition = [mainGroup.x, mainGroup.y]; var labelsPosition = [labelGroup.x, labelGroup.y]; labelsPosition[0] = mainPosition[0] = viewBound[0][0]; var labelPosOpt = layoutInfo.labelPosOpt; if (labelPosOpt == null || isString(labelPosOpt)) { var mainBoundIdx = labelPosOpt === "+" ? 0 : 1; toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx); } else { var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1; toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); labelsPosition[1] = mainPosition[1] + labelPosOpt; } mainGroup.setPosition(mainPosition); labelGroup.setPosition(labelsPosition); mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation; setOrigin(mainGroup); setOrigin(labelGroup); function setOrigin(targetGroup) { targetGroup.originX = viewBound[0][0] - targetGroup.x; targetGroup.originY = viewBound[1][0] - targetGroup.y; } function getBound(rect) { return [[rect.x, rect.x + rect.width], [rect.y, rect.y + rect.height]]; } function toBound(fromPos, from, to, dimIdx, boundIdx) { fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx]; } }; SliderTimelineView.prototype._createAxis = function(layoutInfo, timelineModel) { var data = timelineModel.getData(); var axisType = timelineModel.get("axisType") || timelineModel.get("type"); if (axisType !== "category" && axisType !== "time") axisType = "value"; var scale = createScaleByModel(timelineModel, axisType, false); scale.getTicks = function() { return data.mapArray(["value"], function(value) { return { value }; }); }; var dataExtent = data.getDataExtent("value"); scale.setExtent(dataExtent[0], dataExtent[1]); scaleCalcNiceDirectly(scale, { fixMinMax: [true, true] }); var axis = new TimelineAxis("value", scale, layoutInfo.axisExtent, axisType); axis.model = timelineModel; return axis; }; SliderTimelineView.prototype._createGroup = function(key) { var newGroup = this[key] = new Group$3(); this.group.add(newGroup); return newGroup; }; SliderTimelineView.prototype._renderAxisLine = function(layoutInfo, group, axis, timelineModel) { var axisExtent = axis.getExtent(); if (!timelineModel.get(["lineStyle", "show"])) return; var line = new Line$1({ shape: { x1: axisExtent[0], y1: 0, x2: axisExtent[1], y2: 0 }, style: extend({ lineCap: "round" }, timelineModel.getModel("lineStyle").getLineStyle()), silent: true, z2: 1 }); group.add(line); var progressLine = this._progressLine = new Line$1({ shape: { x1: axisExtent[0], x2: this._currentPointer ? this._currentPointer.x : axisExtent[0], y1: 0, y2: 0 }, style: defaults({ lineCap: "round", lineWidth: line.style.lineWidth }, timelineModel.getModel(["progress", "lineStyle"]).getLineStyle()), silent: true, z2: 1 }); group.add(progressLine); }; SliderTimelineView.prototype._renderAxisTick = function(layoutInfo, group, axis, timelineModel) { var _this = this; var data = timelineModel.getData(); var ticks = axis.scale.getTicks(); this._tickSymbols = []; each$12(ticks, function(tick) { var tickCoord = axis.dataToCoord(tick.value); var itemModel = data.getItemModel(tick.value); var itemStyleModel = itemModel.getModel("itemStyle"); var hoverStyleModel = itemModel.getModel(["emphasis", "itemStyle"]); var progressStyleModel = itemModel.getModel(["progress", "itemStyle"]); var el = giveSymbol(itemModel, itemStyleModel, group, { x: tickCoord, y: 0, onclick: bind$1(_this._changeTimeline, _this, tick.value) }); el.ensureState("emphasis").style = hoverStyleModel.getItemStyle(); el.ensureState("progress").style = progressStyleModel.getItemStyle(); enableHoverEmphasis(el); var ecData = getECData(el); if (itemModel.get("tooltip")) { ecData.dataIndex = tick.value; ecData.dataModel = timelineModel; } else ecData.dataIndex = ecData.dataModel = null; _this._tickSymbols.push(el); }); }; SliderTimelineView.prototype._renderAxisLabel = function(layoutInfo, group, axis, timelineModel) { var _this = this; if (!axis.getLabelModel().get("show")) return; var data = timelineModel.getData(); var labels = axis.getViewLabels(); this._tickLabels = []; each$12(labels, function(labelItem) { if (labelItem.tick.offInterval) return; var dataIndex = labelItem.tick.value; var itemModel = data.getItemModel(dataIndex); var normalLabelModel = itemModel.getModel("label"); var hoverLabelModel = itemModel.getModel(["emphasis", "label"]); var progressLabelModel = itemModel.getModel(["progress", "label"]); var textEl = new ZRText({ x: axis.dataToCoord(dataIndex), y: 0, rotation: layoutInfo.labelRotation - layoutInfo.rotation, onclick: bind$1(_this._changeTimeline, _this, dataIndex), silent: false, style: createTextStyle$1(normalLabelModel, { text: labelItem.formattedLabel, align: layoutInfo.labelAlign, verticalAlign: layoutInfo.labelBaseline }) }); textEl.ensureState("emphasis").style = createTextStyle$1(hoverLabelModel); textEl.ensureState("progress").style = createTextStyle$1(progressLabelModel); group.add(textEl); enableHoverEmphasis(textEl); labelDataIndexStore(textEl).dataIndex = dataIndex; _this._tickLabels.push(textEl); }); }; SliderTimelineView.prototype._renderControl = function(layoutInfo, group, axis, timelineModel) { var controlSize = layoutInfo.controlSize; var rotation = layoutInfo.rotation; var itemStyle = timelineModel.getModel("controlStyle").getItemStyle(); var hoverStyle = timelineModel.getModel(["emphasis", "controlStyle"]).getItemStyle(); var playState = timelineModel.getPlayState(); var inverse = timelineModel.get("inverse", true); makeBtn(layoutInfo.nextBtnPosition, "next", bind$1(this._changeTimeline, this, inverse ? "-" : "+")); makeBtn(layoutInfo.prevBtnPosition, "prev", bind$1(this._changeTimeline, this, inverse ? "+" : "-")); makeBtn(layoutInfo.playPosition, playState ? "stop" : "play", bind$1(this._handlePlayClick, this, !playState), true); function makeBtn(position, iconName, onclick, willRotate) { if (!position) return; var iconSize = parsePercent$1(retrieve2(timelineModel.get(["controlStyle", iconName + "BtnSize"]), controlSize), controlSize); var rect = [ 0, -iconSize / 2, iconSize, iconSize ]; var btn = makeControlIcon(timelineModel, iconName + "Icon", rect, { x: position[0], y: position[1], originX: controlSize / 2, originY: 0, rotation: willRotate ? -rotation : 0, rectHover: true, style: itemStyle, onclick }); btn.ensureState("emphasis").style = hoverStyle; group.add(btn); enableHoverEmphasis(btn); } }; SliderTimelineView.prototype._renderCurrentPointer = function(layoutInfo, group, axis, timelineModel) { var data = timelineModel.getData(); var currentIndex = timelineModel.getCurrentIndex(); var pointerModel = data.getItemModel(currentIndex).getModel("checkpointStyle"); var me = this; var callback = { onCreate: function(pointer) { pointer.draggable = true; pointer.drift = bind$1(me._handlePointerDrag, me); pointer.ondragend = bind$1(me._handlePointerDragend, me); pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel, true); }, onUpdate: function(pointer) { pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel); } }; this._currentPointer = giveSymbol(pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback); }; SliderTimelineView.prototype._handlePlayClick = function(nextState) { this._clearTimer(); this.api.dispatchAction({ type: "timelinePlayChange", playState: nextState, from: this.uid }); }; SliderTimelineView.prototype._handlePointerDrag = function(dx, dy, e) { this._clearTimer(); this._pointerChangeTimeline([e.offsetX, e.offsetY]); }; SliderTimelineView.prototype._handlePointerDragend = function(e) { this._pointerChangeTimeline([e.offsetX, e.offsetY], true); }; SliderTimelineView.prototype._pointerChangeTimeline = function(mousePos, trigger) { var toCoord = this._toAxisCoord(mousePos)[0]; var axis = this._axis; var axisExtent = asc$1(axis.getExtent().slice()); toCoord > axisExtent[1] && (toCoord = axisExtent[1]); toCoord < axisExtent[0] && (toCoord = axisExtent[0]); this._currentPointer.x = toCoord; this._currentPointer.markRedraw(); var progressLine = this._progressLine; if (progressLine) { progressLine.shape.x2 = toCoord; progressLine.dirty(); } var targetDataIndex = this._findNearestTick(toCoord); var timelineModel = this.model; if (trigger || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get("realtime")) this._changeTimeline(targetDataIndex); }; SliderTimelineView.prototype._doPlayStop = function() { var _this = this; this._clearTimer(); if (this.model.getPlayState()) this._timer = setTimeout(function() { var timelineModel = _this.model; _this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get("rewind", true) ? -1 : 1)); }, this.model.get("playInterval")); }; SliderTimelineView.prototype._toAxisCoord = function(vertex) { return applyTransform(vertex, this._mainGroup.getLocalTransform(), true); }; SliderTimelineView.prototype._findNearestTick = function(axisCoord) { var data = this.model.getData(); var dist = Infinity; var targetDataIndex; var axis = this._axis; data.each(["value"], function(value, dataIndex) { var coord = axis.dataToCoord(value); var d = Math.abs(coord - axisCoord); if (d < dist) { dist = d; targetDataIndex = dataIndex; } }); return targetDataIndex; }; SliderTimelineView.prototype._clearTimer = function() { if (this._timer) { clearTimeout(this._timer); this._timer = null; } }; SliderTimelineView.prototype._changeTimeline = function(nextIndex) { var currentIndex = this.model.getCurrentIndex(); if (nextIndex === "+") nextIndex = currentIndex + 1; else if (nextIndex === "-") nextIndex = currentIndex - 1; this.api.dispatchAction({ type: "timelineChange", currentIndex: nextIndex, from: this.uid }); }; SliderTimelineView.prototype._updateTicksStatus = function() { var currentIndex = this.model.getCurrentIndex(); var tickSymbols = this._tickSymbols; var tickLabels = this._tickLabels; if (tickSymbols) for (var i = 0; i < tickSymbols.length; i++) tickSymbols && tickSymbols[i] && tickSymbols[i].toggleState("progress", i < currentIndex); if (tickLabels) for (var i = 0; i < tickLabels.length; i++) tickLabels && tickLabels[i] && tickLabels[i].toggleState("progress", labelDataIndexStore(tickLabels[i]).dataIndex <= currentIndex); }; SliderTimelineView.type = "timeline.slider"; return SliderTimelineView; }(TimelineView); function getViewRect(model, api) { return getLayoutRect(model.getBoxLayoutParams(), createBoxLayoutReference(model, api).refContainer, model.get("padding")); } function makeControlIcon(timelineModel, objPath, rect, opts) { var style = opts.style; var icon = createIcon(timelineModel.get(["controlStyle", objPath]), opts || {}, new BoundingRect(rect[0], rect[1], rect[2], rect[3])); if (style) icon.setStyle(style); return icon; } /** * Create symbol or update symbol * opt: basic position and event handlers */ function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) { var color = itemStyleModel.get("color"); if (!symbol) { symbol = createSymbol$1(hostModel.get("symbol"), -1, -1, 2, 2, color); symbol.setStyle("strokeNoScale", true); group.add(symbol); callback && callback.onCreate(symbol); } else { symbol.setColor(color); group.add(symbol); callback && callback.onUpdate(symbol); } var itemStyle = itemStyleModel.getItemStyle(["color"]); symbol.setStyle(itemStyle); opt = merge({ rectHover: true, z2: 100 }, opt, true); var symbolSize = normalizeSymbolSize(hostModel.get("symbolSize")); opt.scaleX = symbolSize[0] / 2; opt.scaleY = symbolSize[1] / 2; var symbolOffset = normalizeSymbolOffset(hostModel.get("symbolOffset"), symbolSize); if (symbolOffset) { opt.x = (opt.x || 0) + symbolOffset[0]; opt.y = (opt.y || 0) + symbolOffset[1]; } var symbolRotate = hostModel.get("symbolRotate"); opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0; symbol.attr(opt); symbol.updateTransform(); return symbol; } function pointerMoveTo(pointer, progressLine, dataIndex, axis, timelineModel, noAnimation) { if (pointer.dragging) return; var pointerModel = timelineModel.getModel("checkpointStyle"); var toCoord = axis.dataToCoord(timelineModel.getData().get("value", dataIndex)); if (noAnimation || !pointerModel.get("animation", true)) { pointer.attr({ x: toCoord, y: 0 }); progressLine && progressLine.attr({ shape: { x2: toCoord } }); } else { var animationCfg = { duration: pointerModel.get("animationDuration", true), easing: pointerModel.get("animationEasing", true) }; pointer.stopAnimation(null, true); pointer.animateTo({ x: toCoord, y: 0 }, animationCfg); progressLine && progressLine.animateTo({ shape: { x2: toCoord } }, animationCfg); } } //#endregion //#region node_modules/echarts/lib/component/timeline/timelineAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function installTimelineAction(registers) { registers.registerAction({ type: "timelineChange", event: "timelineChanged", update: "prepareAndUpdate" }, function(payload, ecModel, api) { var timelineModel = ecModel.getComponent("timeline"); if (timelineModel && payload.currentIndex != null) { timelineModel.setCurrentIndex(payload.currentIndex); if (!timelineModel.get("loop", true) && timelineModel.isIndexMax() && timelineModel.getPlayState()) { timelineModel.setPlayState(false); api.dispatchAction({ type: "timelinePlayChange", playState: false, from: payload.from }); } } ecModel.resetOption("timeline", { replaceMerge: timelineModel.get("replaceMerge", true) }); return defaults({ currentIndex: timelineModel.option.currentIndex }, payload); }); registers.registerAction({ type: "timelinePlayChange", event: "timelinePlayChanged", update: "update" }, function(payload, ecModel) { var timelineModel = ecModel.getComponent("timeline"); if (timelineModel && payload.playState != null) timelineModel.setPlayState(payload.playState); }); } //#endregion //#region node_modules/echarts/lib/component/timeline/preprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function timelinePreprocessor(option) { var timelineOpt = option && option.timeline; if (!isArray$1(timelineOpt)) timelineOpt = timelineOpt ? [timelineOpt] : []; each$12(timelineOpt, function(opt) { if (!opt) return; compatibleEC2(opt); }); } function compatibleEC2(opt) { var type = opt.type; var ec2Types = { "number": "value", "time": "time" }; if (ec2Types[type]) { opt.axisType = ec2Types[type]; delete opt.type; } transferItem(opt); if (has$1(opt, "controlPosition")) { var controlStyle = opt.controlStyle || (opt.controlStyle = {}); if (!has$1(controlStyle, "position")) controlStyle.position = opt.controlPosition; if (controlStyle.position === "none" && !has$1(controlStyle, "show")) { controlStyle.show = false; delete controlStyle.position; } delete opt.controlPosition; } each$12(opt.data || [], function(dataItem) { if (isObject$3(dataItem) && !isArray$1(dataItem)) { if (!has$1(dataItem, "value") && has$1(dataItem, "name")) dataItem.value = dataItem.name; transferItem(dataItem); } }); } function transferItem(opt) { var itemStyle = opt.itemStyle || (opt.itemStyle = {}); var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); var label = opt.label || opt.label || {}; var labelNormal = label.normal || (label.normal = {}); var excludeLabelAttr = { normal: 1, emphasis: 1 }; each$12(label, function(value, name) { if (!excludeLabelAttr[name] && !has$1(labelNormal, name)) labelNormal[name] = value; }); if (itemStyleEmphasis.label && !has$1(label, "emphasis")) { label.emphasis = itemStyleEmphasis.label; delete itemStyleEmphasis.label; } } function has$1(obj, attr) { return obj.hasOwnProperty(attr); } //#endregion //#region node_modules/echarts/lib/component/timeline/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$16(registers) { registers.registerComponentModel(SliderTimelineModel); registers.registerComponentView(SliderTimelineView); registers.registerSubTypeDefaulter("timeline", function() { return "slider"; }); installTimelineAction(registers); registers.registerPreprocessor(timelinePreprocessor); } //#endregion //#region node_modules/echarts/lib/component/marker/checkMarkerInSeries.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function checkMarkerInSeries(seriesOpts, markerType) { if (!seriesOpts) return false; var seriesOptArr = isArray$1(seriesOpts) ? seriesOpts : [seriesOpts]; for (var idx = 0; idx < seriesOptArr.length; idx++) if (seriesOptArr[idx] && seriesOptArr[idx][markerType]) return true; return false; } //#endregion //#region node_modules/echarts/lib/component/marker/MarkerModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function fillLabel(opt) { defaultEmphasis(opt, "label", ["show"]); } var inner$4 = makeInner(); var MarkerModel = function(_super) { __extends(MarkerModel, _super); function MarkerModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkerModel.type; /** * If marker model is created by self from series */ _this.createdBySelf = false; _this.preventAutoZ = true; return _this; } /** * @overrite */ MarkerModel.prototype.init = function(option, parentModel, ecModel) { if (this.type === "marker") throw new Error("Marker component is abstract component. Use markLine, markPoint, markArea instead."); this.mergeDefaultAndTheme(option, ecModel); this._mergeOption(option, ecModel, false, true); }; MarkerModel.prototype.isAnimationEnabled = function() { if (env.node) return false; var hostSeries = this.__hostSeries; return this.getShallow("animation") && hostSeries && hostSeries.isAnimationEnabled(); }; /** * @overrite */ MarkerModel.prototype.mergeOption = function(newOpt, ecModel) { this._mergeOption(newOpt, ecModel, false, false); }; MarkerModel.prototype._mergeOption = function(newOpt, ecModel, createdBySelf, isInit) { var componentType = this.mainType; if (!createdBySelf) ecModel.eachSeries(function(seriesModel) { var markerOpt = seriesModel.get(this.mainType, true); var markerModel = inner$4(seriesModel)[componentType]; if (!markerOpt || !markerOpt.data) { inner$4(seriesModel)[componentType] = null; return; } if (!markerModel) { if (isInit) fillLabel(markerOpt); each$12(markerOpt.data, function(item) { if (item instanceof Array) { fillLabel(item[0]); fillLabel(item[1]); } else fillLabel(item); }); markerModel = this.createMarkerModelFromSeries(markerOpt, this, ecModel); extend(markerModel, { mainType: this.mainType, seriesIndex: seriesModel.seriesIndex, name: seriesModel.name, createdBySelf: true }); markerModel.__hostSeries = seriesModel; } else markerModel._mergeOption(markerOpt, ecModel, true); inner$4(seriesModel)[componentType] = markerModel; }, this); }; MarkerModel.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { var data = this.getData(); var value = this.getRawValue(dataIndex); var itemName = data.getName(dataIndex); return createTooltipMarkup("section", { header: this.name, blocks: [createTooltipMarkup("nameValue", { name: itemName, value, noName: !itemName, noValue: value == null })] }); }; MarkerModel.prototype.getData = function() { return this._data; }; MarkerModel.prototype.setData = function(data) { this._data = data; }; MarkerModel.prototype.getDataParams = function(dataIndex, dataType) { var params = DataFormatMixin.prototype.getDataParams.call(this, dataIndex, dataType); var hostSeries = this.__hostSeries; if (hostSeries) { params.seriesId = hostSeries.id; params.seriesName = hostSeries.name; params.seriesType = hostSeries.subType; } return params; }; MarkerModel.getMarkerModelFromSeries = function(seriesModel, componentType) { return inner$4(seriesModel)[componentType]; }; MarkerModel.type = "marker"; MarkerModel.dependencies = [ "series", "grid", "polar", "geo" ]; return MarkerModel; }(ComponentModel); mixin(MarkerModel, DataFormatMixin.prototype); //#endregion //#region node_modules/echarts/lib/component/marker/MarkPointModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var MarkPointModel = function(_super) { __extends(MarkPointModel, _super); function MarkPointModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkPointModel.type; return _this; } MarkPointModel.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) { return new MarkPointModel(markerOpt, masterMarkerModel, ecModel); }; MarkPointModel.type = "markPoint"; MarkPointModel.defaultOption = { z: 5, symbol: "pin", symbolSize: 50, tooltip: { trigger: "item" }, label: { show: true, position: "inside" }, itemStyle: { borderWidth: 2 }, emphasis: { label: { show: true } } }; return MarkPointModel; }(MarkerModel); //#endregion //#region node_modules/echarts/lib/component/marker/markerHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function hasXOrY(item) { return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y))); } function hasXAndY(item) { return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y)); } function markerTypeCalculatorWithExtent(markerType, data, axisDim, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) { var coordArr = []; var calcDataDim = isDimensionStacked(data, targetDataDim) ? data.getCalculationInfo("stackResultDimension") : targetDataDim; var value = numCalculate(data, calcDataDim, markerType); var dataIndex = data.hostModel.indicesOfNearest(axisDim, calcDataDim, value)[0]; coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex); coordArr[targetCoordIndex] = data.get(calcDataDim, dataIndex); var coordArrValue = data.get(targetDataDim, dataIndex); var precision = getPrecision(data.get(targetDataDim, dataIndex)); precision = Math.min(precision, 20); if (precision >= 0) coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision); return [coordArr, coordArrValue]; } var markerTypeCalculator = { min: curry$1(markerTypeCalculatorWithExtent, "min"), max: curry$1(markerTypeCalculatorWithExtent, "max"), average: curry$1(markerTypeCalculatorWithExtent, "average"), median: curry$1(markerTypeCalculatorWithExtent, "median") }; /** * Transform markPoint data item to format used in List by do the following * 1. Calculate statistic like `max`, `min`, `average` * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array */ function dataTransform(seriesModel, item) { if (!item) return; var data = seriesModel.getData(); var coordSys = seriesModel.coordinateSystem; var dims = coordSys && coordSys.dimensions; if (!hasXAndY(item) && !isArray$1(item.coord) && isArray$1(dims)) { var axisInfo = getAxisInfo(item, data, coordSys, seriesModel); item = clone$4(item); if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) { var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim); var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim); var coordInfo = markerTypeCalculator[item.type](data, axisInfo.valueAxis.dim, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex); item.coord = coordInfo[0]; item.value = coordInfo[1]; } else item.coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis]; } if (item.coord == null || !isArray$1(dims)) { item.coord = []; var baseAxis = seriesModel.getBaseAxis(); if (baseAxis && item.type && markerTypeCalculator[item.type]) { var otherAxis = coordSys.getOtherAxis(baseAxis); if (otherAxis) item.value = numCalculate(data, data.mapDimension(otherAxis.dim), item.type); } } else { var coord = item.coord; for (var i = 0; i < 2; i++) if (markerTypeCalculator[coord[i]]) coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]); } return item; } function getAxisInfo(item, data, coordSys, seriesModel) { var ret = {}; if (item.valueIndex != null || item.valueDim != null) { ret.valueDataDim = item.valueIndex != null ? data.getDimension(item.valueIndex) : item.valueDim; ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim)); ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis); ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); } else { ret.baseAxis = seriesModel.getBaseAxis(); ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis); ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); ret.valueDataDim = data.mapDimension(ret.valueAxis.dim); } return ret; } function dataDimToCoordDim(seriesModel, dataDim) { var dimItem = seriesModel.getData().getDimensionInfo(dataDim); return dimItem && dimItem.coordDim; } /** * Filter data which is out of coordinateSystem range * [dataFilter description] */ function dataFilter(coordSys, item) { return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true; } function zoneFilter(coordSys, item1, item2) { return coordSys && coordSys.containZone && item1.coord && item2.coord && !hasXOrY(item1) && !hasXOrY(item2) ? coordSys.containZone(item1.coord, item2.coord) : true; } function createMarkerDimValueGetter(inCoordSys, dims) { return inCoordSys ? function(item, dimName, dataIndex, dimIndex) { return parseDataValue(dimIndex < 2 ? item.coord && item.coord[dimIndex] : item.value, dims[dimIndex]); } : function(item, dimName, dataIndex, dimIndex) { return parseDataValue(item.value, dims[dimIndex]); }; } function numCalculate(data, valueDataDim, type) { if (type === "average") { var sum_1 = 0; var count_1 = 0; data.each(valueDataDim, function(val, idx) { if (!isNaN(val)) { sum_1 += val; count_1++; } }); return sum_1 / count_1; } else if (type === "median") return data.getMedian(valueDataDim); else return data.getDataExtent(valueDataDim)[type === "max" ? 1 : 0]; } //#endregion //#region node_modules/echarts/lib/component/marker/MarkerView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$3 = makeInner(); var MarkerView = function(_super) { __extends(MarkerView, _super); function MarkerView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkerView.type; return _this; } MarkerView.prototype.init = function() { this.markerGroupMap = createHashMap(); }; MarkerView.prototype.render = function(markerModel, ecModel, api) { var _this = this; var markerGroupMap = this.markerGroupMap; markerGroupMap.each(function(item) { inner$3(item).keep = false; }); ecModel.eachSeries(function(seriesModel) { var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type); markerModel && _this.renderSeries(seriesModel, markerModel, ecModel, api); }); markerGroupMap.each(function(item) { !inner$3(item).keep && _this.group.remove(item.group); }); updateZ$1(ecModel, markerGroupMap, this.type); }; MarkerView.prototype.markKeep = function(drawGroup) { inner$3(drawGroup).keep = true; }; MarkerView.prototype.toggleBlurSeries = function(seriesModelList, isBlur) { var _this = this; each$12(seriesModelList, function(seriesModel) { var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type); if (markerModel) markerModel.getData().eachItemGraphicEl(function(el) { if (el) isBlur ? enterBlur(el) : leaveBlur(el); }); }); }; MarkerView.type = "marker"; return MarkerView; }(ComponentView); function updateZ$1(ecModel, markerGroupMap, type) { ecModel.eachSeries(function(seriesModel) { var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, type); var markerDraw = markerGroupMap.get(seriesModel.id); if (markerModel && markerDraw && markerDraw.group) { var _a = retrieveZInfo(markerModel), z = _a.z, zlevel = _a.zlevel; traverseUpdateZ(markerDraw.group, z, zlevel); } }); } //#endregion //#region node_modules/echarts/lib/component/marker/MarkPointView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function updateMarkerLayout(mpData, seriesModel, api) { var coordSys = seriesModel.coordinateSystem; var apiWidth = api.getWidth(); var apiHeight = api.getHeight(); var coordRect = coordSys && coordSys.getArea && coordSys.getArea(); mpData.each(function(idx) { var itemModel = mpData.getItemModel(idx); var isRelativeToCoordinate = itemModel.get("relativeTo") === "coordinate"; var width = isRelativeToCoordinate ? coordRect ? coordRect.width : 0 : apiWidth; var height = isRelativeToCoordinate ? coordRect ? coordRect.height : 0 : apiHeight; var left = isRelativeToCoordinate && coordRect ? coordRect.x : 0; var top = isRelativeToCoordinate && coordRect ? coordRect.y : 0; var point; var xPx = parsePercent(itemModel.get("x"), width) + left; var yPx = parsePercent(itemModel.get("y"), height) + top; if (!isNaN(xPx) && !isNaN(yPx)) point = [xPx, yPx]; else if (seriesModel.getMarkerPosition) point = seriesModel.getMarkerPosition(mpData.getValues(mpData.dimensions, idx)); else if (coordSys) { var x = mpData.get(coordSys.dimensions[0], idx); var y = mpData.get(coordSys.dimensions[1], idx); point = coordSys.dataToPoint([x, y]); } if (!isNaN(xPx)) point[0] = xPx; if (!isNaN(yPx)) point[1] = yPx; mpData.setItemLayout(idx, point); }); } var MarkPointView = function(_super) { __extends(MarkPointView, _super); function MarkPointView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkPointView.type; return _this; } MarkPointView.prototype.updateTransform = function(markPointModel, ecModel, api) { ecModel.eachSeries(function(seriesModel) { var mpModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markPoint"); if (mpModel) { updateMarkerLayout(mpModel.getData(), seriesModel, api); this.markerGroupMap.get(seriesModel.id).updateLayout(); } }, this); }; MarkPointView.prototype.renderSeries = function(seriesModel, mpModel, ecModel, api) { var coordSys = seriesModel.coordinateSystem; var seriesId = seriesModel.id; var seriesData = seriesModel.getData(); var symbolDrawMap = this.markerGroupMap; var symbolDraw = symbolDrawMap.get(seriesId) || symbolDrawMap.set(seriesId, new SymbolDraw()); var mpData = createData(coordSys, seriesModel, mpModel); mpModel.setData(mpData); updateMarkerLayout(mpModel.getData(), seriesModel, api); mpData.each(function(idx) { var itemModel = mpData.getItemModel(idx); var symbol = itemModel.getShallow("symbol"); var symbolSize = itemModel.getShallow("symbolSize"); var symbolRotate = itemModel.getShallow("symbolRotate"); var symbolOffset = itemModel.getShallow("symbolOffset"); var symbolKeepAspect = itemModel.getShallow("symbolKeepAspect"); if (isFunction(symbol) || isFunction(symbolSize) || isFunction(symbolRotate) || isFunction(symbolOffset)) { var rawIdx = mpModel.getRawValue(idx); var dataParams = mpModel.getDataParams(idx); if (isFunction(symbol)) symbol = symbol(rawIdx, dataParams); if (isFunction(symbolSize)) symbolSize = symbolSize(rawIdx, dataParams); if (isFunction(symbolRotate)) symbolRotate = symbolRotate(rawIdx, dataParams); if (isFunction(symbolOffset)) symbolOffset = symbolOffset(rawIdx, dataParams); } var style = itemModel.getModel("itemStyle").getItemStyle(); var z2 = itemModel.get("z2"); var color = getVisualFromData(seriesData, "color"); if (!style.fill) style.fill = color; mpData.setItemVisual(idx, { z2: retrieve2(z2, 0), symbol, symbolSize, symbolRotate, symbolOffset, symbolKeepAspect, style }); }); symbolDraw.updateData(mpData); this.group.add(symbolDraw.group); mpData.eachItemGraphicEl(function(el) { el.traverse(function(child) { getECData(child).dataModel = mpModel; }); }); this.markKeep(symbolDraw); symbolDraw.group.silent = mpModel.get("silent") || seriesModel.get("silent"); }; MarkPointView.type = "markPoint"; return MarkPointView; }(MarkerView); function createData(coordSys, seriesModel, mpModel) { var coordDimsInfos; if (coordSys) coordDimsInfos = map$1(coordSys && coordSys.dimensions, function(coordDim) { var data = seriesModel.getData(); return extend(extend({}, data.getDimensionInfo(data.mapDimension(coordDim)) || {}), { name: coordDim, ordinalMeta: null }); }); else coordDimsInfos = [{ name: "value", type: "float" }]; var mpData = new SeriesData(coordDimsInfos, mpModel); var dataOpt = map$1(mpModel.get("data"), curry$1(dataTransform, seriesModel)); if (coordSys) dataOpt = filter(dataOpt, curry$1(dataFilter, coordSys)); var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos); mpData.initData(dataOpt, null, dimValueGetter); return mpData; } //#endregion //#region node_modules/echarts/lib/component/marker/installMarkPoint.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$15(registers) { registers.registerComponentModel(MarkPointModel); registers.registerComponentView(MarkPointView); registers.registerPreprocessor(function(opt) { if (checkMarkerInSeries(opt.series, "markPoint")) opt.markPoint = opt.markPoint || {}; }); } //#endregion //#region node_modules/echarts/lib/component/marker/MarkLineModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var MarkLineModel = function(_super) { __extends(MarkLineModel, _super); function MarkLineModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkLineModel.type; return _this; } MarkLineModel.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) { return new MarkLineModel(markerOpt, masterMarkerModel, ecModel); }; MarkLineModel.type = "markLine"; MarkLineModel.defaultOption = { z: 5, symbol: ["circle", "arrow"], symbolSize: [8, 16], symbolOffset: 0, precision: 2, tooltip: { trigger: "item" }, label: { show: true, position: "end", distance: 5 }, lineStyle: { type: "dashed" }, emphasis: { label: { show: true }, lineStyle: { width: 3 } }, animationEasing: "linear" }; return MarkLineModel; }(MarkerModel); //#endregion //#region node_modules/echarts/lib/component/marker/MarkLineView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$2 = makeInner(); var markLineTransform = function(seriesModel, coordSys, mlModel, item) { var data = seriesModel.getData(); var itemArray; if (!isArray$1(item)) { var mlType = item.type; if (mlType === "min" || mlType === "max" || mlType === "average" || mlType === "median" || item.xAxis != null || item.yAxis != null) { var valueAxis = void 0; var value = void 0; if (item.yAxis != null || item.xAxis != null) { valueAxis = coordSys.getAxis(item.yAxis != null ? "y" : "x"); value = retrieve(item.yAxis, item.xAxis); } else { var axisInfo = getAxisInfo(item, data, coordSys, seriesModel); valueAxis = axisInfo.valueAxis; value = numCalculate(data, getStackedDimension(data, axisInfo.valueDataDim), mlType); } var valueIndex = valueAxis.dim === "x" ? 0 : 1; var baseIndex = 1 - valueIndex; var mlFrom = clone$4(item); var mlTo = { coord: [] }; mlFrom.type = null; mlFrom.coord = []; mlFrom.coord[baseIndex] = -Infinity; mlTo.coord[baseIndex] = Infinity; var precision = mlModel.get("precision"); if (precision >= 0 && isNumber(value)) value = +value.toFixed(Math.min(precision, 20)); mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value; itemArray = [ mlFrom, mlTo, { type: mlType, valueIndex: item.valueIndex, value } ]; } else { logError("Invalid markLine data."); itemArray = []; } } else itemArray = item; var normalizedItem = [ dataTransform(seriesModel, itemArray[0]), dataTransform(seriesModel, itemArray[1]), extend({}, itemArray[2]) ]; normalizedItem[2].type = normalizedItem[2].type || null; merge(normalizedItem[2], normalizedItem[0]); merge(normalizedItem[2], normalizedItem[1]); return normalizedItem; }; function isInfinity$1(val) { return !isNaN(val) && !isFinite(val); } function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { var otherDimIndex = 1 - dimIndex; var dimName = coordSys.dimensions[dimIndex]; return isInfinity$1(fromCoord[otherDimIndex]) && isInfinity$1(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]); } function markLineFilter(coordSys, item) { if (coordSys.type === "cartesian2d") { var fromCoord = item[0].coord; var toCoord = item[1].coord; if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) return true; } return dataFilter(coordSys, item[0]) && dataFilter(coordSys, item[1]); } function updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) { var coordSys = seriesModel.coordinateSystem; var itemModel = data.getItemModel(idx); var point; var xPx = parsePercent(itemModel.get("x"), api.getWidth()); var yPx = parsePercent(itemModel.get("y"), api.getHeight()); if (!isNaN(xPx) && !isNaN(yPx)) point = [xPx, yPx]; else { if (seriesModel.getMarkerPosition) point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx)); else { var dims = coordSys.dimensions; var x = data.get(dims[0], idx); var y = data.get(dims[1], idx); point = coordSys.dataToPoint([x, y]); } if (isCoordinateSystemType(coordSys, "cartesian2d")) { var xAxis = coordSys.getAxis("x"); var yAxis = coordSys.getAxis("y"); var dims = coordSys.dimensions; if (isInfinity$1(data.get(dims[0], idx))) point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]); else if (isInfinity$1(data.get(dims[1], idx))) point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]); } if (!isNaN(xPx)) point[0] = xPx; if (!isNaN(yPx)) point[1] = yPx; } data.setItemLayout(idx, point); } var MarkLineView = function(_super) { __extends(MarkLineView, _super); function MarkLineView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkLineView.type; return _this; } MarkLineView.prototype.updateTransform = function(markLineModel, ecModel, api) { ecModel.eachSeries(function(seriesModel) { var mlModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markLine"); if (mlModel) { var mlData_1 = mlModel.getData(); var fromData_1 = inner$2(mlModel).from; var toData_1 = inner$2(mlModel).to; fromData_1.each(function(idx) { updateSingleMarkerEndLayout(fromData_1, idx, true, seriesModel, api); updateSingleMarkerEndLayout(toData_1, idx, false, seriesModel, api); }); mlData_1.each(function(idx) { mlData_1.setItemLayout(idx, [fromData_1.getItemLayout(idx), toData_1.getItemLayout(idx)]); }); this.markerGroupMap.get(seriesModel.id).updateLayout(); } }, this); }; MarkLineView.prototype.renderSeries = function(seriesModel, mlModel, ecModel, api) { var coordSys = seriesModel.coordinateSystem; var seriesId = seriesModel.id; var seriesData = seriesModel.getData(); var lineDrawMap = this.markerGroupMap; var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw()); this.group.add(lineDraw.group); var mlData = createList$1(coordSys, seriesModel, mlModel); var fromData = mlData.from; var toData = mlData.to; var lineData = mlData.line; inner$2(mlModel).from = fromData; inner$2(mlModel).to = toData; mlModel.setData(lineData); var symbolType = mlModel.get("symbol"); var symbolSize = mlModel.get("symbolSize"); var symbolRotate = mlModel.get("symbolRotate"); var symbolOffset = mlModel.get("symbolOffset"); if (!isArray$1(symbolType)) symbolType = [symbolType, symbolType]; if (!isArray$1(symbolSize)) symbolSize = [symbolSize, symbolSize]; if (!isArray$1(symbolRotate)) symbolRotate = [symbolRotate, symbolRotate]; if (!isArray$1(symbolOffset)) symbolOffset = [symbolOffset, symbolOffset]; mlData.from.each(function(idx) { updateDataVisualAndLayout(fromData, idx, true); updateDataVisualAndLayout(toData, idx, false); }); lineData.each(function(idx) { var itemModel = lineData.getItemModel(idx); var lineStyle = itemModel.getModel("lineStyle").getLineStyle(); lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]); var z2 = itemModel.get("z2"); if (lineStyle.stroke == null) lineStyle.stroke = fromData.getItemVisual(idx, "style").fill; lineData.setItemVisual(idx, { z2: retrieve2(z2, 0), fromSymbolKeepAspect: fromData.getItemVisual(idx, "symbolKeepAspect"), fromSymbolOffset: fromData.getItemVisual(idx, "symbolOffset"), fromSymbolRotate: fromData.getItemVisual(idx, "symbolRotate"), fromSymbolSize: fromData.getItemVisual(idx, "symbolSize"), fromSymbol: fromData.getItemVisual(idx, "symbol"), toSymbolKeepAspect: toData.getItemVisual(idx, "symbolKeepAspect"), toSymbolOffset: toData.getItemVisual(idx, "symbolOffset"), toSymbolRotate: toData.getItemVisual(idx, "symbolRotate"), toSymbolSize: toData.getItemVisual(idx, "symbolSize"), toSymbol: toData.getItemVisual(idx, "symbol"), style: lineStyle }); }); lineDraw.updateData(lineData); mlData.line.eachItemGraphicEl(function(el) { getECData(el).dataModel = mlModel; el.traverse(function(child) { getECData(child).dataModel = mlModel; }); }); function updateDataVisualAndLayout(data, idx, isFrom) { var itemModel = data.getItemModel(idx); updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api); var style = itemModel.getModel("itemStyle").getItemStyle(); if (style.fill == null) style.fill = getVisualFromData(seriesData, "color"); data.setItemVisual(idx, { symbolKeepAspect: itemModel.get("symbolKeepAspect"), symbolOffset: retrieve2(itemModel.get("symbolOffset", true), symbolOffset[isFrom ? 0 : 1]), symbolRotate: retrieve2(itemModel.get("symbolRotate", true), symbolRotate[isFrom ? 0 : 1]), symbolSize: retrieve2(itemModel.get("symbolSize"), symbolSize[isFrom ? 0 : 1]), symbol: retrieve2(itemModel.get("symbol", true), symbolType[isFrom ? 0 : 1]), style }); } this.markKeep(lineDraw); lineDraw.group.silent = mlModel.get("silent") || seriesModel.get("silent"); }; MarkLineView.type = "markLine"; return MarkLineView; }(MarkerView); function createList$1(coordSys, seriesModel, mlModel) { var coordDimsInfos; if (coordSys) coordDimsInfos = map$1(coordSys && coordSys.dimensions, function(coordDim) { var data = seriesModel.getData(); return extend(extend({}, data.getDimensionInfo(data.mapDimension(coordDim)) || {}), { name: coordDim, ordinalMeta: null }); }); else coordDimsInfos = [{ name: "value", type: "float" }]; var fromData = new SeriesData(coordDimsInfos, mlModel); var toData = new SeriesData(coordDimsInfos, mlModel); var lineData = new SeriesData([], mlModel); var optData = map$1(mlModel.get("data"), curry$1(markLineTransform, seriesModel, coordSys, mlModel)); if (coordSys) optData = filter(optData, curry$1(markLineFilter, coordSys)); var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos); fromData.initData(map$1(optData, function(item) { return item[0]; }), null, dimValueGetter); toData.initData(map$1(optData, function(item) { return item[1]; }), null, dimValueGetter); lineData.initData(map$1(optData, function(item) { return item[2]; })); lineData.hasItemOption = true; return { from: fromData, to: toData, line: lineData }; } //#endregion //#region node_modules/echarts/lib/component/marker/installMarkLine.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$14(registers) { registers.registerComponentModel(MarkLineModel); registers.registerComponentView(MarkLineView); registers.registerPreprocessor(function(opt) { if (checkMarkerInSeries(opt.series, "markLine")) opt.markLine = opt.markLine || {}; }); } //#endregion //#region node_modules/echarts/lib/component/marker/MarkAreaModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var MarkAreaModel = function(_super) { __extends(MarkAreaModel, _super); function MarkAreaModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkAreaModel.type; return _this; } MarkAreaModel.prototype.createMarkerModelFromSeries = function(markerOpt, masterMarkerModel, ecModel) { return new MarkAreaModel(markerOpt, masterMarkerModel, ecModel); }; MarkAreaModel.type = "markArea"; MarkAreaModel.defaultOption = { z: 1, tooltip: { trigger: "item" }, animation: false, label: { show: true, position: "top" }, itemStyle: { borderWidth: 0 }, emphasis: { label: { show: true, position: "top" } } }; return MarkAreaModel; }(MarkerModel); //#endregion //#region node_modules/echarts/lib/component/marker/MarkAreaView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner$1 = makeInner(); var markAreaTransform = function(seriesModel, coordSys, maModel, item) { var item0 = item[0]; var item1 = item[1]; if (!item0 || !item1) return; var lt = dataTransform(seriesModel, item0); var rb = dataTransform(seriesModel, item1); var ltCoord = lt.coord; var rbCoord = rb.coord; ltCoord[0] = retrieve(ltCoord[0], -Infinity); ltCoord[1] = retrieve(ltCoord[1], -Infinity); rbCoord[0] = retrieve(rbCoord[0], Infinity); rbCoord[1] = retrieve(rbCoord[1], Infinity); var result = mergeAll([ {}, lt, rb ]); result.coord = [lt.coord, rb.coord]; result.x0 = lt.x; result.y0 = lt.y; result.x1 = rb.x; result.y1 = rb.y; return result; }; function isInfinity(val) { return !isNaN(val) && !isFinite(val); } function ifMarkAreaHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { var otherDimIndex = 1 - dimIndex; return isInfinity(fromCoord[otherDimIndex]) && isInfinity(toCoord[otherDimIndex]); } function markAreaFilter(coordSys, item) { var fromCoord = item.coord[0]; var toCoord = item.coord[1]; var item0 = { coord: fromCoord, x: item.x0, y: item.y0 }; var item1 = { coord: toCoord, x: item.x1, y: item.y1 }; if (isCoordinateSystemType(coordSys, "cartesian2d")) { if (fromCoord && toCoord && (ifMarkAreaHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkAreaHasOnlyDim(0, fromCoord, toCoord, coordSys))) return true; return zoneFilter(coordSys, item0, item1); } return dataFilter(coordSys, item0) || dataFilter(coordSys, item1); } function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) { var coordSys = seriesModel.coordinateSystem; var itemModel = data.getItemModel(idx); var point; var xPx = parsePercent(itemModel.get(dims[0]), api.getWidth()); var yPx = parsePercent(itemModel.get(dims[1]), api.getHeight()); if (!isNaN(xPx) && !isNaN(yPx)) point = [xPx, yPx]; else { if (seriesModel.getMarkerPosition) { var pointValue0 = data.getValues(["x0", "y0"], idx); var pointValue1 = data.getValues(["x1", "y1"], idx); var clampPointValue0 = coordSys.clampData(pointValue0); var clampPointValue1 = coordSys.clampData(pointValue1); var pointValue = []; if (dims[0] === "x0") pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue1[0] : pointValue0[0]; else pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue0[0] : pointValue1[0]; if (dims[1] === "y0") pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue1[1] : pointValue0[1]; else pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue0[1] : pointValue1[1]; point = seriesModel.getMarkerPosition(pointValue, dims, true); } else { var x = data.get(dims[0], idx); var y = data.get(dims[1], idx); var pt = [x, y]; coordSys.clampData && coordSys.clampData(pt, pt); point = coordSys.dataToPoint(pt, true); } if (isCoordinateSystemType(coordSys, "cartesian2d")) { var xAxis = coordSys.getAxis("x"); var yAxis = coordSys.getAxis("y"); var x = data.get(dims[0], idx); var y = data.get(dims[1], idx); if (isInfinity(x)) point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === "x0" ? 0 : 1]); else if (isInfinity(y)) point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === "y0" ? 0 : 1]); } if (!isNaN(xPx)) point[0] = xPx; if (!isNaN(yPx)) point[1] = yPx; } return point; } var dimPermutations = [ ["x0", "y0"], ["x1", "y0"], ["x1", "y1"], ["x0", "y1"] ]; var MarkAreaView = function(_super) { __extends(MarkAreaView, _super); function MarkAreaView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = MarkAreaView.type; return _this; } MarkAreaView.prototype.updateTransform = function(markAreaModel, ecModel, api) { ecModel.eachSeries(function(seriesModel) { var maModel = MarkerModel.getMarkerModelFromSeries(seriesModel, "markArea"); if (maModel) { var areaData_1 = maModel.getData(); areaData_1.each(function(idx) { var points = map$1(dimPermutations, function(dim) { return getSingleMarkerEndPoint(areaData_1, idx, dim, seriesModel, api); }); areaData_1.setItemLayout(idx, points); areaData_1.getItemGraphicEl(idx).setShape("points", points); }); } }, this); }; MarkAreaView.prototype.renderSeries = function(seriesModel, maModel, ecModel, api) { var coordSys = seriesModel.coordinateSystem; var seriesId = seriesModel.id; var seriesData = seriesModel.getData(); var areaGroupMap = this.markerGroupMap; var polygonGroup = areaGroupMap.get(seriesId) || areaGroupMap.set(seriesId, { group: new Group$3() }); this.group.add(polygonGroup.group); this.markKeep(polygonGroup); var areaData = createList(coordSys, seriesModel, maModel); maModel.setData(areaData); areaData.each(function(idx) { var points = map$1(dimPermutations, function(dim) { return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); }); var xAxisScale = coordSys.getAxis("x").scale; var yAxisScale = coordSys.getAxis("y").scale; var xAxisExtent = xAxisScale.getExtent(); var yAxisExtent = yAxisScale.getExtent(); var xPointExtent = [xAxisScale.parse(areaData.get("x0", idx)), xAxisScale.parse(areaData.get("x1", idx))]; var yPointExtent = [yAxisScale.parse(areaData.get("y0", idx)), yAxisScale.parse(areaData.get("y1", idx))]; asc$1(xPointExtent); asc$1(yPointExtent); var allClipped = !!(xAxisExtent[0] > xPointExtent[1] || xAxisExtent[1] < xPointExtent[0] || yAxisExtent[0] > yPointExtent[1] || yAxisExtent[1] < yPointExtent[0]); areaData.setItemLayout(idx, { points, allClipped }); var itemModel = areaData.getItemModel(idx); var style = itemModel.getModel("itemStyle").getItemStyle(); var z2 = itemModel.get("z2"); var color = getVisualFromData(seriesData, "color"); if (!style.fill) { style.fill = color; if (isString(style.fill)) style.fill = modifyAlpha(style.fill, .4); } if (!style.stroke) style.stroke = color; areaData.setItemVisual(idx, "style", style); areaData.setItemVisual(idx, "z2", retrieve2(z2, 0)); }); areaData.diff(inner$1(polygonGroup).data).add(function(idx) { var layout = areaData.getItemLayout(idx); var z2 = areaData.getItemVisual(idx, "z2"); if (!layout.allClipped) { var polygon = new Polygon({ z2: retrieve2(z2, 0), shape: { points: layout.points } }); areaData.setItemGraphicEl(idx, polygon); polygonGroup.group.add(polygon); } }).update(function(newIdx, oldIdx) { var polygon = inner$1(polygonGroup).data.getItemGraphicEl(oldIdx); var layout = areaData.getItemLayout(newIdx); var z2 = areaData.getItemVisual(newIdx, "z2"); if (!layout.allClipped) { if (polygon) updateProps$1(polygon, { z2: retrieve2(z2, 0), shape: { points: layout.points } }, maModel, newIdx); else polygon = new Polygon({ shape: { points: layout.points } }); areaData.setItemGraphicEl(newIdx, polygon); polygonGroup.group.add(polygon); } else if (polygon) polygonGroup.group.remove(polygon); }).remove(function(idx) { var polygon = inner$1(polygonGroup).data.getItemGraphicEl(idx); polygonGroup.group.remove(polygon); }).execute(); areaData.eachItemGraphicEl(function(polygon, idx) { var itemModel = areaData.getItemModel(idx); var style = areaData.getItemVisual(idx, "style"); polygon.useStyle(areaData.getItemVisual(idx, "style")); setLabelStyle(polygon, getLabelStatesModels(itemModel), { labelFetcher: maModel, labelDataIndex: idx, defaultText: areaData.getName(idx) || "", inheritColor: isString(style.fill) ? modifyAlpha(style.fill, 1) : tokens.color.neutral99 }); setStatesStylesFromModel(polygon, itemModel); toggleHoverEmphasis(polygon, null, null, itemModel.get(["emphasis", "disabled"])); getECData(polygon).dataModel = maModel; }); inner$1(polygonGroup).data = areaData; polygonGroup.group.silent = maModel.get("silent") || seriesModel.get("silent"); }; MarkAreaView.type = "markArea"; return MarkAreaView; }(MarkerView); function createList(coordSys, seriesModel, maModel) { var areaData; var dataDims; var dims = [ "x0", "y0", "x1", "y1" ]; if (coordSys) { var coordDimsInfos_1 = map$1(coordSys && coordSys.dimensions, function(coordDim) { var data = seriesModel.getData(); return extend(extend({}, data.getDimensionInfo(data.mapDimension(coordDim)) || {}), { name: coordDim, ordinalMeta: null }); }); dataDims = map$1(dims, function(dim, idx) { return { name: dim, type: coordDimsInfos_1[idx % 2].type }; }); areaData = new SeriesData(dataDims, maModel); } else { dataDims = [{ name: "value", type: "float" }]; areaData = new SeriesData(dataDims, maModel); } var optData = map$1(maModel.get("data"), curry$1(markAreaTransform, seriesModel, coordSys, maModel)); if (coordSys) optData = filter(optData, curry$1(markAreaFilter, coordSys)); var dimValueGetter = coordSys ? function(item, dimName, dataIndex, dimIndex) { var rawVal = item.coord[Math.floor(dimIndex / 2)][dimIndex % 2]; return parseDataValue(rawVal, dataDims[dimIndex]); } : function(item, dimName, dataIndex, dimIndex) { return parseDataValue(item.value, dataDims[dimIndex]); }; areaData.initData(optData, null, dimValueGetter); areaData.hasItemOption = true; return areaData; } //#endregion //#region node_modules/echarts/lib/component/marker/installMarkArea.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$13(registers) { registers.registerComponentModel(MarkAreaModel); registers.registerComponentView(MarkAreaView); registers.registerPreprocessor(function(opt) { if (checkMarkerInSeries(opt.series, "markArea")) opt.markArea = opt.markArea || {}; }); } //#endregion //#region node_modules/echarts/lib/component/legend/LegendModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var getDefaultSelectorOptions = function(ecModel, type) { if (type === "all") return { type: "all", title: ecModel.getLocaleModel().get([ "legend", "selector", "all" ]) }; else if (type === "inverse") return { type: "inverse", title: ecModel.getLocaleModel().get([ "legend", "selector", "inverse" ]) }; }; var LegendModel = function(_super) { __extends(LegendModel, _super); function LegendModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = LegendModel.type; _this.layoutMode = { type: "box", ignoreSize: true }; return _this; } LegendModel.prototype.init = function(option, parentModel, ecModel) { this.mergeDefaultAndTheme(option, ecModel); option.selected = option.selected || {}; this._updateSelector(option); }; LegendModel.prototype.mergeOption = function(option, ecModel) { _super.prototype.mergeOption.call(this, option, ecModel); this._updateSelector(option); }; LegendModel.prototype._updateSelector = function(option) { var selector = option.selector; var ecModel = this.ecModel; if (selector === true) selector = option.selector = ["all", "inverse"]; if (isArray$1(selector)) each$12(selector, function(item, index) { isString(item) && (item = { type: item }); selector[index] = merge(item, getDefaultSelectorOptions(ecModel, item.type)); }); }; LegendModel.prototype.optionUpdated = function() { this._updateData(this.ecModel); var legendData = this._data; if (legendData[0] && this.get("selectedMode") === "single") { var hasSelected = false; for (var i = 0; i < legendData.length; i++) { var name_1 = legendData[i].get("name"); if (this.isSelected(name_1)) { this.select(name_1); hasSelected = true; break; } } !hasSelected && this.select(legendData[0].get("name")); } }; LegendModel.prototype._updateData = function(ecModel) { var potentialData = []; var availableNames = []; ecModel.eachRawSeries(function(seriesModel) { var seriesName = seriesModel.name; availableNames.push(seriesName); var isPotential; if (seriesModel.legendVisualProvider) { var names = seriesModel.legendVisualProvider.getAllNames(); if (!ecModel.isSeriesFiltered(seriesModel)) availableNames = availableNames.concat(names); if (names.length) potentialData = potentialData.concat(names); else isPotential = true; } else isPotential = true; if (isPotential && isNameSpecified(seriesModel)) potentialData.push(seriesModel.name); }); /** * @type {Array.} * @private */ this._availableNames = availableNames; var rawData = this.get("data") || potentialData; var legendNameMap = createHashMap(); var legendData = map$1(rawData, function(dataItem) { if (isString(dataItem) || isNumber(dataItem)) dataItem = { name: dataItem }; if (legendNameMap.get(dataItem.name)) return null; legendNameMap.set(dataItem.name, true); return new Model(dataItem, this, this.ecModel); }, this); /** * @type {Array.} * @private */ this._data = filter(legendData, function(item) { return !!item; }); }; LegendModel.prototype.getData = function() { return this._data; }; LegendModel.prototype.select = function(name) { var selected = this.option.selected; if (this.get("selectedMode") === "single") { var data = this._data; each$12(data, function(dataItem) { selected[dataItem.get("name")] = false; }); } selected[name] = true; }; LegendModel.prototype.unSelect = function(name) { if (this.get("selectedMode") !== "single") this.option.selected[name] = false; }; LegendModel.prototype.toggleSelected = function(name) { var selected = this.option.selected; if (!selected.hasOwnProperty(name)) selected[name] = true; this[selected[name] ? "unSelect" : "select"](name); }; LegendModel.prototype.allSelect = function() { var data = this._data; var selected = this.option.selected; each$12(data, function(dataItem) { selected[dataItem.get("name", true)] = true; }); }; LegendModel.prototype.inverseSelect = function() { var data = this._data; var selected = this.option.selected; each$12(data, function(dataItem) { var name = dataItem.get("name", true); if (!selected.hasOwnProperty(name)) selected[name] = true; selected[name] = !selected[name]; }); }; LegendModel.prototype.isSelected = function(name) { var selected = this.option.selected; return !(selected.hasOwnProperty(name) && !selected[name]) && indexOf(this._availableNames, name) >= 0; }; LegendModel.prototype.getOrient = function() { return this.get("orient") === "vertical" ? { index: 1, name: "vertical" } : { index: 0, name: "horizontal" }; }; LegendModel.type = "legend.plain"; LegendModel.dependencies = ["series"]; LegendModel.defaultOption = { z: 4, show: true, orient: "horizontal", left: "center", bottom: tokens.size.m, align: "auto", backgroundColor: tokens.color.transparent, borderColor: tokens.color.border, borderRadius: 0, borderWidth: 0, padding: 5, itemGap: 8, itemWidth: 25, itemHeight: 14, symbolRotate: "inherit", symbolKeepAspect: true, inactiveColor: tokens.color.disabled, inactiveBorderColor: tokens.color.disabled, inactiveBorderWidth: "auto", itemStyle: { color: "inherit", opacity: "inherit", borderColor: "inherit", borderWidth: "auto", borderCap: "inherit", borderJoin: "inherit", borderDashOffset: "inherit", borderMiterLimit: "inherit" }, lineStyle: { width: "auto", color: "inherit", inactiveColor: tokens.color.disabled, inactiveWidth: 2, opacity: "inherit", type: "inherit", cap: "inherit", join: "inherit", dashOffset: "inherit", miterLimit: "inherit" }, textStyle: { color: tokens.color.secondary }, selectedMode: true, selector: false, selectorLabel: { show: true, borderRadius: 10, padding: [ 3, 5, 3, 5 ], fontSize: 12, fontFamily: "sans-serif", color: tokens.color.tertiary, borderWidth: 1, borderColor: tokens.color.border }, emphasis: { selectorLabel: { show: true, color: tokens.color.quaternary } }, selectorPosition: "auto", selectorItemGap: 7, selectorButtonGap: 10, tooltip: { show: false }, triggerEvent: false }; return LegendModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/legend/LegendView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var curry = curry$1; var each$3 = each$12; var Group$1 = Group$3; var LegendView = function(_super) { __extends(LegendView, _super); function LegendView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = LegendView.type; _this.newlineDisabled = false; return _this; } LegendView.prototype.init = function() { this.group.add(this._contentGroup = new Group$1()); this.group.add(this._selectorGroup = new Group$1()); this._isFirstRender = true; }; /** * @protected */ LegendView.prototype.getContentGroup = function() { return this._contentGroup; }; /** * @protected */ LegendView.prototype.getSelectorGroup = function() { return this._selectorGroup; }; /** * @override */ LegendView.prototype.render = function(legendModel, ecModel, api) { var isFirstRender = this._isFirstRender; this._isFirstRender = false; this.resetInner(); if (!legendModel.get("show", true)) return; var itemAlign = legendModel.get("align"); var orient = legendModel.get("orient"); if (!itemAlign || itemAlign === "auto") itemAlign = legendModel.get("left") === "right" && orient === "vertical" ? "right" : "left"; var selector = legendModel.get("selector", true); var selectorPosition = legendModel.get("selectorPosition", true); if (selector && (!selectorPosition || selectorPosition === "auto")) selectorPosition = orient === "horizontal" ? "end" : "start"; this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); var refContainer = createBoxLayoutReference(legendModel, api).refContainer; var positionInfo = legendModel.getBoxLayoutParams(); var padding = legendModel.get("padding"); var maxSize = getLayoutRect(positionInfo, refContainer, padding); var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition); var layoutRect = getLayoutRect(defaults({ width: mainRect.width, height: mainRect.height }, positionInfo), refContainer, padding); this.group.x = layoutRect.x - mainRect.x; this.group.y = layoutRect.y - mainRect.y; this.group.markRedraw(); this.group.add(this._backgroundEl = makeBackground(mainRect, legendModel)); }; LegendView.prototype.resetInner = function() { this.getContentGroup().removeAll(); this._backgroundEl && this.group.remove(this._backgroundEl); this.getSelectorGroup().removeAll(); }; LegendView.prototype.renderInner = function(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) { var contentGroup = this.getContentGroup(); var legendDrawnMap = createHashMap(); var selectMode = legendModel.get("selectedMode"); var triggerEvent = legendModel.get("triggerEvent"); var excludeSeriesId = []; ecModel.eachRawSeries(function(seriesModel) { !seriesModel.get("legendHoverLink") && excludeSeriesId.push(seriesModel.id); }); each$3(legendModel.getData(), function(legendItemModel, dataIndex) { var _this = this; var name = legendItemModel.get("name"); if (!this.newlineDisabled && (name === "" || name === "\n")) { var g = new Group$1(); g.newline = true; contentGroup.add(g); return; } var seriesModel = ecModel.getSeriesByName(name)[0]; if (legendDrawnMap.get(name)) return; if (seriesModel) { var data = seriesModel.getData(); var lineVisualStyle = data.getVisual("legendLineStyle") || {}; var legendIcon = data.getVisual("legendIcon"); /** * `data.getVisual('style')` may be the color from the register * in series. For example, for line series, */ var style = data.getVisual("style"); var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, style, legendIcon, selectMode, api); itemGroup.on("click", curry(dispatchSelectAction, name, null, api, excludeSeriesId)).on("mouseover", curry(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId)).on("mouseout", curry(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId)); if (ecModel.ssr) itemGroup.eachChild(function(child) { var ecData = getECData(child); ecData.seriesIndex = seriesModel.seriesIndex; ecData.dataIndex = dataIndex; ecData.ssrType = "legend"; }); if (triggerEvent) itemGroup.eachChild(function(child) { _this.packEventData(child, legendModel, seriesModel, dataIndex, name); }); legendDrawnMap.set(name, true); } else ecModel.eachRawSeries(function(seriesModel) { var _this = this; if (legendDrawnMap.get(name)) return; if (seriesModel.legendVisualProvider) { var provider = seriesModel.legendVisualProvider; if (!provider.containName(name)) return; var idx = provider.indexOfName(name); var style = provider.getItemVisual(idx, "style"); var legendIcon = provider.getItemVisual(idx, "legendIcon"); var colorArr = parse(style.fill); if (colorArr && colorArr[3] === 0) { colorArr[3] = .2; style = extend(extend({}, style), { fill: stringify(colorArr, "rgba") }); } var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, {}, style, legendIcon, selectMode, api); itemGroup.on("click", curry(dispatchSelectAction, null, name, api, excludeSeriesId)).on("mouseover", curry(dispatchHighlightAction, null, name, api, excludeSeriesId)).on("mouseout", curry(dispatchDownplayAction, null, name, api, excludeSeriesId)); if (ecModel.ssr) itemGroup.eachChild(function(child) { var ecData = getECData(child); ecData.seriesIndex = seriesModel.seriesIndex; ecData.dataIndex = dataIndex; ecData.ssrType = "legend"; }); if (triggerEvent) itemGroup.eachChild(function(child) { _this.packEventData(child, legendModel, seriesModel, dataIndex, name); }); legendDrawnMap.set(name, true); } }, this); if (!legendDrawnMap.get(name)) console.warn(name + " series not exists. Legend data should be same with series name or data name."); }, this); if (selector) this._createSelector(selector, legendModel, api, orient, selectorPosition); }; LegendView.prototype.packEventData = function(el, legendModel, seriesModel, dataIndex, name) { var eventData = { componentType: "legend", componentIndex: legendModel.componentIndex, dataIndex, value: name, seriesIndex: seriesModel.seriesIndex }; getECData(el).eventData = eventData; }; LegendView.prototype._createSelector = function(selector, legendModel, api, orient, selectorPosition) { var selectorGroup = this.getSelectorGroup(); each$3(selector, function createSelectorButton(selectorItem) { var type = selectorItem.type; var labelText = new ZRText({ style: { x: 0, y: 0, align: "center", verticalAlign: "middle" }, onclick: function() { api.dispatchAction({ type: type === "all" ? "legendAllSelect" : "legendInverseSelect", legendId: legendModel.id }); } }); selectorGroup.add(labelText); setLabelStyle(labelText, { normal: legendModel.getModel("selectorLabel"), emphasis: legendModel.getModel(["emphasis", "selectorLabel"]) }, { defaultText: selectorItem.title }); enableHoverEmphasis(labelText); }); }; LegendView.prototype._createItem = function(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, itemVisualStyle, legendIcon, selectMode, api) { var drawType = seriesModel.visualDrawType; var itemWidth = legendModel.get("itemWidth"); var itemHeight = legendModel.get("itemHeight"); var isSelected = legendModel.isSelected(name); var iconRotate = legendItemModel.get("symbolRotate"); var symbolKeepAspect = legendItemModel.get("symbolKeepAspect"); var legendIconType = legendItemModel.get("icon"); legendIcon = legendIconType || legendIcon || "roundRect"; var style = getLegendStyle(legendIcon, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api); var itemGroup = new Group$1(); var textStyleModel = legendItemModel.getModel("textStyle"); if (isFunction(seriesModel.getLegendIcon) && (!legendIconType || legendIconType === "inherit")) itemGroup.add(seriesModel.getLegendIcon({ itemWidth, itemHeight, icon: legendIcon, iconRotate, itemStyle: style.itemStyle, lineStyle: style.lineStyle, symbolKeepAspect })); else { var rotate = legendIconType === "inherit" && seriesModel.getData().getVisual("symbol") ? iconRotate === "inherit" ? seriesModel.getData().getVisual("symbolRotate") : iconRotate : 0; itemGroup.add(getDefaultLegendIcon({ itemWidth, itemHeight, icon: legendIcon, iconRotate: rotate, itemStyle: style.itemStyle, lineStyle: style.lineStyle, symbolKeepAspect })); } var textX = itemAlign === "left" ? itemWidth + 5 : -5; var textAlign = itemAlign; var formatter = legendModel.get("formatter"); var content = name; if (isString(formatter) && formatter) content = formatter.replace("{name}", name != null ? name : ""); else if (isFunction(formatter)) content = formatter(name); var textColor = isSelected ? textStyleModel.getTextColor() : legendItemModel.get("inactiveColor"); itemGroup.add(new ZRText({ style: createTextStyle$1(textStyleModel, { text: content, x: textX, y: itemHeight / 2, fill: textColor, align: textAlign, verticalAlign: "middle" }, { inheritColor: textColor }) })); var hitRect = new Rect$2({ shape: itemGroup.getBoundingRect(), style: { fill: "transparent" } }); var tooltipModel = legendItemModel.getModel("tooltip"); if (tooltipModel.get("show")) setTooltipConfig({ el: hitRect, componentModel: legendModel, itemName: name, itemTooltipOption: tooltipModel.option }); itemGroup.add(hitRect); itemGroup.eachChild(function(child) { child.silent = true; }); hitRect.silent = !selectMode; this.getContentGroup().add(itemGroup); enableHoverEmphasis(itemGroup); itemGroup.__legendDataIndex = dataIndex; return itemGroup; }; LegendView.prototype.layoutInner = function(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) { var contentGroup = this.getContentGroup(); var selectorGroup = this.getSelectorGroup(); box(legendModel.get("orient"), contentGroup, legendModel.get("itemGap"), maxSize.width, maxSize.height); var contentRect = contentGroup.getBoundingRect(); var contentPos = [-contentRect.x, -contentRect.y]; selectorGroup.markRedraw(); contentGroup.markRedraw(); if (selector) { box("horizontal", selectorGroup, legendModel.get("selectorItemGap", true)); var selectorRect = selectorGroup.getBoundingRect(); var selectorPos = [-selectorRect.x, -selectorRect.y]; var selectorButtonGap = legendModel.get("selectorButtonGap", true); var orientIdx = legendModel.getOrient().index; var wh = orientIdx === 0 ? "width" : "height"; var hw = orientIdx === 0 ? "height" : "width"; var yx = orientIdx === 0 ? "y" : "x"; if (selectorPosition === "end") selectorPos[orientIdx] += contentRect[wh] + selectorButtonGap; else contentPos[orientIdx] += selectorRect[wh] + selectorButtonGap; selectorPos[1 - orientIdx] += contentRect[hw] / 2 - selectorRect[hw] / 2; selectorGroup.x = selectorPos[0]; selectorGroup.y = selectorPos[1]; contentGroup.x = contentPos[0]; contentGroup.y = contentPos[1]; var mainRect = { x: 0, y: 0 }; mainRect[wh] = contentRect[wh] + selectorButtonGap + selectorRect[wh]; mainRect[hw] = Math.max(contentRect[hw], selectorRect[hw]); mainRect[yx] = Math.min(0, selectorRect[yx] + selectorPos[1 - orientIdx]); return mainRect; } else { contentGroup.x = contentPos[0]; contentGroup.y = contentPos[1]; return this.group.getBoundingRect(); } }; /** * @protected */ LegendView.prototype.remove = function() { this.getContentGroup().removeAll(); this._isFirstRender = true; }; LegendView.type = "legend.plain"; return LegendView; }(ComponentView); function getLegendStyle(iconType, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api) { /** * Use series style if is inherit; * elsewise, use legend style */ function handleCommonProps(style, visualStyle) { if (style.lineWidth === "auto") style.lineWidth = visualStyle.lineWidth > 0 ? 2 : 0; each$3(style, function(propVal, propName) { style[propName] === "inherit" && (style[propName] = visualStyle[propName]); }); } var itemStyleModel = legendItemModel.getModel("itemStyle"); var itemStyle = itemStyleModel.getItemStyle(); var iconBrushType = iconType.lastIndexOf("empty", 0) === 0 ? "fill" : "stroke"; var decalStyle = itemStyleModel.getShallow("decal"); itemStyle.decal = !decalStyle || decalStyle === "inherit" ? itemVisualStyle.decal : createOrUpdatePatternFromDecal(decalStyle, api); if (itemStyle.fill === "inherit") /** * Series with visualDrawType as 'stroke' should have * series stroke as legend fill */ itemStyle.fill = itemVisualStyle[drawType]; if (itemStyle.stroke === "inherit") /** * icon type with "emptyXXX" should use fill color * in visual style */ itemStyle.stroke = itemVisualStyle[iconBrushType]; if (itemStyle.opacity === "inherit") /** * Use lineStyle.opacity if drawType is stroke */ itemStyle.opacity = (drawType === "fill" ? itemVisualStyle : lineVisualStyle).opacity; handleCommonProps(itemStyle, itemVisualStyle); var legendLineModel = legendItemModel.getModel("lineStyle"); var lineStyle = legendLineModel.getLineStyle(); handleCommonProps(lineStyle, lineVisualStyle); itemStyle.fill === "auto" && (itemStyle.fill = itemVisualStyle.fill); itemStyle.stroke === "auto" && (itemStyle.stroke = itemVisualStyle.fill); lineStyle.stroke === "auto" && (lineStyle.stroke = itemVisualStyle.fill); if (!isSelected) { var borderWidth = legendItemModel.get("inactiveBorderWidth"); /** * Since stroke is set to be inactiveBorderColor, it may occur that * there is no border in series but border in legend, so we need to * use border only when series has border if is set to be auto */ var visualHasBorder = itemStyle[iconBrushType]; itemStyle.lineWidth = borderWidth === "auto" ? itemVisualStyle.lineWidth > 0 && visualHasBorder ? 2 : 0 : itemStyle.lineWidth; itemStyle.fill = legendItemModel.get("inactiveColor"); itemStyle.stroke = legendItemModel.get("inactiveBorderColor"); lineStyle.stroke = legendLineModel.get("inactiveColor"); lineStyle.lineWidth = legendLineModel.get("inactiveWidth"); } return { itemStyle, lineStyle }; } function getDefaultLegendIcon(opt) { var symboType = opt.icon || "roundRect"; var icon = createSymbol$1(symboType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill, opt.symbolKeepAspect); icon.setStyle(opt.itemStyle); icon.rotation = (opt.iconRotate || 0) * Math.PI / 180; icon.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]); if (symboType.indexOf("empty") > -1) { icon.style.stroke = icon.style.fill; icon.style.fill = tokens.color.neutral00; icon.style.lineWidth = 2; } return icon; } function dispatchSelectAction(seriesName, dataName, api, excludeSeriesId) { dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId); api.dispatchAction({ type: "legendToggleSelect", name: seriesName != null ? seriesName : dataName }); dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId); } function dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) { if (!api.usingTHL()) api.dispatchAction({ type: "highlight", seriesName, name: dataName, excludeSeriesId }); } function dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) { if (!api.usingTHL()) api.dispatchAction({ type: "downplay", seriesName, name: dataName, excludeSeriesId }); } //#endregion //#region node_modules/echarts/lib/component/legend/legendAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function legendSelectActionHandler(methodName, payload, ecModel) { var isAllSelect = methodName === "allSelect" || methodName === "inverseSelect"; var selectedMap = {}; var actionLegendIndices = []; ecModel.eachComponent({ mainType: "legend", query: payload }, function(legendModel) { if (isAllSelect) legendModel[methodName](); else legendModel[methodName](payload.name); makeSelectedMap(legendModel, selectedMap); actionLegendIndices.push(legendModel.componentIndex); }); var allSelectedMap = {}; ecModel.eachComponent("legend", function(legendModel) { each$12(selectedMap, function(isSelected, name) { legendModel[isSelected ? "select" : "unSelect"](name); }); makeSelectedMap(legendModel, allSelectedMap); }); return isAllSelect ? { selected: allSelectedMap, legendIndex: actionLegendIndices } : { name: payload.name, selected: allSelectedMap }; } function makeSelectedMap(legendModel, out) { var selectedMap = out || {}; each$12(legendModel.getData(), function(model) { var name = model.get("name"); if (name === "\n" || name === "") return; var isItemSelected = legendModel.isSelected(name); if (hasOwn(selectedMap, name)) selectedMap[name] = selectedMap[name] && isItemSelected; else selectedMap[name] = isItemSelected; }); return selectedMap; } function installLegendAction(registers) { /** * @event legendToggleSelect * @type {Object} * @property {string} type 'legendToggleSelect' * @property {string} [from] * @property {string} name Series name or data item name */ registers.registerAction("legendToggleSelect", "legendselectchanged", curry$1(legendSelectActionHandler, "toggleSelected")); registers.registerAction("legendAllSelect", "legendselectall", curry$1(legendSelectActionHandler, "allSelect")); registers.registerAction("legendInverseSelect", "legendinverseselect", curry$1(legendSelectActionHandler, "inverseSelect")); /** * @event legendSelect * @type {Object} * @property {string} type 'legendSelect' * @property {string} name Series name or data item name */ registers.registerAction("legendSelect", "legendselected", curry$1(legendSelectActionHandler, "select")); /** * @event legendUnSelect * @type {Object} * @property {string} type 'legendUnSelect' * @property {string} name Series name or data item name */ registers.registerAction("legendUnSelect", "legendunselected", curry$1(legendSelectActionHandler, "unSelect")); } //#endregion //#region node_modules/echarts/lib/component/legend/legendFilter.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var legendFilterStageHandler = createSimpleOverallStageHandler2(legendFilter); function legendFilter(ecModel) { var legendModels = ecModel.findComponents({ mainType: "legend" }); if (legendModels && legendModels.length) ecModel.filterSeries(function(series) { for (var i = 0; i < legendModels.length; i++) if (!legendModels[i].isSelected(series.name)) return false; return true; }); } //#endregion //#region node_modules/echarts/lib/component/legend/installLegendPlain.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$12(registers) { registers.registerComponentModel(LegendModel); registers.registerComponentView(LegendView); registers.registerProcessor(registers.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilterStageHandler); registers.registerSubTypeDefaulter("legend", function() { return "plain"; }); installLegendAction(registers); } //#endregion //#region node_modules/echarts/lib/component/legend/ScrollableLegendModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ScrollableLegendModel = function(_super) { __extends(ScrollableLegendModel, _super); function ScrollableLegendModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ScrollableLegendModel.type; return _this; } /** * @param {number} scrollDataIndex */ ScrollableLegendModel.prototype.setScrollDataIndex = function(scrollDataIndex) { this.option.scrollDataIndex = scrollDataIndex; }; ScrollableLegendModel.prototype.init = function(option, parentModel, ecModel) { var inputPositionParams = getLayoutParams(option); _super.prototype.init.call(this, option, parentModel, ecModel); mergeAndNormalizeLayoutParams(this, option, inputPositionParams); }; /** * @override */ ScrollableLegendModel.prototype.mergeOption = function(option, ecModel) { _super.prototype.mergeOption.call(this, option, ecModel); mergeAndNormalizeLayoutParams(this, this.option, option); }; ScrollableLegendModel.type = "legend.scroll"; ScrollableLegendModel.defaultOption = inheritDefaultOption(LegendModel.defaultOption, { scrollDataIndex: 0, pageButtonItemGap: 5, pageButtonGap: null, pageButtonPosition: "end", pageFormatter: "{current}/{total}", pageIcons: { horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"], vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"] }, pageIconColor: tokens.color.accent50, pageIconInactiveColor: tokens.color.accent10, pageIconSize: 15, pageTextStyle: { color: tokens.color.tertiary }, animationDurationUpdate: 800 }); return ScrollableLegendModel; }(LegendModel); function mergeAndNormalizeLayoutParams(legendModel, target, raw) { var orient = legendModel.getOrient(); var ignoreSize = [1, 1]; ignoreSize[orient.index] = 0; mergeLayoutParam(target, raw, { type: "box", ignoreSize: !!ignoreSize }); } //#endregion //#region node_modules/echarts/lib/component/legend/ScrollableLegendView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * Separate legend and scrollable legend to reduce package size. */ var Group = Group$3; var WH = ["width", "height"]; var XY = ["x", "y"]; var ScrollableLegendView = function(_super) { __extends(ScrollableLegendView, _super); function ScrollableLegendView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ScrollableLegendView.type; _this.newlineDisabled = true; _this._currentIndex = 0; return _this; } ScrollableLegendView.prototype.init = function() { _super.prototype.init.call(this); this.group.add(this._containerGroup = new Group()); this._containerGroup.add(this.getContentGroup()); this.group.add(this._controllerGroup = new Group()); }; /** * @override */ ScrollableLegendView.prototype.resetInner = function() { _super.prototype.resetInner.call(this); this._controllerGroup.removeAll(); this._containerGroup.removeClipPath(); this._containerGroup.__rectSize = null; }; /** * @override */ ScrollableLegendView.prototype.renderInner = function(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) { var self = this; _super.prototype.renderInner.call(this, itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); var controllerGroup = this._controllerGroup; var pageIconSize = legendModel.get("pageIconSize", true); var pageIconSizeArr = isArray$1(pageIconSize) ? pageIconSize : [pageIconSize, pageIconSize]; createPageButton("pagePrev", 0); var pageTextStyleModel = legendModel.getModel("pageTextStyle"); controllerGroup.add(new ZRText({ name: "pageText", style: { text: "xx/xx", fill: pageTextStyleModel.getTextColor(), font: pageTextStyleModel.getFont(), verticalAlign: "middle", align: "center" }, silent: true })); createPageButton("pageNext", 1); function createPageButton(name, iconIdx) { var pageDataIndexName = name + "DataIndex"; var icon = createIcon(legendModel.get("pageIcons", true)[legendModel.getOrient().name][iconIdx], { onclick: bind$1(self._pageGo, self, pageDataIndexName, legendModel, api) }, { x: -pageIconSizeArr[0] / 2, y: -pageIconSizeArr[1] / 2, width: pageIconSizeArr[0], height: pageIconSizeArr[1] }); icon.name = name; controllerGroup.add(icon); } }; /** * @override */ ScrollableLegendView.prototype.layoutInner = function(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) { var selectorGroup = this.getSelectorGroup(); var orientIdx = legendModel.getOrient().index; var wh = WH[orientIdx]; var xy = XY[orientIdx]; var hw = WH[1 - orientIdx]; var yx = XY[1 - orientIdx]; selector && box("horizontal", selectorGroup, legendModel.get("selectorItemGap", true)); var selectorButtonGap = legendModel.get("selectorButtonGap", true); var selectorRect = selectorGroup.getBoundingRect(); var selectorPos = [-selectorRect.x, -selectorRect.y]; var processMaxSize = clone$4(maxSize); selector && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap); var mainRect = this._layoutContentAndController(legendModel, isFirstRender, processMaxSize, orientIdx, wh, hw, yx, xy); if (selector) { if (selectorPosition === "end") selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap; else { var offset = selectorRect[wh] + selectorButtonGap; selectorPos[orientIdx] -= offset; mainRect[xy] -= offset; } mainRect[wh] += selectorRect[wh] + selectorButtonGap; selectorPos[1 - orientIdx] += mainRect[yx] + mainRect[hw] / 2 - selectorRect[hw] / 2; mainRect[hw] = Math.max(mainRect[hw], selectorRect[hw]); mainRect[yx] = Math.min(mainRect[yx], selectorRect[yx] + selectorPos[1 - orientIdx]); selectorGroup.x = selectorPos[0]; selectorGroup.y = selectorPos[1]; selectorGroup.markRedraw(); } return mainRect; }; ScrollableLegendView.prototype._layoutContentAndController = function(legendModel, isFirstRender, maxSize, orientIdx, wh, hw, yx, xy) { var contentGroup = this.getContentGroup(); var containerGroup = this._containerGroup; var controllerGroup = this._controllerGroup; box(legendModel.get("orient"), contentGroup, legendModel.get("itemGap"), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height); box("horizontal", controllerGroup, legendModel.get("pageButtonItemGap", true)); var contentRect = contentGroup.getBoundingRect(); var controllerRect = controllerGroup.getBoundingRect(); var showController = this._showController = contentRect[wh] > maxSize[wh]; var contentPos = [-contentRect.x, -contentRect.y]; if (!isFirstRender) contentPos[orientIdx] = contentGroup[xy]; var containerPos = [0, 0]; var controllerPos = [-controllerRect.x, -controllerRect.y]; var pageButtonGap = retrieve2(legendModel.get("pageButtonGap", true), legendModel.get("itemGap", true)); if (showController) { if (legendModel.get("pageButtonPosition", true) === "end") controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh]; else containerPos[orientIdx] += controllerRect[wh] + pageButtonGap; } controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2; contentGroup.setPosition(contentPos); containerGroup.setPosition(containerPos); controllerGroup.setPosition(controllerPos); var mainRect = { x: 0, y: 0 }; mainRect[wh] = showController ? maxSize[wh] : contentRect[wh]; mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]); containerGroup.__rectSize = maxSize[wh]; if (showController) { var clipShape = { x: 0, y: 0 }; clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0); clipShape[hw] = mainRect[hw]; containerGroup.setClipPath(new Rect$2({ shape: clipShape })); containerGroup.__rectSize = clipShape[wh]; } else controllerGroup.eachChild(function(child) { child.attr({ invisible: true, silent: true }); }); var pageInfo = this._getPageInfo(legendModel); pageInfo.pageIndex != null && updateProps$1(contentGroup, { x: pageInfo.contentPosition[0], y: pageInfo.contentPosition[1] }, showController ? legendModel : null); this._updatePageInfoView(legendModel, pageInfo); return mainRect; }; ScrollableLegendView.prototype._pageGo = function(to, legendModel, api) { var scrollDataIndex = this._getPageInfo(legendModel)[to]; scrollDataIndex != null && api.dispatchAction({ type: "legendScroll", scrollDataIndex, legendId: legendModel.id }); }; ScrollableLegendView.prototype._updatePageInfoView = function(legendModel, pageInfo) { var controllerGroup = this._controllerGroup; each$12(["pagePrev", "pageNext"], function(name) { var canJump = pageInfo[name + "DataIndex"] != null; var icon = controllerGroup.childOfName(name); if (icon) { icon.setStyle("fill", canJump ? legendModel.get("pageIconColor", true) : legendModel.get("pageIconInactiveColor", true)); icon.cursor = canJump ? "pointer" : "default"; } }); var pageText = controllerGroup.childOfName("pageText"); var pageFormatter = legendModel.get("pageFormatter"); var pageIndex = pageInfo.pageIndex; var current = pageIndex != null ? pageIndex + 1 : 0; var total = pageInfo.pageCount; pageText && pageFormatter && pageText.setStyle("text", isString(pageFormatter) ? pageFormatter.replace("{current}", current == null ? "" : current + "").replace("{total}", total == null ? "" : total + "") : pageFormatter({ current, total })); }; /** * contentPosition: Array., null when data item not found. * pageIndex: number, null when data item not found. * pageCount: number, always be a number, can be 0. * pagePrevDataIndex: number, null when no previous page. * pageNextDataIndex: number, null when no next page. * } */ ScrollableLegendView.prototype._getPageInfo = function(legendModel) { var scrollDataIndex = legendModel.get("scrollDataIndex", true); var contentGroup = this.getContentGroup(); var containerRectSize = this._containerGroup.__rectSize; var orientIdx = legendModel.getOrient().index; var wh = WH[orientIdx]; var xy = XY[orientIdx]; var targetItemIndex = this._findTargetItemIndex(scrollDataIndex); var children = contentGroup.children(); var targetItem = children[targetItemIndex]; var itemCount = children.length; var pCount = !itemCount ? 0 : 1; var result = { contentPosition: [contentGroup.x, contentGroup.y], pageCount: pCount, pageIndex: pCount - 1, pagePrevDataIndex: null, pageNextDataIndex: null }; if (!targetItem) return result; var targetItemInfo = getItemInfo(targetItem); result.contentPosition[orientIdx] = -targetItemInfo.s; for (var i = targetItemIndex + 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i <= itemCount; ++i) { currItemInfo = getItemInfo(children[i]); if (!currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize || currItemInfo && !intersect(currItemInfo, winStartItemInfo.s)) { if (winEndItemInfo.i > winStartItemInfo.i) winStartItemInfo = winEndItemInfo; else winStartItemInfo = currItemInfo; if (winStartItemInfo) { if (result.pageNextDataIndex == null) result.pageNextDataIndex = winStartItemInfo.i; ++result.pageCount; } } winEndItemInfo = currItemInfo; } for (var i = targetItemIndex - 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i >= -1; --i) { currItemInfo = getItemInfo(children[i]); if ((!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s)) && winStartItemInfo.i < winEndItemInfo.i) { winEndItemInfo = winStartItemInfo; if (result.pagePrevDataIndex == null) result.pagePrevDataIndex = winStartItemInfo.i; ++result.pageCount; ++result.pageIndex; } winStartItemInfo = currItemInfo; } return result; function getItemInfo(el) { if (el) { var itemRect = el.getBoundingRect(); var start = itemRect[xy] + el[xy]; return { s: start, e: start + itemRect[wh], i: el.__legendDataIndex }; } } function intersect(itemInfo, winStart) { return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize; } }; ScrollableLegendView.prototype._findTargetItemIndex = function(targetDataIndex) { if (!this._showController) return 0; var index; var contentGroup = this.getContentGroup(); var defaultIndex; contentGroup.eachChild(function(child, idx) { var legendDataIdx = child.__legendDataIndex; if (defaultIndex == null && legendDataIdx != null) defaultIndex = idx; if (legendDataIdx === targetDataIndex) index = idx; }); return index != null ? index : defaultIndex; }; ScrollableLegendView.type = "legend.scroll"; return ScrollableLegendView; }(LegendView); //#endregion //#region node_modules/echarts/lib/component/legend/scrollableLegendAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function installScrollableLegendAction(registers) { /** * @event legendScroll * @type {Object} * @property {string} type 'legendScroll' * @property {string} scrollDataIndex */ registers.registerAction("legendScroll", "legendscroll", function(payload, ecModel) { var scrollDataIndex = payload.scrollDataIndex; scrollDataIndex != null && ecModel.eachComponent({ mainType: "legend", subType: "scroll", query: payload }, function(legendModel) { legendModel.setScrollDataIndex(scrollDataIndex); }); }); } //#endregion //#region node_modules/echarts/lib/component/legend/installLegendScroll.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$11(registers) { use(install$12); registers.registerComponentModel(ScrollableLegendModel); registers.registerComponentView(ScrollableLegendView); installScrollableLegendAction(registers); } //#endregion //#region node_modules/echarts/lib/component/legend/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$10(registers) { use(install$12); use(install$11); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/InsideZoomModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var InsideZoomModel = function(_super) { __extends(InsideZoomModel, _super); function InsideZoomModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = InsideZoomModel.type; return _this; } InsideZoomModel.type = "dataZoom.inside"; InsideZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, { disabled: false, zoomLock: false, zoomOnMouseWheel: true, moveOnMouseMove: true, moveOnMouseWheel: false, preventDefaultMouseMove: true }); return InsideZoomModel; }(DataZoomModel); //#endregion //#region node_modules/echarts/lib/component/dataZoom/roams.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var inner = makeInner(); function setViewInfoToCoordSysRecord(api, dataZoomModel, getRange) { inner(api).coordSysRecordMap.each(function(coordSysRecord) { var dzInfo = coordSysRecord.dataZoomInfoMap.get(dataZoomModel.uid); if (dzInfo) dzInfo.getRange = getRange; }); } function disposeCoordSysRecordIfNeeded(api, dataZoomModel) { var coordSysRecordMap = inner(api).coordSysRecordMap; var coordSysKeyArr = coordSysRecordMap.keys(); for (var i = 0; i < coordSysKeyArr.length; i++) { var coordSysKey = coordSysKeyArr[i]; var coordSysRecord = coordSysRecordMap.get(coordSysKey); var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap; if (dataZoomInfoMap) { var dzUid = dataZoomModel.uid; if (dataZoomInfoMap.get(dzUid)) { dataZoomInfoMap.removeKey(dzUid); if (!dataZoomInfoMap.keys().length) disposeCoordSysRecord(coordSysRecordMap, coordSysRecord); } } } } function disposeCoordSysRecord(coordSysRecordMap, coordSysRecord) { if (coordSysRecord) { coordSysRecordMap.removeKey(coordSysRecord.model.uid); var controller = coordSysRecord.controller; controller && controller.dispose(); } } function createCoordSysRecord(api, coordSysModel) { var coordSysRecord = { model: coordSysModel, containsPoint: curry$1(containsPoint, coordSysModel), dispatchAction: curry$1(dispatchAction, api), dataZoomInfoMap: null, controller: null }; var controller = coordSysRecord.controller = new RoamController(api.getZr()); each$12([ "pan", "zoom", "scrollMove" ], function(eventName) { controller.on(eventName, function(event) { var batch = []; coordSysRecord.dataZoomInfoMap.each(function(dzInfo) { if (!event.isAvailableBehavior(dzInfo.model.option)) return; var method = (dzInfo.getRange || {})[eventName]; var range = method && method(dzInfo.dzReferCoordSysInfo, coordSysRecord.model.mainType, coordSysRecord.controller, event); !dzInfo.model.get("disabled", true) && range && batch.push({ dataZoomId: dzInfo.model.id, start: range[0], end: range[1] }); }); batch.length && coordSysRecord.dispatchAction(batch); }); }); return coordSysRecord; } /** * This action will be throttled. */ function dispatchAction(api, batch) { if (!api.isDisposed()) api.dispatchAction({ type: "dataZoom", animation: { easing: "cubicOut", duration: 100 }, batch }); } function containsPoint(coordSysModel, e, x, y) { return coordSysModel.coordinateSystem.containPoint([x, y]); } /** * Merge roamController settings when multiple dataZooms share one roamController. */ function mergeControllerParams(dataZoomInfoMap, coordSysRecord, api) { var controlType; var prefix = "type_"; var typePriority = { "type_true": 2, "type_move": 1, "type_false": 0, "type_undefined": -1 }; var preventDefaultMouseMove = true; var cursorGrab; var cursorGrabbing; dataZoomInfoMap.each(function(dataZoomInfo) { var dataZoomModel = dataZoomInfo.model; var oneType = dataZoomModel.get("disabled", true) ? false : dataZoomModel.get("zoomLock", true) ? "move" : true; if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) controlType = oneType; preventDefaultMouseMove = preventDefaultMouseMove && dataZoomModel.get("preventDefaultMouseMove", true); cursorGrab = retrieve2(dataZoomModel.get("cursorGrab", true), cursorGrab); cursorGrabbing = retrieve2(dataZoomModel.get("cursorGrabbing", true), cursorGrabbing); }); return { controlType, opt: { zoomOnMouseWheel: true, moveOnMouseMove: true, moveOnMouseWheel: true, preventDefaultMouseMove: !!preventDefaultMouseMove, api, zInfo: { component: coordSysRecord.model }, triggerInfo: { roamTrigger: null, isInSelf: coordSysRecord.containsPoint }, cursorGrab, cursorGrabbing } }; } function installDataZoomRoamProcessor(registers) { registers.registerUpdateLifecycle("coordsys:aftercreate", function(ecModel, api) { var apiInner = inner(api); var coordSysRecordMap = apiInner.coordSysRecordMap || (apiInner.coordSysRecordMap = createHashMap()); coordSysRecordMap.each(function(coordSysRecord) { coordSysRecord.dataZoomInfoMap = null; }); ecModel.eachComponent({ mainType: "dataZoom", subType: "inside" }, function(dataZoomModel) { each$12(collectReferCoordSysModelInfo(dataZoomModel).infoList, function(dzCoordSysInfo) { var coordSysUid = dzCoordSysInfo.model.uid; var coordSysRecord = coordSysRecordMap.get(coordSysUid) || coordSysRecordMap.set(coordSysUid, createCoordSysRecord(api, dzCoordSysInfo.model)); (coordSysRecord.dataZoomInfoMap || (coordSysRecord.dataZoomInfoMap = createHashMap())).set(dataZoomModel.uid, { dzReferCoordSysInfo: dzCoordSysInfo, model: dataZoomModel, getRange: null }); }); }); coordSysRecordMap.each(function(coordSysRecord) { var controller = coordSysRecord.controller; var firstDzInfo; var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap; if (dataZoomInfoMap) { var firstDzKey = dataZoomInfoMap.keys()[0]; if (firstDzKey != null) firstDzInfo = dataZoomInfoMap.get(firstDzKey); } if (!firstDzInfo) { disposeCoordSysRecord(coordSysRecordMap, coordSysRecord); return; } var controllerParams = mergeControllerParams(dataZoomInfoMap, coordSysRecord, api); controller.enable(controllerParams.controlType, controllerParams.opt); createOrUpdate(coordSysRecord, "dispatchAction", firstDzInfo.model.get("throttle", true), "fixRate"); }); }); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/InsideZoomView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var InsideZoomView = function(_super) { __extends(InsideZoomView, _super); function InsideZoomView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "dataZoom.inside"; return _this; } InsideZoomView.prototype.render = function(dataZoomModel, ecModel, api) { _super.prototype.render.apply(this, arguments); if (dataZoomModel.noTarget()) { this._clear(); return; } this.range = dataZoomModel.getPercentRange(); setViewInfoToCoordSysRecord(api, dataZoomModel, { pan: bind$1(getRangeHandlers.pan, this), zoom: bind$1(getRangeHandlers.zoom, this), scrollMove: bind$1(getRangeHandlers.scrollMove, this) }); }; InsideZoomView.prototype.dispose = function() { this._clear(); _super.prototype.dispose.apply(this, arguments); }; InsideZoomView.prototype._clear = function() { disposeCoordSysRecordIfNeeded(this.api, this.dataZoomModel); this.range = null; }; InsideZoomView.type = "dataZoom.inside"; return InsideZoomView; }(DataZoomView); var getRangeHandlers = { zoom: function(coordSysInfo, coordSysMainType, controller, e) { var lastRange = this.range; var range = lastRange.slice(); var axisModel = coordSysInfo.axisModels[0]; if (!axisModel) return; var directionInfo = getDirectionInfo[coordSysMainType](null, [e.originX, e.originY], axisModel, controller, coordSysInfo); var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0]; var scale = Math.max(1 / e.scale, 0); range[0] = (range[0] - percentPoint) * scale + percentPoint; range[1] = (range[1] - percentPoint) * scale + percentPoint; var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan); this.range = range; if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) return range; }, pan: makeMover(function(range, axisModel, coordSysInfo, coordSysMainType, controller, e) { var directionInfo = getDirectionInfo[coordSysMainType]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordSysInfo); return directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength; }), scrollMove: makeMover(function(range, axisModel, coordSysInfo, coordSysMainType, controller, e) { return getDirectionInfo[coordSysMainType]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordSysInfo).signal * (range[1] - range[0]) * e.scrollDelta; }) }; function makeMover(getPercentDelta) { return function(coordSysInfo, coordSysMainType, controller, e) { var lastRange = this.range; var range = lastRange.slice(); var axisModel = coordSysInfo.axisModels[0]; if (!axisModel) return; sliderMove(getPercentDelta(range, axisModel, coordSysInfo, coordSysMainType, controller, e), range, [0, 100], "all"); this.range = range; if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) return range; }; } var getDirectionInfo = { grid: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) { var axis = axisModel.axis; var ret = {}; var rect = coordSysInfo.model.coordinateSystem.getRect(); oldPoint = oldPoint || [0, 0]; if (axis.dim === "x") { ret.pixel = newPoint[0] - oldPoint[0]; ret.pixelLength = rect.width; ret.pixelStart = rect.x; ret.signal = axis.inverse ? 1 : -1; } else { ret.pixel = newPoint[1] - oldPoint[1]; ret.pixelLength = rect.height; ret.pixelStart = rect.y; ret.signal = axis.inverse ? -1 : 1; } return ret; }, polar: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) { var axis = axisModel.axis; var ret = {}; var polar = coordSysInfo.model.coordinateSystem; var radiusExtent = polar.getRadiusAxis().getExtent(); var angleExtent = polar.getAngleAxis().getExtent(); oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0]; newPoint = polar.pointToCoord(newPoint); if (axisModel.mainType === "radiusAxis") { ret.pixel = newPoint[0] - oldPoint[0]; ret.pixelLength = radiusExtent[1] - radiusExtent[0]; ret.pixelStart = radiusExtent[0]; ret.signal = axis.inverse ? 1 : -1; } else { ret.pixel = newPoint[1] - oldPoint[1]; ret.pixelLength = angleExtent[1] - angleExtent[0]; ret.pixelStart = angleExtent[0]; ret.signal = axis.inverse ? -1 : 1; } return ret; }, singleAxis: function(oldPoint, newPoint, axisModel, controller, coordSysInfo) { var axis = axisModel.axis; var rect = coordSysInfo.model.coordinateSystem.getRect(); var ret = {}; oldPoint = oldPoint || [0, 0]; if (axis.orient === "horizontal") { ret.pixel = newPoint[0] - oldPoint[0]; ret.pixelLength = rect.width; ret.pixelStart = rect.x; ret.signal = axis.inverse ? 1 : -1; } else { ret.pixel = newPoint[1] - oldPoint[1]; ret.pixelLength = rect.height; ret.pixelStart = rect.y; ret.signal = axis.inverse ? -1 : 1; } return ret; } }; //#endregion //#region node_modules/echarts/lib/component/dataZoom/installDataZoomInside.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$9(registers) { installCommon$1(registers); registers.registerComponentModel(InsideZoomModel); registers.registerComponentView(InsideZoomView); installDataZoomRoamProcessor(registers); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/SliderZoomModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var SliderZoomModel = function(_super) { __extends(SliderZoomModel, _super); function SliderZoomModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SliderZoomModel.type; return _this; } SliderZoomModel.type = "dataZoom.slider"; SliderZoomModel.layoutMode = "box"; SliderZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, { show: true, right: "ph", top: "ph", width: "ph", height: "ph", left: null, bottom: null, borderColor: tokens.color.accent10, borderRadius: 0, backgroundColor: tokens.color.transparent, dataBackground: { lineStyle: { color: tokens.color.accent30, width: .5 }, areaStyle: { color: tokens.color.accent20, opacity: .2 } }, selectedDataBackground: { lineStyle: { color: tokens.color.accent40, width: .5 }, areaStyle: { color: tokens.color.accent20, opacity: .3 } }, fillerColor: "rgba(135,175,274,0.2)", handleIcon: "path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z", handleSize: "100%", handleStyle: { color: tokens.color.neutral00, borderColor: tokens.color.accent20 }, moveHandleSize: 7, moveHandleIcon: "path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z", moveHandleStyle: { color: tokens.color.accent40, opacity: .5 }, showDetail: true, showDataShadow: "auto", realtime: true, zoomLock: false, textStyle: { color: tokens.color.tertiary }, brushSelect: true, brushStyle: { color: tokens.color.accent30, opacity: .3 }, emphasis: { handleLabel: { show: true }, handleStyle: { borderColor: tokens.color.accent40 }, moveHandleStyle: { opacity: .8 } }, defaultLocationEdgeGap: 15 }); return SliderZoomModel; }(DataZoomModel); //#endregion //#region node_modules/echarts/lib/component/dataZoom/SliderZoomView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var Rect = Rect$2; var DEFAULT_FRAME_BORDER_WIDTH = 1; var DEFAULT_FILLER_SIZE = 30; var DEFAULT_MOVE_HANDLE_SIZE = 7; var HORIZONTAL = "horizontal"; var VERTICAL = "vertical"; var LABEL_GAP = 5; var SHOW_DATA_SHADOW_SERIES_TYPE = [ "line", "bar", "candlestick", "scatter" ]; var REALTIME_ANIMATION_CONFIG = { easing: "cubicOut", duration: 100, delay: 0 }; var SliderZoomView = function(_super) { __extends(SliderZoomView, _super); function SliderZoomView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = SliderZoomView.type; _this._displayables = {}; return _this; } SliderZoomView.prototype.init = function(ecModel, api) { this.api = api; this._onBrush = bind$1(this._onBrush, this); this._onBrushEnd = bind$1(this._onBrushEnd, this); }; SliderZoomView.prototype.render = function(dataZoomModel, ecModel, api, payload) { _super.prototype.render.apply(this, arguments); createOrUpdate(this, "_dispatchZoomAction", dataZoomModel.get("throttle"), "fixRate"); this._orient = dataZoomModel.getOrient(); if (dataZoomModel.get("show") === false) { this.group.removeAll(); return; } if (dataZoomModel.noTarget()) { this._clear(); this.group.removeAll(); return; } if (!payload || payload.type !== "dataZoom" || payload.from !== this.uid) this._buildView(); this._updateView(); }; SliderZoomView.prototype.dispose = function() { this._clear(); _super.prototype.dispose.apply(this, arguments); }; SliderZoomView.prototype._clear = function() { clear$1(this, "_dispatchZoomAction"); var zr = this.api.getZr(); zr.off("mousemove", this._onBrush); zr.off("mouseup", this._onBrushEnd); }; SliderZoomView.prototype._buildView = function() { var thisGroup = this.group; thisGroup.removeAll(); this._brushing = false; this._displayables.brushRect = null; this._resetLocation(); this._resetInterval(); var barGroup = this._displayables.sliderGroup = new Group$3(); this._renderBackground(); this._renderHandle(); this._renderDataShadow(); thisGroup.add(barGroup); this._positionGroup(); }; SliderZoomView.prototype._resetLocation = function() { var dataZoomModel = this.dataZoomModel; var api = this.api; var moveHandleSize = dataZoomModel.get("brushSelect") ? DEFAULT_MOVE_HANDLE_SIZE : 0; var refContainer = createBoxLayoutReference(dataZoomModel, api).refContainer; var coordRect = this._findCoordRect(); var edgeGap = dataZoomModel.get("defaultLocationEdgeGap", true) || 0; var positionInfo = this._orient === HORIZONTAL ? { right: refContainer.width - coordRect.x - coordRect.width, top: refContainer.height - DEFAULT_FILLER_SIZE - edgeGap - moveHandleSize, width: coordRect.width, height: DEFAULT_FILLER_SIZE } : { right: edgeGap, top: coordRect.y, width: DEFAULT_FILLER_SIZE, height: coordRect.height }; var layoutParams = getLayoutParams(dataZoomModel.option); each$12([ "right", "top", "width", "height" ], function(name) { if (layoutParams[name] === "ph") layoutParams[name] = positionInfo[name]; }); var layoutRect = getLayoutRect(layoutParams, refContainer); this._location = { x: layoutRect.x, y: layoutRect.y }; this._size = [layoutRect.width, layoutRect.height]; this._orient === VERTICAL && this._size.reverse(); }; SliderZoomView.prototype._positionGroup = function() { var thisGroup = this.group; var location = this._location; var orient = this._orient; var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel(); var inverse = targetAxisModel && targetAxisModel.get("inverse"); var sliderGroup = this._displayables.sliderGroup; var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; sliderGroup.attr(orient === HORIZONTAL && !inverse ? { scaleY: otherAxisInverse ? 1 : -1, scaleX: 1 } : orient === HORIZONTAL && inverse ? { scaleY: otherAxisInverse ? 1 : -1, scaleX: -1 } : orient === VERTICAL && !inverse ? { scaleY: otherAxisInverse ? -1 : 1, scaleX: 1, rotation: Math.PI / 2 } : { scaleY: otherAxisInverse ? -1 : 1, scaleX: -1, rotation: Math.PI / 2 }); var rect = thisGroup.getBoundingRect([sliderGroup]); var rectX = isNaN(rect.x) ? 0 : rect.x; var rectY = isNaN(rect.y) ? 0 : rect.y; thisGroup.x = location.x - rectX; thisGroup.y = location.y - rectY; thisGroup.markRedraw(); }; SliderZoomView.prototype._getViewExtent = function() { return [0, this._size[0]]; }; SliderZoomView.prototype._renderBackground = function() { var dataZoomModel = this.dataZoomModel; var size = this._size; var barGroup = this._displayables.sliderGroup; var brushSelect = dataZoomModel.get("brushSelect"); barGroup.add(new Rect({ silent: true, shape: { x: 0, y: 0, width: size[0], height: size[1] }, style: { fill: dataZoomModel.get("backgroundColor") }, z2: -40 })); var clickPanel = new Rect({ shape: { x: 0, y: 0, width: size[0], height: size[1] }, style: { fill: "transparent" }, z2: 0, onclick: bind$1(this._onClickPanel, this) }); var zr = this.api.getZr(); if (brushSelect) { clickPanel.on("mousedown", this._onBrushStart, this); clickPanel.cursor = "crosshair"; zr.on("mousemove", this._onBrush); zr.on("mouseup", this._onBrushEnd); } else { zr.off("mousemove", this._onBrush); zr.off("mouseup", this._onBrushEnd); } barGroup.add(clickPanel); }; SliderZoomView.prototype._renderDataShadow = function() { var info = this._dataShadowInfo = this._prepareDataShadowInfo(); this._displayables.dataShadowSegs = []; if (!info) return; var size = this._size; var oldSize = this._shadowSize || []; var seriesModel = info.series; var data = seriesModel.getRawData(); var candlestickDim = seriesModel.getShadowDim && seriesModel.getShadowDim(); var otherDim = candlestickDim && data.getDimensionInfo(candlestickDim) ? seriesModel.getShadowDim() : info.otherDim; if (otherDim == null) return; var polygonPts = this._shadowPolygonPts; var polylinePts = this._shadowPolylinePts; if (data !== this._shadowData || otherDim !== this._shadowDim || size[0] !== oldSize[0] || size[1] !== oldSize[1]) { var thisDataExtent_1 = data.getDataExtent(info.thisDim); var otherDataExtent_1 = data.getDataExtent(otherDim); var otherOffset = (otherDataExtent_1[1] - otherDataExtent_1[0]) * .3; otherDataExtent_1 = [otherDataExtent_1[0] - otherOffset, otherDataExtent_1[1] + otherOffset]; var otherShadowExtent_1 = [0, size[1]]; var thisShadowExtent = [0, size[0]]; var areaPoints_1 = [[size[0], 0], [0, 0]]; var linePoints_1 = []; var step_1 = thisShadowExtent[1] / Math.max(1, data.count() - 1); var normalizationConstant_1 = size[0] / (thisDataExtent_1[1] - thisDataExtent_1[0]); var isTimeAxis_1 = info.thisAxis.type === "time"; var thisCoord_1 = -step_1; var stride_1 = Math.round(data.count() / size[0]); var lastIsEmpty_1; data.each([info.thisDim, otherDim], function(thisValue, otherValue, index) { if (stride_1 > 0 && index % stride_1) { if (!isTimeAxis_1) thisCoord_1 += step_1; return; } thisCoord_1 = isTimeAxis_1 ? (+thisValue - thisDataExtent_1[0]) * normalizationConstant_1 : thisCoord_1 + step_1; var isEmpty = otherValue == null || isNaN(otherValue) || otherValue === ""; var otherCoord = isEmpty ? 0 : linearMap$2(otherValue, otherDataExtent_1, otherShadowExtent_1, true); if (isEmpty && !lastIsEmpty_1 && index) { areaPoints_1.push([areaPoints_1[areaPoints_1.length - 1][0], 0]); linePoints_1.push([linePoints_1[linePoints_1.length - 1][0], 0]); } else if (!isEmpty && lastIsEmpty_1) { areaPoints_1.push([thisCoord_1, 0]); linePoints_1.push([thisCoord_1, 0]); } if (!isEmpty) { areaPoints_1.push([thisCoord_1, otherCoord]); linePoints_1.push([thisCoord_1, otherCoord]); } lastIsEmpty_1 = isEmpty; }); polygonPts = this._shadowPolygonPts = areaPoints_1; polylinePts = this._shadowPolylinePts = linePoints_1; } this._shadowData = data; this._shadowDim = otherDim; this._shadowSize = [size[0], size[1]]; var dataZoomModel = this.dataZoomModel; function createDataShadowGroup(isSelectedArea) { var model = dataZoomModel.getModel(isSelectedArea ? "selectedDataBackground" : "dataBackground"); var group = new Group$3(); var polygon = new Polygon({ shape: { points: polygonPts }, segmentIgnoreThreshold: 1, style: model.getModel("areaStyle").getAreaStyle(), silent: true, z2: -20 }); var polyline = new Polyline$1({ shape: { points: polylinePts }, segmentIgnoreThreshold: 1, style: model.getModel("lineStyle").getLineStyle(), silent: true, z2: -19 }); group.add(polygon); group.add(polyline); return group; } for (var i = 0; i < 3; i++) { var group = createDataShadowGroup(i === 1); this._displayables.sliderGroup.add(group); this._displayables.dataShadowSegs.push(group); } }; SliderZoomView.prototype._prepareDataShadowInfo = function() { var dataZoomModel = this.dataZoomModel; var showDataShadow = dataZoomModel.get("showDataShadow"); if (showDataShadow === false) return; var result; var ecModel = this.ecModel; dataZoomModel.eachTargetAxis(function(axisDim, axisIndex) { each$12(dataZoomModel.getAxisProxy(axisDim, axisIndex).getTargetSeriesModels(), function(seriesModel) { if (result) return; if (showDataShadow !== true && indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get("type")) < 0) return; var thisAxis = ecModel.getComponent(getAxisMainType(axisDim), axisIndex).axis; var otherDim = getOtherDim(axisDim); var otherAxisInverse; var coordSys = seriesModel.coordinateSystem; if (otherDim != null && coordSys.getOtherAxis) otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse; otherDim = seriesModel.getData().mapDimension(otherDim); result = { thisAxis, series: seriesModel, thisDim: seriesModel.getData().mapDimension(axisDim), otherDim, otherAxisInverse }; }, this); }, this); return result; }; SliderZoomView.prototype._renderHandle = function() { var thisGroup = this.group; var displayables = this._displayables; var handles = displayables.handles = [null, null]; var handleLabels = displayables.handleLabels = [null, null]; var sliderGroup = this._displayables.sliderGroup; var size = this._size; var dataZoomModel = this.dataZoomModel; var api = this.api; var borderRadius = dataZoomModel.get("borderRadius") || 0; var brushSelect = dataZoomModel.get("brushSelect"); var filler = displayables.filler = new Rect({ silent: brushSelect, style: { fill: dataZoomModel.get("fillerColor") }, textConfig: { position: "inside" } }); sliderGroup.add(filler); sliderGroup.add(new Rect({ silent: true, subPixelOptimize: true, shape: { x: 0, y: 0, width: size[0], height: size[1], r: borderRadius }, style: { stroke: dataZoomModel.get("dataBackgroundColor") || dataZoomModel.get("borderColor"), lineWidth: DEFAULT_FRAME_BORDER_WIDTH, fill: tokens.color.transparent } })); each$12([0, 1], function(handleIndex) { var iconStr = dataZoomModel.get("handleIcon"); if (!symbolBuildProxies[iconStr] && iconStr.indexOf("path://") < 0 && iconStr.indexOf("image://") < 0) { iconStr = "path://" + iconStr; deprecateLog("handleIcon now needs 'path://' prefix when using a path string"); } var path = createSymbol$1(iconStr, -1, 0, 2, 2, null, true); path.attr({ cursor: getCursor$1(this._orient), draggable: true, drift: bind$1(this._onDragMove, this, handleIndex), ondragend: bind$1(this._onDragEnd, this), onmouseover: bind$1(this._onOverDataInfoTriggerArea, this, true), onmouseout: bind$1(this._onOverDataInfoTriggerArea, this, false), z2: 5 }); var bRect = path.getBoundingRect(); var handleSize = dataZoomModel.get("handleSize"); this._handleHeight = parsePercent(handleSize, this._size[1]); this._handleWidth = bRect.width / bRect.height * this._handleHeight; path.setStyle(dataZoomModel.getModel("handleStyle").getItemStyle()); path.style.strokeNoScale = true; path.rectHover = true; path.ensureState("emphasis").style = dataZoomModel.getModel(["emphasis", "handleStyle"]).getItemStyle(); enableHoverEmphasis(path); var handleColor = dataZoomModel.get("handleColor"); if (handleColor != null) path.style.fill = handleColor; sliderGroup.add(handles[handleIndex] = path); var textStyleModel = dataZoomModel.getModel("textStyle"); var handleLabelShow = (dataZoomModel.get("handleLabel") || {}).show || false; thisGroup.add(handleLabels[handleIndex] = new ZRText({ silent: true, invisible: !handleLabelShow, style: createTextStyle$1(textStyleModel, { x: 0, y: 0, text: "", verticalAlign: "middle", align: "center", fill: textStyleModel.getTextColor(), font: textStyleModel.getFont() }), z2: 10 })); }, this); var actualMoveZone = filler; if (brushSelect) { var moveHandleHeight = parsePercent(dataZoomModel.get("moveHandleSize"), size[1]); var moveHandle_1 = displayables.moveHandle = new Rect$2({ style: dataZoomModel.getModel("moveHandleStyle").getItemStyle(), silent: true, shape: { r: [ 0, 0, 2, 2 ], y: size[1] - .5, height: moveHandleHeight } }); var iconSize = moveHandleHeight * .8; var moveHandleIcon = displayables.moveHandleIcon = createSymbol$1(dataZoomModel.get("moveHandleIcon"), -iconSize / 2, -iconSize / 2, iconSize, iconSize, tokens.color.neutral00, true); moveHandleIcon.silent = true; moveHandleIcon.y = size[1] + moveHandleHeight / 2 - .5; moveHandle_1.ensureState("emphasis").style = dataZoomModel.getModel(["emphasis", "moveHandleStyle"]).getItemStyle(); var moveZoneExpandSize = Math.min(size[1] / 2, Math.max(moveHandleHeight, 10)); actualMoveZone = displayables.moveZone = new Rect$2({ invisible: true, shape: { y: size[1] - moveZoneExpandSize, height: moveHandleHeight + moveZoneExpandSize } }); actualMoveZone.on("mouseover", function() { api.enterEmphasis(moveHandle_1); }).on("mouseout", function() { api.leaveEmphasis(moveHandle_1); }); sliderGroup.add(moveHandle_1); sliderGroup.add(moveHandleIcon); sliderGroup.add(actualMoveZone); } actualMoveZone.attr({ draggable: true, cursor: "grab", drift: bind$1(this._onActualMoveZoneDrift, this), ondragstart: bind$1(this._onActualMoveZoneDragStart, this), ondragend: bind$1(this._onActualMoveZoneDragEnd, this), onmouseover: bind$1(this._onOverDataInfoTriggerArea, this, true), onmouseout: bind$1(this._onOverDataInfoTriggerArea, this, false) }); }; SliderZoomView.prototype._resetInterval = function() { var range = this._range = this.dataZoomModel.getPercentRange(); var viewExtent = this._getViewExtent(); this._handleEnds = [linearMap$2(range[0], [0, 100], viewExtent, true), linearMap$2(range[1], [0, 100], viewExtent, true)]; }; SliderZoomView.prototype._updateInterval = function(handleIndex, delta) { var dataZoomModel = this.dataZoomModel; var handleEnds = this._handleEnds; var viewExtend = this._getViewExtent(); var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); var percentExtent = [0, 100]; sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get("zoomLock") ? "all" : handleIndex, minMaxSpan.minSpan != null ? linearMap$2(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap$2(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null); var lastRange = this._range; var range = this._range = asc$1([linearMap$2(handleEnds[0], viewExtend, percentExtent, true), linearMap$2(handleEnds[1], viewExtend, percentExtent, true)]); return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1]; }; SliderZoomView.prototype._updateView = function(nonRealtime) { var displaybles = this._displayables; var handleEnds = this._handleEnds; var handleInterval = asc$1(handleEnds.slice()); var size = this._size; each$12([0, 1], function(handleIndex) { var handle = displaybles.handles[handleIndex]; var handleHeight = this._handleHeight; handle.attr({ scaleX: handleHeight / 2, scaleY: handleHeight / 2, x: handleEnds[handleIndex] + (handleIndex ? -1 : 1), y: size[1] / 2 - handleHeight / 2 }); }, this); displaybles.filler.setShape({ x: handleInterval[0], y: 0, width: handleInterval[1] - handleInterval[0], height: size[1] }); var viewExtent = { x: handleInterval[0], width: handleInterval[1] - handleInterval[0] }; if (displaybles.moveHandle) { displaybles.moveHandle.setShape(viewExtent); displaybles.moveZone.setShape(viewExtent); displaybles.moveZone.getBoundingRect(); displaybles.moveHandleIcon && displaybles.moveHandleIcon.attr("x", viewExtent.x + viewExtent.width / 2); } var dataShadowSegs = displaybles.dataShadowSegs; var segIntervals = [ 0, handleInterval[0], handleInterval[1], size[0] ]; for (var i = 0; i < dataShadowSegs.length; i++) { var segGroup = dataShadowSegs[i]; var clipPath = segGroup.getClipPath(); if (!clipPath) { clipPath = new Rect$2(); segGroup.setClipPath(clipPath); } clipPath.setShape({ x: segIntervals[i], y: 0, width: segIntervals[i + 1] - segIntervals[i], height: size[1] }); } this._updateDataInfo(nonRealtime); }; SliderZoomView.prototype._updateDataInfo = function(nonRealtime) { var dataZoomModel = this.dataZoomModel; var displayables = this._displayables; var handleLabels = displayables.handleLabels; var orient = this._orient; var labelTexts = ["", ""]; if (dataZoomModel.get("showDetail")) { var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); var scale = axisProxy.getAxisModel().axis.scale; if (axisProxy) { var range = this._range; var window_1; if (nonRealtime) { var calcWinInput = { start: range[0], end: range[1] }; var alignTo = getAlignTo(dataZoomModel, axisProxy); if (alignTo) { var alignToWindow = alignTo.calculateDataWindow(calcWinInput).percentInverted; calcWinInput = { start: alignToWindow[0], end: alignToWindow[1] }; } window_1 = axisProxy.calculateDataWindow(calcWinInput); } else window_1 = axisProxy.getWindow(); labelTexts = [formatLabel(dataZoomModel, 0, window_1, scale), formatLabel(dataZoomModel, 1, window_1, scale)]; } } var orderedHandleEnds = asc$1(this._handleEnds.slice()); setLabel.call(this, 0); setLabel.call(this, 1); function setLabel(handleIndex) { var barTransform = getTransform$1(displayables.handles[handleIndex].parent, this.group); var direction = transformDirection(handleIndex === 0 ? "right" : "left", barTransform); var offset = this._handleWidth / 2 + LABEL_GAP; var textPoint = applyTransform([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform); handleLabels[handleIndex].setStyle({ x: textPoint[0], y: textPoint[1], verticalAlign: orient === HORIZONTAL ? "middle" : direction, align: orient === HORIZONTAL ? direction : "center", text: labelTexts[handleIndex] }); } }; SliderZoomView.prototype._onOverDataInfoTriggerArea = function(isOver) { this._isOverDataInfoTriggerArea = isOver; this._showDataInfo(isOver); }; /** * @param isEmphasis true: show, false: hide */ SliderZoomView.prototype._showDataInfo = function(isEmphasis) { var normalShow = (this.dataZoomModel.get("handleLabel") || {}).show || false; var emphasisShow = this.dataZoomModel.getModel(["emphasis", "handleLabel"]).get("show") || false; var toShow = isEmphasis || this._dragging ? emphasisShow : normalShow; var displayables = this._displayables; var handleLabels = displayables.handleLabels; handleLabels[0].attr("invisible", !toShow); handleLabels[1].attr("invisible", !toShow); displayables.moveHandle && this.api[toShow ? "enterEmphasis" : "leaveEmphasis"](displayables.moveHandle, 1); }; SliderZoomView.prototype._onActualMoveZoneDrift = function(dx, dy, event) { this.api.getZr().setCursorStyle("grabbing"); this._onDragMove("all", dx, dy, event); }; SliderZoomView.prototype._onActualMoveZoneDragStart = function(event) { event.target.attr("cursor", "grabbing"); this._showDataInfo(true); }; SliderZoomView.prototype._onActualMoveZoneDragEnd = function(event) { event.target.attr("cursor", "grab"); this._onDragEnd(); }; SliderZoomView.prototype._onDragMove = function(handleIndex, dx, dy, event) { this._dragging = true; stop(event.event); var barTransform = this._displayables.sliderGroup.getLocalTransform(); var vertex = applyTransform([dx, dy], barTransform, true); var changed = this._updateInterval(handleIndex, vertex[0]); var realtime = this.dataZoomModel.get("realtime"); this._updateView(!realtime); changed && realtime && this._dispatchZoomAction(true); }; SliderZoomView.prototype._onDragEnd = function() { this._dragging = false; if (!this._isOverDataInfoTriggerArea) this._showDataInfo(false); !this.dataZoomModel.get("realtime") && this._dispatchZoomAction(false); }; SliderZoomView.prototype._onClickPanel = function(e) { var size = this._size; var localPoint = this._displayables.sliderGroup.transformCoordToLocal(e.offsetX, e.offsetY); if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) return; var handleEnds = this._handleEnds; var center = (handleEnds[0] + handleEnds[1]) / 2; var changed = this._updateInterval("all", localPoint[0] - center); this._updateView(); changed && this._dispatchZoomAction(false); }; SliderZoomView.prototype._onBrushStart = function(e) { var x = e.offsetX; var y = e.offsetY; this._brushStart = new Point(x, y); this._brushing = true; this._brushStartTime = +/* @__PURE__ */ new Date(); }; SliderZoomView.prototype._onBrushEnd = function(e) { if (!this._brushing) return; var brushRect = this._displayables.brushRect; this._brushing = false; if (!brushRect) return; brushRect.attr("ignore", true); var brushShape = brushRect.shape; if (+/* @__PURE__ */ new Date() - this._brushStartTime < 200 && Math.abs(brushShape.width) < 5) return; var viewExtend = this._getViewExtent(); var percentExtent = [0, 100]; var handleEnds = this._handleEnds = [brushShape.x, brushShape.x + brushShape.width]; var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); sliderMove(0, handleEnds, viewExtend, 0, minMaxSpan.minSpan != null ? linearMap$2(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap$2(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null); this._range = asc$1([linearMap$2(handleEnds[0], viewExtend, percentExtent, true), linearMap$2(handleEnds[1], viewExtend, percentExtent, true)]); this._updateView(); this._dispatchZoomAction(false); }; SliderZoomView.prototype._onBrush = function(e) { if (this._brushing) { stop(e.event); this._updateBrushRect(e.offsetX, e.offsetY); } }; SliderZoomView.prototype._updateBrushRect = function(mouseX, mouseY) { var displayables = this._displayables; var dataZoomModel = this.dataZoomModel; var brushRect = displayables.brushRect; if (!brushRect) { brushRect = displayables.brushRect = new Rect({ silent: true, style: dataZoomModel.getModel("brushStyle").getItemStyle() }); displayables.sliderGroup.add(brushRect); } brushRect.attr("ignore", false); var brushStart = this._brushStart; var sliderGroup = this._displayables.sliderGroup; var endPoint = sliderGroup.transformCoordToLocal(mouseX, mouseY); var startPoint = sliderGroup.transformCoordToLocal(brushStart.x, brushStart.y); var size = this._size; endPoint[0] = Math.max(Math.min(size[0], endPoint[0]), 0); brushRect.setShape({ x: startPoint[0], y: 0, width: endPoint[0] - startPoint[0], height: size[1] }); }; /** * This action will be throttled. */ SliderZoomView.prototype._dispatchZoomAction = function(realtime) { var range = this._range; this.api.dispatchAction({ type: "dataZoom", from: this.uid, dataZoomId: this.dataZoomModel.id, animation: realtime ? REALTIME_ANIMATION_CONFIG : null, start: range[0], end: range[1] }); }; SliderZoomView.prototype._findCoordRect = function() { var rect; var coordSysInfoList = collectReferCoordSysModelInfo(this.dataZoomModel).infoList; if (!rect && coordSysInfoList.length) { var coordSys = coordSysInfoList[0].model.coordinateSystem; rect = coordSys.getRect && coordSys.getRect(); } if (!rect) { var width = this.api.getWidth(); var height = this.api.getHeight(); rect = { x: width * .2, y: height * .2, width: width * .6, height: height * .6 }; } return rect; }; SliderZoomView.type = "dataZoom.slider"; return SliderZoomView; }(DataZoomView); function formatLabel(dataZoomModel, extentIdx, window, scale) { var labelFormatter = dataZoomModel.get("labelFormatter"); var labelPrecision = dataZoomModel.get("labelPrecision"); if (labelPrecision == null || labelPrecision === "auto") labelPrecision = window.valuePrecision; var value = window.value[extentIdx]; var valueStr = value == null || isNaN(value) ? "" : isOrdinalScale(scale) || isTimeScale(scale) ? scale.getLabel({ value: Math.round(value) }) : isFinite(labelPrecision) ? round$3(value, labelPrecision, true) : value + ""; return isFunction(labelFormatter) ? labelFormatter(value, valueStr) : isString(labelFormatter) ? labelFormatter.replace("{value}", valueStr) : valueStr; } function getOtherDim(thisDim) { return { x: "y", y: "x", radius: "angle", angle: "radius" }[thisDim]; } function getCursor$1(orient) { return orient === "vertical" ? "ns-resize" : "ew-resize"; } //#endregion //#region node_modules/echarts/lib/component/dataZoom/installDataZoomSlider.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$8(registers) { registers.registerComponentModel(SliderZoomModel); registers.registerComponentView(SliderZoomView); installCommon$1(registers); } //#endregion //#region node_modules/echarts/lib/component/dataZoom/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$7(registers) { use(install$9); use(install$8); } //#endregion //#region node_modules/echarts/lib/visual/visualDefault.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @file Visual mapping. */ var visualDefault = { /** * @public */ get: function(visualType, key, isCategory) { var value = clone$4((defaultOption[visualType] || {})[key]); return isCategory ? isArray$1(value) ? value[value.length - 1] : value : value; } }; var defaultOption = { color: { active: ["#006edd", "#e0ffff"], inactive: [tokens.color.transparent] }, colorHue: { active: [0, 360], inactive: [0, 0] }, colorSaturation: { active: [.3, 1], inactive: [0, 0] }, colorLightness: { active: [.9, .5], inactive: [0, 0] }, colorAlpha: { active: [.3, 1], inactive: [0, 0] }, opacity: { active: [.3, 1], inactive: [0, 0] }, symbol: { active: [ "circle", "roundRect", "diamond" ], inactive: ["none"] }, symbolSize: { active: [10, 50], inactive: [0, 0] } }; //#endregion //#region node_modules/echarts/lib/component/visualMap/VisualMapModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var mapVisual = VisualMapping.mapVisual; var eachVisual = VisualMapping.eachVisual; var isArray = isArray$1; var each$2 = each$12; var asc = asc$1; var linearMap$1 = linearMap$2; var VisualMapModel = function(_super) { __extends(VisualMapModel, _super); function VisualMapModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = VisualMapModel.type; _this.stateList = ["inRange", "outOfRange"]; _this.replacableOptionKeys = [ "inRange", "outOfRange", "target", "controller", "color" ]; _this.layoutMode = { type: "box", ignoreSize: true }; /** * [lowerBound, upperBound] */ _this.dataBound = [-Infinity, Infinity]; _this.targetVisuals = {}; _this.controllerVisuals = {}; return _this; } VisualMapModel.prototype.init = function(option, parentModel, ecModel) { this.mergeDefaultAndTheme(option, ecModel); }; /** * @protected */ VisualMapModel.prototype.optionUpdated = function(newOption, isInit) { var thisOption = this.option; !isInit && replaceVisualOption(thisOption, newOption, this.replacableOptionKeys); this.textStyleModel = this.getModel("textStyle"); this.resetItemSize(); this.completeVisualOption(); }; /** * @protected */ VisualMapModel.prototype.resetVisual = function(supplementVisualOption) { var stateList = this.stateList; supplementVisualOption = bind$1(supplementVisualOption, this); this.controllerVisuals = createVisualMappings(this.option.controller, stateList, supplementVisualOption); this.targetVisuals = createVisualMappings(this.option.target, stateList, supplementVisualOption); }; /** * @public */ VisualMapModel.prototype.getItemSymbol = function() { return null; }; /** * @return An array of series indices. */ VisualMapModel.prototype.getTargetSeriesIndices = function() { var _this = this; var seriesTargets = this.option.seriesTargets; if (seriesTargets) { var indices_1 = []; each$2(seriesTargets, function(target) { if (target.seriesIndex != null) indices_1.push(target.seriesIndex); else if (target.seriesId != null) { var seriesModel_1; _this.ecModel.eachSeries(function(series) { if (series.id === target.seriesId) seriesModel_1 = series; }); if (seriesModel_1) indices_1.push(seriesModel_1.componentIndex); } }); return indices_1; } var optionSeriesId = this.option.seriesId; var optionSeriesIndex = this.option.seriesIndex; if (optionSeriesIndex == null && optionSeriesId == null) optionSeriesIndex = "all"; var seriesModels = queryReferringComponents(this.ecModel, "series", { index: optionSeriesIndex, id: optionSeriesId }, { useDefault: false, enableAll: true, enableNone: false }).models; return map$1(seriesModels, function(seriesModel) { return seriesModel.componentIndex; }); }; /** * @public */ VisualMapModel.prototype.eachTargetSeries = function(callback, context) { each$12(this.getTargetSeriesIndices(), function(seriesIndex) { var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex); if (seriesModel) callback.call(context, seriesModel); }, this); }; /** * @pubilc */ VisualMapModel.prototype.isTargetSeries = function(seriesModel) { var is = false; this.eachTargetSeries(function(model) { model === seriesModel && (is = true); }); return is; }; /** * @example * this.formatValueText(someVal); // format single numeric value to text. * this.formatValueText(someVal, true); // format single category value to text. * this.formatValueText([min, max]); // format numeric min-max to text. * this.formatValueText([this.dataBound[0], max]); // using data lower bound. * this.formatValueText([min, this.dataBound[1]]); // using data upper bound. * * @param value Real value, or this.dataBound[0 or 1]. * @param isCategory Only available when value is number. * @param edgeSymbols Open-close symbol when value is interval. * @protected */ VisualMapModel.prototype.formatValueText = function(value, isCategory, edgeSymbols) { var option = this.option; var precision = option.precision; var dataBound = this.dataBound; var formatter = option.formatter; var isMinMax; edgeSymbols = edgeSymbols || ["<", ">"]; if (isArray$1(value)) { value = value.slice(); isMinMax = true; } var textValue = isCategory ? value : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value); if (isString(formatter)) return formatter.replace("{value}", isMinMax ? textValue[0] : textValue).replace("{value2}", isMinMax ? textValue[1] : textValue); else if (isFunction(formatter)) return isMinMax ? formatter(value[0], value[1]) : formatter(value); if (isMinMax) { if (value[0] === dataBound[0]) return edgeSymbols[0] + " " + textValue[1]; else if (value[1] === dataBound[1]) return edgeSymbols[1] + " " + textValue[0]; else return textValue[0] + " - " + textValue[1]; } else return textValue; function toFixed(val) { return val === dataBound[0] ? "min" : val === dataBound[1] ? "max" : (+val).toFixed(Math.min(precision, 20)); } }; /** * @protected */ VisualMapModel.prototype.resetExtent = function() { var thisOption = this.option; var extent = asc([thisOption.min, thisOption.max]); this._dataExtent = extent; }; /** * PENDING: * delete this method if no outer usage. * * Return Concrete dimension. If null/undefined is returned, no dimension is used. */ VisualMapModel.prototype.getDimension = function(seriesIndex) { var _this = this; var seriesTargets = this.option.seriesTargets; if (seriesTargets) { var target = find(seriesTargets, function(target) { return target.seriesIndex != null && target.seriesIndex === seriesIndex || target.seriesId != null && target.seriesId === _this.ecModel.getSeriesByIndex(seriesIndex).id; }); if (target) return target.dimension; } return this.option.dimension; }; VisualMapModel.prototype.getDataDimensionIndex = function(data) { var seriesIndex = data.hostModel.seriesIndex; var optDim = this.getDimension(seriesIndex); if (optDim != null) return data.getDimensionIndex(optDim); var dimNames = data.dimensions; for (var i = dimNames.length - 1; i >= 0; i--) { var dimName = dimNames[i]; var dimInfo = data.getDimensionInfo(dimName); if (!dimInfo.isCalculationCoord) return dimInfo.storeDimIndex; } }; VisualMapModel.prototype.getExtent = function() { return this._dataExtent.slice(); }; VisualMapModel.prototype.completeVisualOption = function() { var ecModel = this.ecModel; var thisOption = this.option; var base = { inRange: thisOption.inRange, outOfRange: thisOption.outOfRange }; var target = thisOption.target || (thisOption.target = {}); var controller = thisOption.controller || (thisOption.controller = {}); merge(target, base); merge(controller, base); var isCategory = this.isCategory(); completeSingle.call(this, target); completeSingle.call(this, controller); completeInactive.call(this, target, "inRange", "outOfRange"); completeController.call(this, controller); function completeSingle(base) { if (isArray(thisOption.color) && !base.inRange) base.inRange = { color: thisOption.color.slice().reverse() }; base.inRange = base.inRange || { color: ecModel.get("gradientColor") }; } function completeInactive(base, stateExist, stateAbsent) { var optExist = base[stateExist]; var optAbsent = base[stateAbsent]; if (optExist && !optAbsent) { optAbsent = base[stateAbsent] = {}; each$2(optExist, function(visualData, visualType) { if (!VisualMapping.isValidType(visualType)) return; var defa = visualDefault.get(visualType, "inactive", isCategory); if (defa != null) { optAbsent[visualType] = defa; if (visualType === "color" && !optAbsent.hasOwnProperty("opacity") && !optAbsent.hasOwnProperty("colorAlpha")) optAbsent.opacity = [0, 0]; } }); } } function completeController(controller) { var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol; var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize; var inactiveColor = this.get("inactiveColor"); var defaultSymbol = this.getItemSymbol() || "roundRect"; each$2(this.stateList, function(state) { var itemSize = this.itemSize; var visuals = controller[state]; if (!visuals) visuals = controller[state] = { color: isCategory ? inactiveColor : [inactiveColor] }; if (visuals.symbol == null) visuals.symbol = symbolExists && clone$4(symbolExists) || (isCategory ? defaultSymbol : [defaultSymbol]); if (visuals.symbolSize == null) visuals.symbolSize = symbolSizeExists && clone$4(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]); visuals.symbol = mapVisual(visuals.symbol, function(symbol) { return symbol === "none" ? defaultSymbol : symbol; }); var symbolSize = visuals.symbolSize; if (symbolSize != null) { var max_1 = -Infinity; eachVisual(symbolSize, function(value) { value > max_1 && (max_1 = value); }); visuals.symbolSize = mapVisual(symbolSize, function(value) { return linearMap$1(value, [0, max_1], [0, itemSize[0]], true); }); } }, this); } }; VisualMapModel.prototype.resetItemSize = function() { this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))]; }; VisualMapModel.prototype.isCategory = function() { return !!this.option.categories; }; /** * @public * @abstract */ VisualMapModel.prototype.setSelected = function(selected) {}; VisualMapModel.prototype.getSelected = function() { return null; }; /** * @public * @abstract */ VisualMapModel.prototype.getValueState = function(value) { return null; }; /** * FIXME * Do not publish to thirt-part-dev temporarily * util the interface is stable. (Should it return * a function but not visual meta?) * * @pubilc * @abstract * @param getColorVisual * params: value, valueState * return: color * @return {Object} visualMeta * should includes {stops, outerColors} * outerColor means [colorBeyondMinValue, colorBeyondMaxValue] */ VisualMapModel.prototype.getVisualMeta = function(getColorVisual) { return null; }; VisualMapModel.type = "visualMap"; VisualMapModel.dependencies = ["series"]; VisualMapModel.defaultOption = { show: true, z: 4, min: 0, max: 200, left: 0, right: null, top: null, bottom: 0, itemWidth: null, itemHeight: null, inverse: false, orient: "vertical", backgroundColor: tokens.color.transparent, borderColor: tokens.color.borderTint, contentColor: tokens.color.theme[0], inactiveColor: tokens.color.disabled, borderWidth: 0, padding: tokens.size.m, textGap: 10, precision: 0, textStyle: { color: tokens.color.secondary } }; return VisualMapModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/visualMap/ContinuousModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_BAR_BOUND = [20, 140]; var ContinuousModel = function(_super) { __extends(ContinuousModel, _super); function ContinuousModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ContinuousModel.type; return _this; } /** * @override */ ContinuousModel.prototype.optionUpdated = function(newOption, isInit) { _super.prototype.optionUpdated.apply(this, arguments); this.resetExtent(); this.resetVisual(function(mappingOption) { mappingOption.mappingMethod = "linear"; mappingOption.dataExtent = this.getExtent(); }); this._resetRange(); }; /** * @protected * @override */ ContinuousModel.prototype.resetItemSize = function() { _super.prototype.resetItemSize.apply(this, arguments); var itemSize = this.itemSize; (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]); (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]); }; /** * @private */ ContinuousModel.prototype._resetRange = function() { var dataExtent = this.getExtent(); var range = this.option.range; if (!range || range.auto) { dataExtent.auto = 1; this.option.range = dataExtent; } else if (isArray$1(range)) { if (range[0] > range[1]) range.reverse(); range[0] = Math.max(range[0], dataExtent[0]); range[1] = Math.min(range[1], dataExtent[1]); } }; /** * @protected * @override */ ContinuousModel.prototype.completeVisualOption = function() { _super.prototype.completeVisualOption.apply(this, arguments); each$12(this.stateList, function(state) { var symbolSize = this.option.controller[state].symbolSize; if (symbolSize && symbolSize[0] !== symbolSize[1]) symbolSize[0] = symbolSize[1] / 3; }, this); }; /** * @override */ ContinuousModel.prototype.setSelected = function(selected) { this.option.range = selected.slice(); this._resetRange(); }; /** * @public */ ContinuousModel.prototype.getSelected = function() { var dataExtent = this.getExtent(); var dataInterval = asc$1((this.get("range") || []).slice()); dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]); dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]); dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]); dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]); return dataInterval; }; /** * @override */ ContinuousModel.prototype.getValueState = function(value) { var range = this.option.range; var dataExtent = this.getExtent(); var unboundedRange = retrieve2(this.option.unboundedRange, true); return (unboundedRange && range[0] <= dataExtent[0] || range[0] <= value) && (unboundedRange && range[1] >= dataExtent[1] || value <= range[1]) ? "inRange" : "outOfRange"; }; ContinuousModel.prototype.findTargetDataIndices = function(range) { var result = []; this.eachTargetSeries(function(seriesModel) { var dataIndices = []; var data = seriesModel.getData(); data.each(this.getDataDimensionIndex(data), function(value, dataIndex) { range[0] <= value && value <= range[1] && dataIndices.push(dataIndex); }, this); result.push({ seriesId: seriesModel.id, dataIndex: dataIndices }); }, this); return result; }; /** * @implement */ ContinuousModel.prototype.getVisualMeta = function(getColorVisual) { var oVals = getColorStopValues(this, "outOfRange", this.getExtent()); var iVals = getColorStopValues(this, "inRange", this.option.range.slice()); var stops = []; function setStop(value, valueState) { stops.push({ value, color: getColorVisual(value, valueState) }); } var iIdx = 0; var oIdx = 0; var iLen = iVals.length; var oLen = oVals.length; for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) if (oVals[oIdx] < iVals[iIdx]) setStop(oVals[oIdx], "outOfRange"); for (var first = 1; iIdx < iLen; iIdx++, first = 0) { first && stops.length && setStop(iVals[iIdx], "outOfRange"); setStop(iVals[iIdx], "inRange"); } for (var first = 1; oIdx < oLen; oIdx++) if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) { if (first) { stops.length && setStop(stops[stops.length - 1].value, "outOfRange"); first = 0; } setStop(oVals[oIdx], "outOfRange"); } var stopsLen = stops.length; return { stops, outerColors: [stopsLen ? stops[0].color : "transparent", stopsLen ? stops[stopsLen - 1].color : "transparent"] }; }; ContinuousModel.type = "visualMap.continuous"; ContinuousModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, { align: "auto", calculable: false, hoverLink: true, realtime: true, handleIcon: "path://M-11.39,9.77h0a3.5,3.5,0,0,1-3.5,3.5h-22a3.5,3.5,0,0,1-3.5-3.5h0a3.5,3.5,0,0,1,3.5-3.5h22A3.5,3.5,0,0,1-11.39,9.77Z", handleSize: "120%", handleStyle: { borderColor: tokens.color.neutral00, borderWidth: 1 }, indicatorIcon: "circle", indicatorSize: "50%", indicatorStyle: { borderColor: tokens.color.neutral00, borderWidth: 2, shadowBlur: 2, shadowOffsetX: 1, shadowOffsetY: 1, shadowColor: tokens.color.shadow } }); return ContinuousModel; }(VisualMapModel); function getColorStopValues(visualMapModel, valueState, dataExtent) { if (dataExtent[0] === dataExtent[1]) return dataExtent.slice(); var count = 200; var step = (dataExtent[1] - dataExtent[0]) / count; var value = dataExtent[0]; var stopValues = []; for (var i = 0; i <= count && value < dataExtent[1]; i++) { stopValues.push(value); value += step; } stopValues.push(dataExtent[1]); return stopValues; } //#endregion //#region node_modules/echarts/lib/component/visualMap/VisualMapView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var VisualMapView = function(_super) { __extends(VisualMapView, _super); function VisualMapView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = VisualMapView.type; _this.autoPositionValues = { left: 1, right: 1, top: 1, bottom: 1 }; return _this; } VisualMapView.prototype.init = function(ecModel, api) { this.ecModel = ecModel; this.api = api; }; /** * @protected */ VisualMapView.prototype.render = function(visualMapModel, ecModel, api, payload) { this.visualMapModel = visualMapModel; if (visualMapModel.get("show") === false) { this.group.removeAll(); return; } this.doRender(visualMapModel, ecModel, api, payload); }; /** * @protected */ VisualMapView.prototype.renderBackground = function(group) { var visualMapModel = this.visualMapModel; var padding = normalizeCssArray(visualMapModel.get("padding") || 0); var rect = group.getBoundingRect(); group.add(new Rect$2({ z2: -1, silent: true, shape: { x: rect.x - padding[3], y: rect.y - padding[0], width: rect.width + padding[3] + padding[1], height: rect.height + padding[0] + padding[2] }, style: { fill: visualMapModel.get("backgroundColor"), stroke: visualMapModel.get("borderColor"), lineWidth: visualMapModel.get("borderWidth") } })); }; /** * @protected * @param targetValue can be Infinity or -Infinity * @param visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize' * @param opts * @param opts.forceState Specify state, instead of using getValueState method. * @param opts.convertOpacityToAlpha For color gradient in controller widget. * @return {*} Visual value. */ VisualMapView.prototype.getControllerVisual = function(targetValue, visualCluster, opts) { opts = opts || {}; var forceState = opts.forceState; var visualMapModel = this.visualMapModel; var visualObj = {}; if (visualCluster === "color") visualObj.color = visualMapModel.get("contentColor"); function getter(key) { return visualObj[key]; } function setter(key, value) { visualObj[key] = value; } var mappings = visualMapModel.controllerVisuals[forceState || visualMapModel.getValueState(targetValue)]; each$12(VisualMapping.prepareVisualTypes(mappings), function(type) { var visualMapping = mappings[type]; if (opts.convertOpacityToAlpha && type === "opacity") { type = "colorAlpha"; visualMapping = mappings.__alphaForOpacity; } if (VisualMapping.dependsOn(type, visualCluster)) visualMapping && visualMapping.applyVisual(targetValue, getter, setter); }); return visualObj[visualCluster]; }; VisualMapView.prototype.positionGroup = function(group) { var model = this.visualMapModel; var api = this.api; var refContainer = createBoxLayoutReference(model, api).refContainer; positionElement(group, model.getBoxLayoutParams(), refContainer); }; VisualMapView.prototype.doRender = function(visualMapModel, ecModel, api, payload) {}; VisualMapView.type = "visualMap"; return VisualMapView; }(ComponentView); //#endregion //#region node_modules/echarts/lib/component/visualMap/helper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var paramsSet = [[ "left", "right", "width" ], [ "top", "bottom", "height" ]]; /** * @param visualMapModel * @param api * @param itemSize always [short, long] * @return {string} 'left' or 'right' or 'top' or 'bottom' */ function getItemAlign(visualMapModel, api, itemSize) { var modelOption = visualMapModel.option; var itemAlign = modelOption.align; if (itemAlign != null && itemAlign !== "auto") return itemAlign; var ecSize = { width: api.getWidth(), height: api.getHeight() }; var realIndex = modelOption.orient === "horizontal" ? 1 : 0; var reals = paramsSet[realIndex]; var fakeValue = [ 0, null, 10 ]; var layoutInput = {}; for (var i = 0; i < 3; i++) { layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i]; layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]]; } var rParam = [[ "x", "width", 3 ], [ "y", "height", 0 ]][realIndex]; var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding); return reals[(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * .5 < ecSize[rParam[1]] * .5 ? 0 : 1]; } /** * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and * dataIndexInside means filtered index. */ function makeHighDownBatch(batch, visualMapModel) { each$12(batch || [], function(batchItem) { if (batchItem.dataIndex != null) { batchItem.dataIndexInside = batchItem.dataIndex; batchItem.dataIndex = null; } batchItem.highlightKey = "visualMap" + (visualMapModel ? visualMapModel.componentIndex : ""); }); return batch; } //#endregion //#region node_modules/echarts/lib/component/visualMap/ContinuousView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var linearMap = linearMap$2; var each$1 = each$12; var mathMin = Math.min; var mathMax = Math.max; var HOVER_LINK_SIZE = 12; var HOVER_LINK_OUT = 6; var ContinuousView = function(_super) { __extends(ContinuousView, _super); function ContinuousView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ContinuousView.type; _this._shapes = {}; _this._dataInterval = []; _this._handleEnds = []; _this._hoverLinkDataIndices = []; return _this; } ContinuousView.prototype.init = function(ecModel, api) { _super.prototype.init.call(this, ecModel, api); this._hoverLinkFromSeriesMouseOver = bind$1(this._hoverLinkFromSeriesMouseOver, this); this._hideIndicator = bind$1(this._hideIndicator, this); }; ContinuousView.prototype.doRender = function(visualMapModel, ecModel, api, payload) { if (!payload || payload.type !== "selectDataRange" || payload.from !== this.uid) this._buildView(); }; ContinuousView.prototype._buildView = function() { this.group.removeAll(); var visualMapModel = this.visualMapModel; var thisGroup = this.group; this._orient = visualMapModel.get("orient"); this._useHandle = visualMapModel.get("calculable"); this._resetInterval(); this._renderBar(thisGroup); var dataRangeText = visualMapModel.get("text"); this._renderEndsText(thisGroup, dataRangeText, 0); this._renderEndsText(thisGroup, dataRangeText, 1); this._updateView(true); this.renderBackground(thisGroup); this._updateView(); this._enableHoverLinkToSeries(); this._enableHoverLinkFromSeries(); this.positionGroup(thisGroup); }; ContinuousView.prototype._renderEndsText = function(group, dataRangeText, endsIndex) { if (!dataRangeText) return; var text = dataRangeText[1 - endsIndex]; text = text != null ? text + "" : ""; var visualMapModel = this.visualMapModel; var textGap = visualMapModel.get("textGap"); var itemSize = visualMapModel.itemSize; var barGroup = this._shapes.mainGroup; var position = this._applyTransform([itemSize[0] / 2, endsIndex === 0 ? -textGap : itemSize[1] + textGap], barGroup); var align = this._applyTransform(endsIndex === 0 ? "bottom" : "top", barGroup); var orient = this._orient; var textStyleModel = this.visualMapModel.textStyleModel; this.group.add(new ZRText({ style: createTextStyle$1(textStyleModel, { x: position[0], y: position[1], verticalAlign: textStyleModel.get("verticalAlign") || (orient === "horizontal" ? "middle" : align), align: textStyleModel.get("align") || (orient === "horizontal" ? align : "center"), text }) })); }; ContinuousView.prototype._renderBar = function(targetGroup) { var visualMapModel = this.visualMapModel; var shapes = this._shapes; var itemSize = visualMapModel.itemSize; var orient = this._orient; var useHandle = this._useHandle; var itemAlign = getItemAlign(visualMapModel, this.api, itemSize); var mainGroup = shapes.mainGroup = this._createBarGroup(itemAlign); var gradientBarGroup = new Group$3(); mainGroup.add(gradientBarGroup); gradientBarGroup.add(shapes.outOfRange = createPolygon()); gradientBarGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor(this._orient) : null, bind$1(this._dragHandle, this, "all", false), bind$1(this._dragHandle, this, "all", true))); gradientBarGroup.setClipPath(new Rect$2({ shape: { x: 0, y: 0, width: itemSize[0], height: itemSize[1], r: 3 } })); var textRect = visualMapModel.textStyleModel.getTextRect("国"); var textSize = mathMax(textRect.width, textRect.height); if (useHandle) { shapes.handleThumbs = []; shapes.handleLabels = []; shapes.handleLabelPoints = []; this._createHandle(visualMapModel, mainGroup, 0, itemSize, textSize, orient); this._createHandle(visualMapModel, mainGroup, 1, itemSize, textSize, orient); } this._createIndicator(visualMapModel, mainGroup, itemSize, textSize, orient); targetGroup.add(mainGroup); }; ContinuousView.prototype._createHandle = function(visualMapModel, mainGroup, handleIndex, itemSize, textSize, orient) { var onDrift = bind$1(this._dragHandle, this, handleIndex, false); var onDragEnd = bind$1(this._dragHandle, this, handleIndex, true); var handleSize = parsePercent$1(visualMapModel.get("handleSize"), itemSize[0]); var handleThumb = createSymbol$1(visualMapModel.get("handleIcon"), -handleSize / 2, -handleSize / 2, handleSize, handleSize, null, true); var cursor = getCursor(this._orient); handleThumb.attr({ cursor, draggable: true, drift: onDrift, ondragend: onDragEnd, onmousemove: function(e) { stop(e.event); } }); handleThumb.x = itemSize[0] / 2; handleThumb.useStyle(visualMapModel.getModel("handleStyle").getItemStyle()); handleThumb.setStyle({ strokeNoScale: true, strokeFirst: true }); handleThumb.style.lineWidth *= 2; handleThumb.ensureState("emphasis").style = visualMapModel.getModel(["emphasis", "handleStyle"]).getItemStyle(); setAsHighDownDispatcher(handleThumb, true); mainGroup.add(handleThumb); var textStyleModel = this.visualMapModel.textStyleModel; var handleLabel = new ZRText({ cursor, draggable: true, drift: onDrift, onmousemove: function(e) { stop(e.event); }, ondragend: onDragEnd, style: createTextStyle$1(textStyleModel, { x: 0, y: 0, text: "" }) }); handleLabel.ensureState("blur").style = { opacity: .1 }; handleLabel.stateTransition = { duration: 200 }; this.group.add(handleLabel); var handleLabelPoint = [handleSize, 0]; var shapes = this._shapes; shapes.handleThumbs[handleIndex] = handleThumb; shapes.handleLabelPoints[handleIndex] = handleLabelPoint; shapes.handleLabels[handleIndex] = handleLabel; }; ContinuousView.prototype._createIndicator = function(visualMapModel, mainGroup, itemSize, textSize, orient) { var scale = parsePercent$1(visualMapModel.get("indicatorSize"), itemSize[0]); var indicator = createSymbol$1(visualMapModel.get("indicatorIcon"), -scale / 2, -scale / 2, scale, scale, null, true); indicator.attr({ cursor: "move", invisible: true, silent: true, x: itemSize[0] / 2 }); var indicatorStyle = visualMapModel.getModel("indicatorStyle").getItemStyle(); if (indicator instanceof ZRImage) { var pathStyle = indicator.style; indicator.useStyle(extend({ image: pathStyle.image, x: pathStyle.x, y: pathStyle.y, width: pathStyle.width, height: pathStyle.height }, indicatorStyle)); } else indicator.useStyle(indicatorStyle); mainGroup.add(indicator); var textStyleModel = this.visualMapModel.textStyleModel; var indicatorLabel = new ZRText({ silent: true, invisible: true, style: createTextStyle$1(textStyleModel, { x: 0, y: 0, text: "" }) }); this.group.add(indicatorLabel); var indicatorLabelPoint = [(orient === "horizontal" ? textSize / 2 : HOVER_LINK_OUT) + itemSize[0] / 2, 0]; var shapes = this._shapes; shapes.indicator = indicator; shapes.indicatorLabel = indicatorLabel; shapes.indicatorLabelPoint = indicatorLabelPoint; this._firstShowIndicator = true; }; ContinuousView.prototype._dragHandle = function(handleIndex, isEnd, dx, dy) { if (!this._useHandle) return; this._dragging = !isEnd; if (!isEnd) { var vertex = this._applyTransform([dx, dy], this._shapes.mainGroup, true); this._updateInterval(handleIndex, vertex[1]); this._hideIndicator(); this._updateView(); } if (isEnd === !this.visualMapModel.get("realtime")) this.api.dispatchAction({ type: "selectDataRange", from: this.uid, visualMapId: this.visualMapModel.id, selected: this._dataInterval.slice() }); if (isEnd) !this._hovering && this._clearHoverLinkToSeries(); else if (useHoverLinkOnHandle(this.visualMapModel)) this._doHoverLinkToSeries(this._handleEnds[handleIndex], false); }; ContinuousView.prototype._resetInterval = function() { var visualMapModel = this.visualMapModel; var dataInterval = this._dataInterval = visualMapModel.getSelected(); var dataExtent = visualMapModel.getExtent(); var sizeExtent = [0, visualMapModel.itemSize[1]]; this._handleEnds = [linearMap(dataInterval[0], dataExtent, sizeExtent, true), linearMap(dataInterval[1], dataExtent, sizeExtent, true)]; }; /** * @private * @param {(number|string)} handleIndex 0 or 1 or 'all' * @param {number} dx * @param {number} dy */ ContinuousView.prototype._updateInterval = function(handleIndex, delta) { delta = delta || 0; var visualMapModel = this.visualMapModel; var handleEnds = this._handleEnds; var sizeExtent = [0, visualMapModel.itemSize[1]]; sliderMove(delta, handleEnds, sizeExtent, handleIndex, 0); var dataExtent = visualMapModel.getExtent(); this._dataInterval = [linearMap(handleEnds[0], sizeExtent, dataExtent, true), linearMap(handleEnds[1], sizeExtent, dataExtent, true)]; }; ContinuousView.prototype._updateView = function(forSketch) { var visualMapModel = this.visualMapModel; var dataExtent = visualMapModel.getExtent(); var shapes = this._shapes; var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]]; var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds; var visualInRange = this._createBarVisual(this._dataInterval, dataExtent, inRangeHandleEnds, "inRange"); var visualOutOfRange = this._createBarVisual(dataExtent, dataExtent, outOfRangeHandleEnds, "outOfRange"); shapes.inRange.setStyle({ fill: visualInRange.barColor }).setShape("points", visualInRange.barPoints); shapes.outOfRange.setStyle({ fill: visualOutOfRange.barColor }).setShape("points", visualOutOfRange.barPoints); this._updateHandle(inRangeHandleEnds, visualInRange); }; ContinuousView.prototype._createBarVisual = function(dataInterval, dataExtent, handleEnds, forceState) { var opts = { forceState, convertOpacityToAlpha: true }; var colorStops = this._makeColorGradient(dataInterval, opts); var symbolSizes = [this.getControllerVisual(dataInterval[0], "symbolSize", opts), this.getControllerVisual(dataInterval[1], "symbolSize", opts)]; var barPoints = this._createBarPoints(handleEnds, symbolSizes); return { barColor: new LinearGradient(0, 0, 0, 1, colorStops), barPoints, handlesColor: [colorStops[0].color, colorStops[colorStops.length - 1].color] }; }; ContinuousView.prototype._makeColorGradient = function(dataInterval, opts) { var sampleNumber = 100; var colorStops = []; var step = (dataInterval[1] - dataInterval[0]) / sampleNumber; colorStops.push({ color: this.getControllerVisual(dataInterval[0], "color", opts), offset: 0 }); for (var i = 1; i < sampleNumber; i++) { var currValue = dataInterval[0] + step * i; if (currValue > dataInterval[1]) break; colorStops.push({ color: this.getControllerVisual(currValue, "color", opts), offset: i / sampleNumber }); } colorStops.push({ color: this.getControllerVisual(dataInterval[1], "color", opts), offset: 1 }); return colorStops; }; ContinuousView.prototype._createBarPoints = function(handleEnds, symbolSizes) { var itemSize = this.visualMapModel.itemSize; return [ [itemSize[0] - symbolSizes[0], handleEnds[0]], [itemSize[0], handleEnds[0]], [itemSize[0], handleEnds[1]], [itemSize[0] - symbolSizes[1], handleEnds[1]] ]; }; ContinuousView.prototype._createBarGroup = function(itemAlign) { var orient = this._orient; var inverse = this.visualMapModel.get("inverse"); return new Group$3(orient === "horizontal" && !inverse ? { scaleX: itemAlign === "bottom" ? 1 : -1, rotation: Math.PI / 2 } : orient === "horizontal" && inverse ? { scaleX: itemAlign === "bottom" ? -1 : 1, rotation: -Math.PI / 2 } : orient === "vertical" && !inverse ? { scaleX: itemAlign === "left" ? 1 : -1, scaleY: -1 } : { scaleX: itemAlign === "left" ? 1 : -1 }); }; ContinuousView.prototype._updateHandle = function(handleEnds, visualInRange) { if (!this._useHandle) return; var shapes = this._shapes; var visualMapModel = this.visualMapModel; var handleThumbs = shapes.handleThumbs; var handleLabels = shapes.handleLabels; var itemSize = visualMapModel.itemSize; var dataExtent = visualMapModel.getExtent(); var align = this._applyTransform("left", shapes.mainGroup); each$1([0, 1], function(handleIndex) { var handleThumb = handleThumbs[handleIndex]; handleThumb.setStyle("fill", visualInRange.handlesColor[handleIndex]); handleThumb.y = handleEnds[handleIndex]; var val = linearMap(handleEnds[handleIndex], [0, itemSize[1]], dataExtent, true); var symbolSize = this.getControllerVisual(val, "symbolSize"); handleThumb.scaleX = handleThumb.scaleY = symbolSize / itemSize[0]; handleThumb.x = itemSize[0] - symbolSize / 2; var textPoint = applyTransform(shapes.handleLabelPoints[handleIndex], getTransform$1(handleThumb, this.group)); if (this._orient === "horizontal") { var minimumOffset = align === "left" || align === "top" ? (itemSize[0] - symbolSize) / 2 : (itemSize[0] - symbolSize) / -2; textPoint[1] += minimumOffset; } handleLabels[handleIndex].setStyle({ x: textPoint[0], y: textPoint[1], text: visualMapModel.formatValueText(this._dataInterval[handleIndex]), verticalAlign: "middle", align: this._orient === "vertical" ? this._applyTransform("left", shapes.mainGroup) : "center" }); }, this); }; ContinuousView.prototype._showIndicator = function(cursorValue, textValue, rangeSymbol, halfHoverLinkSize) { var visualMapModel = this.visualMapModel; var dataExtent = visualMapModel.getExtent(); var itemSize = visualMapModel.itemSize; var sizeExtent = [0, itemSize[1]]; var shapes = this._shapes; var indicator = shapes.indicator; if (!indicator) return; indicator.attr("invisible", false); var color = this.getControllerVisual(cursorValue, "color", { convertOpacityToAlpha: true }); var symbolSize = this.getControllerVisual(cursorValue, "symbolSize"); var y = linearMap(cursorValue, dataExtent, sizeExtent, true); var x = itemSize[0] - symbolSize / 2; var oldIndicatorPos = { x: indicator.x, y: indicator.y }; indicator.y = y; indicator.x = x; var textPoint = applyTransform(shapes.indicatorLabelPoint, getTransform$1(indicator, this.group)); var indicatorLabel = shapes.indicatorLabel; indicatorLabel.attr("invisible", false); var align = this._applyTransform("left", shapes.mainGroup); var isHorizontal = this._orient === "horizontal"; indicatorLabel.setStyle({ text: (rangeSymbol ? rangeSymbol : "") + visualMapModel.formatValueText(textValue), verticalAlign: isHorizontal ? align : "middle", align: isHorizontal ? "center" : align }); var indicatorNewProps = { x, y, style: { fill: color } }; var labelNewProps = { style: { x: textPoint[0], y: textPoint[1] } }; if (visualMapModel.ecModel.isAnimationEnabled() && !this._firstShowIndicator) { var animationCfg = { duration: 100, easing: "cubicInOut", additive: true }; indicator.x = oldIndicatorPos.x; indicator.y = oldIndicatorPos.y; indicator.animateTo(indicatorNewProps, animationCfg); indicatorLabel.animateTo(labelNewProps, animationCfg); } else { indicator.attr(indicatorNewProps); indicatorLabel.attr(labelNewProps); } this._firstShowIndicator = false; var handleLabels = this._shapes.handleLabels; if (handleLabels) for (var i = 0; i < handleLabels.length; i++) this.api.enterBlur(handleLabels[i]); }; ContinuousView.prototype._enableHoverLinkToSeries = function() { var self = this; this._shapes.mainGroup.on("mousemove", function(e) { self._hovering = true; if (!self._dragging) { var itemSize = self.visualMapModel.itemSize; var pos = self._applyTransform([e.offsetX, e.offsetY], self._shapes.mainGroup, true, true); pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]); self._doHoverLinkToSeries(pos[1], 0 <= pos[0] && pos[0] <= itemSize[0]); } }).on("mouseout", function() { self._hovering = false; !self._dragging && self._clearHoverLinkToSeries(); }); }; ContinuousView.prototype._enableHoverLinkFromSeries = function() { var zr = this.api.getZr(); if (this.visualMapModel.option.hoverLink) { zr.on("mouseover", this._hoverLinkFromSeriesMouseOver, this); zr.on("mouseout", this._hideIndicator, this); } else this._clearHoverLinkFromSeries(); }; ContinuousView.prototype._doHoverLinkToSeries = function(cursorPos, hoverOnBar) { var visualMapModel = this.visualMapModel; var itemSize = visualMapModel.itemSize; if (!visualMapModel.option.hoverLink) return; var sizeExtent = [0, itemSize[1]]; var dataExtent = visualMapModel.getExtent(); cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]); var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent); var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize]; var cursorValue = linearMap(cursorPos, sizeExtent, dataExtent, true); var valueRange = [linearMap(hoverRange[0], sizeExtent, dataExtent, true), linearMap(hoverRange[1], sizeExtent, dataExtent, true)]; hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity); hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); if (hoverOnBar) { if (valueRange[0] === -Infinity) this._showIndicator(cursorValue, valueRange[1], "< ", halfHoverLinkSize); else if (valueRange[1] === Infinity) this._showIndicator(cursorValue, valueRange[0], "> ", halfHoverLinkSize); else this._showIndicator(cursorValue, cursorValue, "≈ ", halfHoverLinkSize); } var oldBatch = this._hoverLinkDataIndices; var newBatch = []; if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange); var resultBatches = compressBatches(oldBatch, newBatch); this._dispatchHighDown("downplay", makeHighDownBatch(resultBatches[0], visualMapModel)); this._dispatchHighDown("highlight", makeHighDownBatch(resultBatches[1], visualMapModel)); }; ContinuousView.prototype._hoverLinkFromSeriesMouseOver = function(e) { var ecData; findEventDispatcher(e.target, function(target) { var currECData = getECData(target); if (currECData.dataIndex != null) { ecData = currECData; return true; } }, true); if (!ecData) return; var dataModel = this.ecModel.getSeriesByIndex(ecData.seriesIndex); var visualMapModel = this.visualMapModel; if (!visualMapModel.isTargetSeries(dataModel)) return; var data = dataModel.getData(ecData.dataType); var value = data.getStore().get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex); if (!isNaN(value)) this._showIndicator(value, value); }; ContinuousView.prototype._hideIndicator = function() { var shapes = this._shapes; shapes.indicator && shapes.indicator.attr("invisible", true); shapes.indicatorLabel && shapes.indicatorLabel.attr("invisible", true); var handleLabels = this._shapes.handleLabels; if (handleLabels) for (var i = 0; i < handleLabels.length; i++) this.api.leaveBlur(handleLabels[i]); }; ContinuousView.prototype._clearHoverLinkToSeries = function() { this._hideIndicator(); var indices = this._hoverLinkDataIndices; this._dispatchHighDown("downplay", makeHighDownBatch(indices, this.visualMapModel)); indices.length = 0; }; ContinuousView.prototype._clearHoverLinkFromSeries = function() { this._hideIndicator(); var zr = this.api.getZr(); zr.off("mouseover", this._hoverLinkFromSeriesMouseOver); zr.off("mouseout", this._hideIndicator); }; ContinuousView.prototype._applyTransform = function(vertex, element, inverse, global) { var transform = getTransform$1(element, global ? null : this.group); return isArray$1(vertex) ? applyTransform(vertex, transform, inverse) : transformDirection(vertex, transform, inverse); }; ContinuousView.prototype._dispatchHighDown = function(type, batch) { batch && batch.length && this.api.dispatchAction({ type, batch }); }; /** * @override */ ContinuousView.prototype.dispose = function() { this._clearHoverLinkFromSeries(); this._clearHoverLinkToSeries(); }; ContinuousView.type = "visualMap.continuous"; return ContinuousView; }(VisualMapView); function createPolygon(points, cursor, onDrift, onDragEnd) { return new Polygon({ shape: { points }, draggable: !!onDrift, cursor, drift: onDrift, onmousemove: function(e) { stop(e.event); }, ondragend: onDragEnd }); } function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) { var halfHoverLinkSize = HOVER_LINK_SIZE / 2; var hoverLinkDataSize = visualMapModel.get("hoverLinkDataSize"); if (hoverLinkDataSize) halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2; return halfHoverLinkSize; } function useHoverLinkOnHandle(visualMapModel) { var hoverLinkOnHandle = visualMapModel.get("hoverLinkOnHandle"); return !!(hoverLinkOnHandle == null ? visualMapModel.get("realtime") : hoverLinkOnHandle); } function getCursor(orient) { return orient === "vertical" ? "ns-resize" : "ew-resize"; } //#endregion //#region node_modules/echarts/lib/component/visualMap/visualMapAction.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var visualMapActionInfo = { type: "selectDataRange", event: "dataRangeSelected", update: "update" }; var visualMapActionHander = function(payload, ecModel) { ecModel.eachComponent({ mainType: "visualMap", query: payload }, function(model) { model.setSelected(payload.selected); }); }; //#endregion //#region node_modules/echarts/lib/component/visualMap/visualEncoding.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var visualMapEncodingHandlers = [{ createOnAllSeries: true, reset: function(seriesModel, ecModel) { var resetDefines = []; ecModel.eachComponent("visualMap", function(visualMapModel) { var pipelineContext = seriesModel.pipelineContext; if (!visualMapModel.isTargetSeries(seriesModel) || pipelineContext && pipelineContext.large) return; resetDefines.push(incrementalApplyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, bind$1(visualMapModel.getValueState, visualMapModel), visualMapModel.getDataDimensionIndex(seriesModel.getData()))); }); return resetDefines; } }, { createOnAllSeries: true, reset: function(seriesModel, ecModel) { var data = seriesModel.getData(); var visualMetaList = []; ecModel.eachComponent("visualMap", function(visualMapModel) { if (visualMapModel.isTargetSeries(seriesModel)) { var visualMeta = visualMapModel.getVisualMeta(bind$1(getColorVisual, null, seriesModel, visualMapModel)) || { stops: [], outerColors: [] }; var dimIdx = visualMapModel.getDataDimensionIndex(data); if (dimIdx >= 0) { visualMeta.dimension = dimIdx; visualMetaList.push(visualMeta); } } }); seriesModel.getData().setVisual("visualMeta", visualMetaList); } }]; function getColorVisual(seriesModel, visualMapModel, value, valueState) { var mappings = visualMapModel.targetVisuals[valueState]; var visualTypes = VisualMapping.prepareVisualTypes(mappings); var resultVisual = { color: getVisualFromData(seriesModel.getData(), "color") }; for (var i = 0, len = visualTypes.length; i < len; i++) { var type = visualTypes[i]; var mapping = mappings[type === "opacity" ? "__alphaForOpacity" : type]; mapping && mapping.applyVisual(value, getVisual, setVisual); } return resultVisual.color; function getVisual(key) { return resultVisual[key]; } function setVisual(key, value) { resultVisual[key] = value; } } //#endregion //#region node_modules/echarts/lib/component/visualMap/preprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var each = each$12; function visualMapPreprocessor(option) { var visualMap = option && option.visualMap; if (!isArray$1(visualMap)) visualMap = visualMap ? [visualMap] : []; each(visualMap, function(opt) { if (!opt) return; if (has(opt, "splitList") && !has(opt, "pieces")) { opt.pieces = opt.splitList; delete opt.splitList; } var pieces = opt.pieces; if (pieces && isArray$1(pieces)) each(pieces, function(piece) { if (isObject$3(piece)) { if (has(piece, "start") && !has(piece, "min")) piece.min = piece.start; if (has(piece, "end") && !has(piece, "max")) piece.max = piece.end; } }); var seriesTargets = opt.seriesTargets; if (seriesTargets && isArray$1(seriesTargets)) each(seriesTargets, function(target) { if (!isObject$3(target) || target.dimension == null) console.warn("Each seriesTarget should have a dimension property"); if (target.seriesIndex == null && target.seriesId == null) console.warn("Each seriesTarget should have either seriesIndex or seriesId"); }); }); } function has(obj, name) { return obj && obj.hasOwnProperty && obj.hasOwnProperty(name); } //#endregion //#region node_modules/echarts/lib/component/visualMap/installCommon.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var installed = false; function installCommon(registers) { if (installed) return; installed = true; registers.registerSubTypeDefaulter("visualMap", function(option) { return !option.categories && (!(option.pieces ? option.pieces.length > 0 : option.splitNumber > 0) || option.calculable) ? "continuous" : "piecewise"; }); registers.registerAction(visualMapActionInfo, visualMapActionHander); each$12(visualMapEncodingHandlers, function(handler) { registers.registerVisual(registers.PRIORITY.VISUAL.COMPONENT, handler); }); registers.registerPreprocessor(visualMapPreprocessor); } //#endregion //#region node_modules/echarts/lib/component/visualMap/installVisualMapContinuous.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$6(registers) { registers.registerComponentModel(ContinuousModel); registers.registerComponentView(ContinuousView); installCommon(registers); } //#endregion //#region node_modules/echarts/lib/component/visualMap/PiecewiseModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PiecewiseModel = function(_super) { __extends(PiecewiseModel, _super); function PiecewiseModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PiecewiseModel.type; /** * The order is always [low, ..., high]. * [{text: string, interval: Array.}, ...] */ _this._pieceList = []; return _this; } PiecewiseModel.prototype.optionUpdated = function(newOption, isInit) { _super.prototype.optionUpdated.apply(this, arguments); this.resetExtent(); var mode = this._mode = this._determineMode(); this._pieceList = []; resetMethods[this._mode].call(this, this._pieceList); this._resetSelected(newOption, isInit); var categories = this.option.categories; this.resetVisual(function(mappingOption, state) { if (mode === "categories") { mappingOption.mappingMethod = "category"; mappingOption.categories = clone$4(categories); } else { mappingOption.dataExtent = this.getExtent(); mappingOption.mappingMethod = "piecewise"; mappingOption.pieceList = map$1(this._pieceList, function(piece) { piece = clone$4(piece); if (state !== "inRange") piece.visual = null; return piece; }); } }); }; /** * @protected * @override */ PiecewiseModel.prototype.completeVisualOption = function() { var option = this.option; var visualTypesInPieces = {}; var visualTypes = VisualMapping.listVisualTypes(); var isCategory = this.isCategory(); each$12(option.pieces, function(piece) { each$12(visualTypes, function(visualType) { if (piece.hasOwnProperty(visualType)) visualTypesInPieces[visualType] = 1; }); }); each$12(visualTypesInPieces, function(v, visualType) { var exists = false; each$12(this.stateList, function(state) { exists = exists || has(option, state, visualType) || has(option.target, state, visualType); }, this); !exists && each$12(this.stateList, function(state) { (option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === "inRange" ? "active" : "inactive", isCategory); }); }, this); function has(obj, state, visualType) { return obj && obj[state] && obj[state].hasOwnProperty(visualType); } _super.prototype.completeVisualOption.apply(this, arguments); }; PiecewiseModel.prototype._resetSelected = function(newOption, isInit) { var thisOption = this.option; var pieceList = this._pieceList; var selected = (isInit ? thisOption : newOption).selected || {}; thisOption.selected = selected; each$12(pieceList, function(piece, index) { var key = this.getSelectedMapKey(piece); if (!selected.hasOwnProperty(key)) selected[key] = true; }, this); if (thisOption.selectedMode === "single") { var hasSel_1 = false; each$12(pieceList, function(piece, index) { var key = this.getSelectedMapKey(piece); if (selected[key]) hasSel_1 ? selected[key] = false : hasSel_1 = true; }, this); } }; /** * @public */ PiecewiseModel.prototype.getItemSymbol = function() { return this.get("itemSymbol"); }; /** * @public */ PiecewiseModel.prototype.getSelectedMapKey = function(piece) { return this._mode === "categories" ? piece.value + "" : piece.index + ""; }; /** * @public */ PiecewiseModel.prototype.getPieceList = function() { return this._pieceList; }; /** * @return {string} */ PiecewiseModel.prototype._determineMode = function() { var option = this.option; return option.pieces && option.pieces.length > 0 ? "pieces" : this.option.categories ? "categories" : "splitNumber"; }; /** * @override */ PiecewiseModel.prototype.setSelected = function(selected) { this.option.selected = clone$4(selected); }; /** * @override */ PiecewiseModel.prototype.getValueState = function(value) { var index = VisualMapping.findPieceIndex(value, this._pieceList); return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? "inRange" : "outOfRange" : "outOfRange"; }; /** * @public * @param pieceIndex piece index in visualMapModel.getPieceList() */ PiecewiseModel.prototype.findTargetDataIndices = function(pieceIndex) { var result = []; var pieceList = this._pieceList; this.eachTargetSeries(function(seriesModel) { var dataIndices = []; var data = seriesModel.getData(); data.each(this.getDataDimensionIndex(data), function(value, dataIndex) { VisualMapping.findPieceIndex(value, pieceList) === pieceIndex && dataIndices.push(dataIndex); }, this); result.push({ seriesId: seriesModel.id, dataIndex: dataIndices }); }, this); return result; }; /** * @private * @param piece piece.value or piece.interval is required. * @return Can be Infinity or -Infinity */ PiecewiseModel.prototype.getRepresentValue = function(piece) { var representValue; if (this.isCategory()) representValue = piece.value; else if (piece.value != null) representValue = piece.value; else { var pieceInterval = piece.interval || []; representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2; } return representValue; }; PiecewiseModel.prototype.getVisualMeta = function(getColorVisual) { if (this.isCategory()) return; var stops = []; var outerColors = ["", ""]; var visualMapModel = this; function setStop(interval, valueState) { var representValue = visualMapModel.getRepresentValue({ interval }); if (!valueState) valueState = visualMapModel.getValueState(representValue); var color = getColorVisual(representValue, valueState); if (interval[0] === -Infinity) outerColors[0] = color; else if (interval[1] === Infinity) outerColors[1] = color; else stops.push({ value: interval[0], color }, { value: interval[1], color }); } var pieceList = this._pieceList.slice(); if (!pieceList.length) pieceList.push({ interval: [-Infinity, Infinity] }); else { var edge = pieceList[0].interval[0]; edge !== -Infinity && pieceList.unshift({ interval: [-Infinity, edge] }); edge = pieceList[pieceList.length - 1].interval[1]; edge !== Infinity && pieceList.push({ interval: [edge, Infinity] }); } var curr = -Infinity; each$12(pieceList, function(piece) { var interval = piece.interval; if (interval) { interval[0] > curr && setStop([curr, interval[0]], "outOfRange"); setStop(interval.slice()); curr = interval[1]; } }, this); return { stops, outerColors }; }; PiecewiseModel.type = "visualMap.piecewise"; PiecewiseModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, { selected: null, minOpen: false, maxOpen: false, align: "auto", itemWidth: 20, itemHeight: 14, itemSymbol: "roundRect", pieces: null, categories: null, splitNumber: 5, selectedMode: "multiple", itemGap: 10, hoverLink: true }); return PiecewiseModel; }(VisualMapModel); /** * Key is this._mode * @type {Object} * @this {module:echarts/component/viusalMap/PiecewiseMode} */ var resetMethods = { splitNumber: function(outPieceList) { var thisOption = this.option; var precision = Math.min(thisOption.precision, 20); var dataExtent = this.getExtent(); var splitNumber = thisOption.splitNumber; splitNumber = Math.max(parseInt(splitNumber, 10), 1); thisOption.splitNumber = splitNumber; var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; while (+splitStep.toFixed(precision) !== splitStep && precision < 5) precision++; thisOption.precision = precision; splitStep = +splitStep.toFixed(precision); if (thisOption.minOpen) outPieceList.push({ interval: [-Infinity, dataExtent[0]], close: [0, 0] }); for (var index = 0, curr = dataExtent[0]; index < splitNumber; curr += splitStep, index++) { var max = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep; outPieceList.push({ interval: [curr, max], close: [1, 1] }); } if (thisOption.maxOpen) outPieceList.push({ interval: [dataExtent[1], Infinity], close: [0, 0] }); reformIntervals(outPieceList); each$12(outPieceList, function(piece, index) { piece.index = index; piece.text = this.formatValueText(piece.interval); }, this); }, categories: function(outPieceList) { var thisOption = this.option; each$12(thisOption.categories, function(cate) { outPieceList.push({ text: this.formatValueText(cate, true), value: cate }); }, this); normalizeReverse(thisOption, outPieceList); }, pieces: function(outPieceList) { var thisOption = this.option; each$12(thisOption.pieces, function(pieceListItem, index) { if (!isObject$3(pieceListItem)) pieceListItem = { value: pieceListItem }; var item = { text: "", index }; if (pieceListItem.label != null) item.text = pieceListItem.label; if (pieceListItem.hasOwnProperty("value")) { var value = item.value = pieceListItem.value; item.interval = [value, value]; item.close = [1, 1]; } else { var interval = item.interval = []; var close_1 = item.close = [0, 0]; var closeList = [ 1, 0, 1 ]; var infinityList = [-Infinity, Infinity]; var useMinMax = []; for (var lg = 0; lg < 2; lg++) { var names = [[ "gte", "gt", "min" ], [ "lte", "lt", "max" ]][lg]; for (var i = 0; i < 3 && interval[lg] == null; i++) { interval[lg] = pieceListItem[names[i]]; close_1[lg] = closeList[i]; useMinMax[lg] = i === 2; } interval[lg] ?? (interval[lg] = infinityList[lg]); } useMinMax[0] && interval[1] === Infinity && (close_1[0] = 0); useMinMax[1] && interval[0] === -Infinity && (close_1[1] = 0); if (interval[0] > interval[1]) console.warn("Piece " + index + "is illegal: " + interval + " lower bound should not greater then uppper bound."); if (interval[0] === interval[1] && close_1[0] && close_1[1]) item.value = interval[0]; } item.visual = VisualMapping.retrieveVisuals(pieceListItem); outPieceList.push(item); }, this); normalizeReverse(thisOption, outPieceList); reformIntervals(outPieceList); each$12(outPieceList, function(piece) { var close = piece.close; var edgeSymbols = [["<", "≤"][close[1]], [">", "≥"][close[0]]]; piece.text = piece.text || this.formatValueText(piece.value != null ? piece.value : piece.interval, false, edgeSymbols); }, this); } }; function normalizeReverse(thisOption, pieceList) { var inverse = thisOption.inverse; if (thisOption.orient === "vertical" ? !inverse : inverse) pieceList.reverse(); } //#endregion //#region node_modules/echarts/lib/component/visualMap/PiecewiseView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var PiecewiseVisualMapView = function(_super) { __extends(PiecewiseVisualMapView, _super); function PiecewiseVisualMapView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PiecewiseVisualMapView.type; return _this; } PiecewiseVisualMapView.prototype.doRender = function() { var thisGroup = this.group; thisGroup.removeAll(); var visualMapModel = this.visualMapModel; var textGap = visualMapModel.get("textGap"); var textStyleModel = visualMapModel.textStyleModel; var itemAlign = this._getItemAlign(); var itemSize = visualMapModel.itemSize; var viewData = this._getViewData(); var endsText = viewData.endsText; var showLabel = retrieve(visualMapModel.get("showLabel", true), !endsText); var silent = !visualMapModel.get("selectedMode"); endsText && this._renderEndsText(thisGroup, endsText[0], itemSize, showLabel, itemAlign); each$12(viewData.viewPieceList, function(item) { var piece = item.piece; var itemGroup = new Group$3(); itemGroup.onclick = bind$1(this._onItemClick, this, piece); this._enableHoverLink(itemGroup, item.indexInModelPieceList); var representValue = visualMapModel.getRepresentValue(piece); this._createItemSymbol(itemGroup, representValue, [ 0, 0, itemSize[0], itemSize[1] ], silent); if (showLabel) { var visualState = this.visualMapModel.getValueState(representValue); var align = textStyleModel.get("align") || itemAlign; itemGroup.add(new ZRText({ style: createTextStyle$1(textStyleModel, { x: align === "right" ? -textGap : itemSize[0] + textGap, y: itemSize[1] / 2, text: piece.text, verticalAlign: textStyleModel.get("verticalAlign") || "middle", align, opacity: retrieve2(textStyleModel.get("opacity"), visualState === "outOfRange" ? .5 : 1) }), silent })); } thisGroup.add(itemGroup); }, this); endsText && this._renderEndsText(thisGroup, endsText[1], itemSize, showLabel, itemAlign); box(visualMapModel.get("orient"), thisGroup, visualMapModel.get("itemGap")); this.renderBackground(thisGroup); this.positionGroup(thisGroup); }; PiecewiseVisualMapView.prototype._enableHoverLink = function(itemGroup, pieceIndex) { var _this = this; itemGroup.on("mouseover", function() { return onHoverLink("highlight"); }).on("mouseout", function() { return onHoverLink("downplay"); }); var onHoverLink = function(method) { var visualMapModel = _this.visualMapModel; visualMapModel.option.hoverLink && _this.api.dispatchAction({ type: method, batch: makeHighDownBatch(visualMapModel.findTargetDataIndices(pieceIndex), visualMapModel) }); }; }; PiecewiseVisualMapView.prototype._getItemAlign = function() { var visualMapModel = this.visualMapModel; var modelOption = visualMapModel.option; if (modelOption.orient === "vertical") return getItemAlign(visualMapModel, this.api, visualMapModel.itemSize); else { var align = modelOption.align; if (!align || align === "auto") align = "left"; return align; } }; PiecewiseVisualMapView.prototype._renderEndsText = function(group, text, itemSize, showLabel, itemAlign) { if (!text) return; var itemGroup = new Group$3(); var textStyleModel = this.visualMapModel.textStyleModel; itemGroup.add(new ZRText({ style: createTextStyle$1(textStyleModel, { x: showLabel ? itemAlign === "right" ? itemSize[0] : 0 : itemSize[0] / 2, y: itemSize[1] / 2, verticalAlign: "middle", align: showLabel ? itemAlign : "center", text }) })); group.add(itemGroup); }; /** * @private * @return {Object} {peiceList, endsText} The order is the same as screen pixel order. */ PiecewiseVisualMapView.prototype._getViewData = function() { var visualMapModel = this.visualMapModel; var viewPieceList = map$1(visualMapModel.getPieceList(), function(piece, index) { return { piece, indexInModelPieceList: index }; }); var endsText = visualMapModel.get("text"); var orient = visualMapModel.get("orient"); var inverse = visualMapModel.get("inverse"); if (orient === "horizontal" ? inverse : !inverse) viewPieceList.reverse(); else if (endsText) endsText = endsText.slice().reverse(); return { viewPieceList, endsText }; }; PiecewiseVisualMapView.prototype._createItemSymbol = function(group, representValue, shapeParam, silent) { var itemSymbol = createSymbol$1(this.getControllerVisual(representValue, "symbol"), shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], this.getControllerVisual(representValue, "color")); itemSymbol.silent = silent; group.add(itemSymbol); }; PiecewiseVisualMapView.prototype._onItemClick = function(piece) { var visualMapModel = this.visualMapModel; var option = visualMapModel.option; var selectedMode = option.selectedMode; if (!selectedMode) return; var selected = clone$4(option.selected); var newKey = visualMapModel.getSelectedMapKey(piece); if (selectedMode === "single" || selectedMode === true) { selected[newKey] = true; each$12(selected, function(o, key) { selected[key] = key === newKey; }); } else selected[newKey] = !selected[newKey]; this.api.dispatchAction({ type: "selectDataRange", from: this.uid, visualMapId: this.visualMapModel.id, selected }); }; PiecewiseVisualMapView.type = "visualMap.piecewise"; return PiecewiseVisualMapView; }(VisualMapView); //#endregion //#region node_modules/echarts/lib/component/visualMap/installVisualMapPiecewise.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$5(registers) { registers.registerComponentModel(PiecewiseModel); registers.registerComponentView(PiecewiseVisualMapView); installCommon(registers); } //#endregion //#region node_modules/echarts/lib/component/visualMap/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$4(registers) { use(install$6); use(install$5); } //#endregion //#region node_modules/echarts/lib/component/thumbnail/ThumbnailBridgeImpl.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * [CAVEAT]: the call order of `ThumbnailView['render']` and other * `ChartView['render']/ComponentView['render']` is not guaranteed. */ var ThumbnailBridgeImpl = function() { function ThumbnailBridgeImpl(thumbnailModel) { this._thumbnailModel = thumbnailModel; } ThumbnailBridgeImpl.prototype.reset = function(api) { this._renderVersion = api.getECUpdateCycleVersion(); }; ThumbnailBridgeImpl.prototype.renderContent = function(opt) { var thumbnailView = opt.api.getViewOfComponentModel(this._thumbnailModel); if (!thumbnailView) return; opt.group.silent = true; thumbnailView.renderContent({ group: opt.group, targetTrans: opt.targetTrans, z2Range: calcZ2Range(opt.group), roamType: opt.roamType, viewportRect: opt.viewportRect, renderVersion: this._renderVersion }); }; ThumbnailBridgeImpl.prototype.updateWindow = function(targetTrans, api) { var thumbnailView = api.getViewOfComponentModel(this._thumbnailModel); if (!thumbnailView) return; thumbnailView.updateWindow({ targetTrans, renderVersion: this._renderVersion }); }; return ThumbnailBridgeImpl; }(); //#endregion //#region node_modules/echarts/lib/component/thumbnail/ThumbnailModel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ThumbnailModel = function(_super) { __extends(ThumbnailModel, _super); function ThumbnailModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ThumbnailModel.type; _this.preventAutoZ = true; return _this; } ThumbnailModel.prototype.optionUpdated = function(newCptOption, isInit) { this._updateBridge(); }; ThumbnailModel.prototype._updateBridge = function() { var bridge = this._birdge = this._birdge || new ThumbnailBridgeImpl(this); this._target = null; this.ecModel.eachSeries(function(series) { injectThumbnailBridge(series, null); }); if (this.shouldShow()) injectThumbnailBridge(this.getTarget().baseMapProvider, bridge); }; ThumbnailModel.prototype.shouldShow = function() { return this.getShallow("show", true); }; ThumbnailModel.prototype.getBridge = function() { return this._birdge; }; ThumbnailModel.prototype.getTarget = function() { if (this._target) return this._target; var series = this.getReferringComponents("series", { useDefault: false, enableAll: false, enableNone: false }).models[0]; if (series) { if (series.subType !== "graph") { series = null; error("series." + series.subType + " is not supported in thumbnail.", true); } } else series = this.ecModel.queryComponents({ mainType: "series", subType: "graph" })[0]; this._target = { baseMapProvider: series }; return this._target; }; ThumbnailModel.type = "thumbnail"; ThumbnailModel.layoutMode = "box"; ThumbnailModel.dependencies = ["series", "geo"]; ThumbnailModel.defaultOption = { show: true, right: 1, bottom: 1, height: "25%", width: "25%", itemStyle: { borderColor: tokens.color.border, borderWidth: 2 }, windowStyle: { borderWidth: 1, color: tokens.color.neutral30, borderColor: tokens.color.neutral40, opacity: .3 }, z: 10 }; return ThumbnailModel; }(ComponentModel); //#endregion //#region node_modules/echarts/lib/component/thumbnail/ThumbnailView.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var ThumbnailView = function(_super) { __extends(ThumbnailView, _super); function ThumbnailView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = ThumbnailView.type; return _this; } ThumbnailView.prototype.render = function(thumbnailModel, ecModel, api) { this._api = api; this._model = thumbnailModel; if (!this._coordSys) this._coordSys = new View(); if (!this._isEnabled()) { this._clear(); return; } this._renderVersion = api.getECUpdateCycleVersion(); var group = this.group; group.removeAll(); var itemStyleModel = thumbnailModel.getModel("itemStyle"); var itemStyle = itemStyleModel.getItemStyle(); if (itemStyle.fill == null) itemStyle.fill = ecModel.get("backgroundColor") || tokens.color.neutral00; var refContainer = createBoxLayoutReference(thumbnailModel, api).refContainer; var boxRect = getLayoutRect(getBoxLayoutParams(thumbnailModel, true), refContainer); var boxBorderWidth = itemStyle.lineWidth || 0; var contentRect = this._contentRect = expandOrShrinkRect(boxRect.clone(), boxBorderWidth / 2, true, true); var contentGroup = new Group$3(); group.add(contentGroup); contentGroup.setClipPath(new Rect$2({ shape: contentRect.plain() })); var targetGroup = this._targetGroup = new Group$3(); contentGroup.add(targetGroup); var borderShape = boxRect.plain(); borderShape.r = itemStyleModel.getShallow("borderRadius", true); group.add(this._bgRect = new Rect$2({ style: itemStyle, shape: borderShape, silent: false, cursor: "grab" })); var windowStyleModel = thumbnailModel.getModel("windowStyle"); var windowR = windowStyleModel.getShallow("borderRadius", true); contentGroup.add(this._windowRect = new Rect$2({ shape: { x: 0, y: 0, width: 0, height: 0, r: windowR }, style: windowStyleModel.getItemStyle(), silent: false, cursor: "grab" })); this._dealRenderContent(); this._dealUpdateWindow(); updateZ(thumbnailModel, this); }; /** * Can be called asynchronously directly. * This method should be idempotent. */ ThumbnailView.prototype.renderContent = function(bridgeRendered) { this._bridgeRendered = bridgeRendered; if (this._isEnabled()) { this._dealRenderContent(); this._dealUpdateWindow(); updateZ(this._model, this); } }; ThumbnailView.prototype._dealRenderContent = function() { var bridgeRendered = this._bridgeRendered; if (!bridgeRendered || bridgeRendered.renderVersion !== this._renderVersion) return; var targetGroup = this._targetGroup; var coordSys = this._coordSys; var contentRect = this._contentRect; targetGroup.removeAll(); if (!bridgeRendered) return; var bridgeGroup = bridgeRendered.group; var bridgeRect = bridgeGroup.getBoundingRect(); targetGroup.add(bridgeGroup); this._bgRect.z2 = bridgeRendered.z2Range.min - 10; viewCoordSysSetBoundingRect(coordSys, bridgeRect.x, bridgeRect.y, bridgeRect.width, bridgeRect.height); var viewRect = getLayoutRect({ left: "center", top: "center", aspect: bridgeRect.width / bridgeRect.height }, contentRect); viewCoordSysSetViewRect(coordSys, viewRect.x, viewRect.y, viewRect.width, viewRect.height); viewCoordSysCopyTrans(bridgeGroup, coordSys, 0); bridgeGroup.dirty(); this._windowRect.z2 = bridgeRendered.z2Range.max + 10; this._resetRoamController(bridgeRendered.roamType); }; /** * Can be called from action handler directly. * This method should be idempotent. */ ThumbnailView.prototype.updateWindow = function(param) { var bridgeRendered = this._bridgeRendered; if (bridgeRendered && bridgeRendered.renderVersion === param.renderVersion) bridgeRendered.targetTrans = param.targetTrans; if (this._isEnabled()) this._dealUpdateWindow(); }; ThumbnailView.prototype._dealUpdateWindow = function() { var bridgeRendered = this._bridgeRendered; if (!bridgeRendered || bridgeRendered.renderVersion !== this._renderVersion) return; var invTargetTrans = invert([], bridgeRendered.targetTrans); var transTargetToThis = mul([], viewCoordSysCopyOverallMatrix(null, this._coordSys), invTargetTrans); this._transThisToTarget = invert([], transTargetToThis); var viewportRect = bridgeRendered.viewportRect; if (!viewportRect) viewportRect = new BoundingRect(0, 0, this._api.getWidth(), this._api.getHeight()); else viewportRect = viewportRect.clone(); viewportRect.applyTransform(transTargetToThis); var windowRect = this._windowRect; var r = windowRect.shape.r; windowRect.setShape(defaults({ r }, viewportRect)); }; ThumbnailView.prototype._resetRoamController = function(roamType) { var _this = this; var api = this._api; var roamController = this._roamController; if (!roamController) roamController = this._roamController = new RoamController(api.getZr()); if (!roamType || !this._isEnabled()) { roamController.disable(); return; } roamController.enable(roamType, { api, zInfo: { component: this._model }, triggerInfo: { roamTrigger: null, isInSelf: function(e, x, y) { return _this._contentRect.contain(x, y); } } }); roamController.off("pan").off("zoom").on("pan", bind$1(this._onPan, this)).on("zoom", bind$1(this._onZoom, this)); }; ThumbnailView.prototype._onPan = function(event) { var trans = this._transThisToTarget; if (!this._isEnabled() || !trans) return; var oldOffset = applyTransform$1([], [event.oldX, event.oldY], trans); var newOffset = applyTransform$1([], [event.oldX - event.dx, event.oldY - event.dy], trans); this._api.dispatchAction(makeRoamPayload(this._model.getTarget().baseMapProvider, { dx: newOffset[0] - oldOffset[0], dy: newOffset[1] - oldOffset[1] })); }; ThumbnailView.prototype._onZoom = function(event) { var trans = this._transThisToTarget; if (!this._isEnabled() || !trans) return; var offset = applyTransform$1([], [event.originX, event.originY], trans); this._api.dispatchAction(makeRoamPayload(this._model.getTarget().baseMapProvider, { zoom: 1 / event.scale, originX: offset[0], originY: offset[1] })); }; /** * This method is also responsible for check enable in asynchronous situation, * e.g., in event listeners that is supposed to be outdated but not be removed. */ ThumbnailView.prototype._isEnabled = function() { var thumbnailModel = this._model; if (!thumbnailModel || !thumbnailModel.shouldShow()) return false; if (!thumbnailModel.getTarget().baseMapProvider) return false; return true; }; ThumbnailView.prototype._clear = function() { this.group.removeAll(); this._bridgeRendered = null; if (this._roamController) this._roamController.disable(); }; ThumbnailView.prototype.remove = function() { this._clear(); }; ThumbnailView.prototype.dispose = function() { this._clear(); }; ThumbnailView.type = "thumbnail"; return ThumbnailView; }(ComponentView); function makeRoamPayload(baseMapProvider, params) { var payload = { type: baseMapProvider.mainType === "series" ? baseMapProvider.subType + "Roam" : baseMapProvider.mainType + "Roam" }; payload[baseMapProvider.mainType + "Id"] = baseMapProvider.id; extend(payload, params); return payload; } function updateZ(thumbnailModel, thumbnailView) { var zInfo = retrieveZInfo(thumbnailModel); traverseUpdateZ(thumbnailView.group, zInfo.z, zInfo.zlevel); } //#endregion //#region node_modules/echarts/lib/component/thumbnail/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$3(registers) { registers.registerComponentModel(ThumbnailModel); registers.registerComponentView(ThumbnailView); } //#endregion //#region node_modules/echarts/lib/visual/aria.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DEFAULT_OPTION = { label: { enabled: true }, decal: { show: false } }; var innerSeries = makeInner(); var innerGlobal = makeInner(); var ariaVisualStageHandler = createSimpleOverallStageHandler2(ariaVisual); function ariaVisual(ecModel, api) { var ariaModel = ecModel.getModel("aria"); if (!ariaModel.get("enabled")) return; var decalPaletteScope = innerGlobal(ecModel).scope || (innerGlobal(ecModel).scope = {}); var defaultOption = clone$4(DEFAULT_OPTION); merge(defaultOption.label, ecModel.getLocaleModel().get("aria"), false); merge(ariaModel.option, defaultOption, false); setDecal(); setLabel(); function setDecal() { if (ariaModel.getModel("decal").get("show")) { var paletteScopeGroupByType_1 = createHashMap(); ecModel.eachSeries(function(seriesModel) { if (!seriesModel.isColorBySeries()) innerSeries(seriesModel).scope = paletteScopeGroupByType_1.get(seriesModel.type) || paletteScopeGroupByType_1.set(seriesModel.type, {}); }); ecModel.eachSeries(function(seriesModel) { if (isFunction(seriesModel.enableAriaDecal)) { seriesModel.enableAriaDecal(); return; } var data = seriesModel.getData(); if (!seriesModel.isColorBySeries()) { var dataAll_1 = seriesModel.getRawData(); var idxMap_1 = {}; var decalScope_1 = innerSeries(seriesModel).scope; data.each(function(idx) { var rawIdx = data.getRawIndex(idx); idxMap_1[rawIdx] = idx; }); var dataCount_1 = dataAll_1.count(); dataAll_1.each(function(rawIdx) { var idx = idxMap_1[rawIdx]; var name = dataAll_1.getName(rawIdx) || rawIdx + ""; var paletteDecal = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1); var specifiedDecal = data.getItemVisual(idx, "decal"); data.setItemVisual(idx, "decal", mergeDecal(specifiedDecal, paletteDecal)); }); } else { var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount()); var specifiedDecal = data.getVisual("decal"); data.setVisual("decal", mergeDecal(specifiedDecal, paletteDecal)); } function mergeDecal(specifiedDecal, paletteDecal) { var resultDecal = specifiedDecal ? extend(extend({}, paletteDecal), specifiedDecal) : paletteDecal; resultDecal.dirty = true; return resultDecal; } }); } } function setLabel() { var dom = api.getZr().dom; if (!dom) return; var labelLocale = ecModel.getLocaleModel().get("aria"); var labelModel = ariaModel.getModel("label"); labelModel.option = defaults(labelModel.option, labelLocale); if (!labelModel.get("enabled")) return; dom.setAttribute("role", "img"); if (labelModel.get("description")) { dom.setAttribute("aria-label", labelModel.get("description")); return; } var seriesCnt = ecModel.getSeriesCount(); var maxDataCnt = labelModel.get(["data", "maxCount"]) || 10; var maxSeriesCnt = labelModel.get(["series", "maxCount"]) || 10; var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt); var ariaLabel; if (seriesCnt < 1) return; else { var title = getTitle(); if (title) ariaLabel = replace(labelModel.get(["general", "withTitle"]), { title }); else ariaLabel = labelModel.get(["general", "withoutTitle"]); var seriesLabels_1 = []; var prefix = seriesCnt > 1 ? labelModel.get([ "series", "multiple", "prefix" ]) : labelModel.get([ "series", "single", "prefix" ]); ariaLabel += replace(prefix, { seriesCount: seriesCnt }); ecModel.eachSeries(function(seriesModel, idx) { if (idx < displaySeriesCnt) { var seriesLabel = void 0; var withName = seriesModel.get("name") ? "withName" : "withoutName"; seriesLabel = seriesCnt > 1 ? labelModel.get([ "series", "multiple", withName ]) : labelModel.get([ "series", "single", withName ]); seriesLabel = replace(seriesLabel, { seriesId: seriesModel.seriesIndex, seriesName: seriesModel.get("name"), seriesType: getSeriesTypeName(seriesModel.subType) }); var data = seriesModel.getData(); if (data.count() > maxDataCnt) { var partialLabel = labelModel.get(["data", "partialData"]); seriesLabel += replace(partialLabel, { displayCnt: maxDataCnt }); } else seriesLabel += labelModel.get(["data", "allData"]); var middleSeparator_1 = labelModel.get([ "data", "separator", "middle" ]); var endSeparator_1 = labelModel.get([ "data", "separator", "end" ]); var excludeDimensionId_1 = labelModel.get(["data", "excludeDimensionId"]); var dataLabels = []; for (var i = 0; i < data.count(); i++) if (i < maxDataCnt) { var name_1 = data.getName(i); var value = !excludeDimensionId_1 ? data.getValues(i) : filter(data.getValues(i), function(v, j) { return indexOf(excludeDimensionId_1, j) === -1; }); var dataLabel = labelModel.get(["data", name_1 ? "withName" : "withoutName"]); dataLabels.push(replace(dataLabel, { name: name_1, value: value.join(middleSeparator_1) })); } seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1; seriesLabels_1.push(seriesLabel); } }); var separatorModel = labelModel.getModel([ "series", "multiple", "separator" ]); var middleSeparator = separatorModel.get("middle"); var endSeparator = separatorModel.get("end"); ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator; dom.setAttribute("aria-label", ariaLabel); } } function replace(str, keyValues) { if (!isString(str)) return str; var result = str; each$12(keyValues, function(value, key) { result = result.replace(new RegExp("\\{\\s*" + key + "\\s*\\}", "g"), value); }); return result; } function getTitle() { var title = ecModel.get("title"); if (title && title.length) title = title[0]; return title && title.text; } function getSeriesTypeName(type) { var typeNames = ecModel.getLocaleModel().get(["series", "typeNames"]); return typeNames[type] || typeNames.chart; } } //#endregion //#region node_modules/echarts/lib/component/aria/preprocessor.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function ariaPreprocessor(option) { if (!option || !option.aria) return; var aria = option.aria; if (aria.show != null) aria.enabled = aria.show; aria.label = aria.label || {}; each$12([ "description", "general", "series", "data" ], function(name) { if (aria[name] != null) aria.label[name] = aria[name]; }); } //#endregion //#region node_modules/echarts/lib/component/aria/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$2(registers) { registers.registerPreprocessor(ariaPreprocessor); registers.registerVisual(registers.PRIORITY.VISUAL.ARIA, ariaVisualStageHandler); } //#endregion //#region node_modules/echarts/lib/util/conditionalExpression.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var RELATIONAL_EXPRESSION_OP_ALIAS_MAP = { value: "eq", "<": "lt", "<=": "lte", ">": "gt", ">=": "gte", "=": "eq", "!=": "ne", "<>": "ne" }; var RegExpEvaluator = function() { function RegExpEvaluator(rVal) { if ((this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null) == null) { var errMsg = ""; errMsg = makePrintable("Illegal regexp", rVal, "in"); throwError(errMsg); } } RegExpEvaluator.prototype.evaluate = function(lVal) { var type = typeof lVal; return isString(type) ? this._condVal.test(lVal) : isNumber(type) ? this._condVal.test(lVal + "") : false; }; return RegExpEvaluator; }(); var ConstConditionInternal = function() { function ConstConditionInternal() {} ConstConditionInternal.prototype.evaluate = function() { return this.value; }; return ConstConditionInternal; }(); var AndConditionInternal = function() { function AndConditionInternal() {} AndConditionInternal.prototype.evaluate = function() { var children = this.children; for (var i = 0; i < children.length; i++) if (!children[i].evaluate()) return false; return true; }; return AndConditionInternal; }(); var OrConditionInternal = function() { function OrConditionInternal() {} OrConditionInternal.prototype.evaluate = function() { var children = this.children; for (var i = 0; i < children.length; i++) if (children[i].evaluate()) return true; return false; }; return OrConditionInternal; }(); var NotConditionInternal = function() { function NotConditionInternal() {} NotConditionInternal.prototype.evaluate = function() { return !this.child.evaluate(); }; return NotConditionInternal; }(); var RelationalConditionInternal = function() { function RelationalConditionInternal() {} RelationalConditionInternal.prototype.evaluate = function() { var needParse = !!this.valueParser; var getValue = this.getValue; var tarValRaw = getValue(this.valueGetterParam); var tarValParsed = needParse ? this.valueParser(tarValRaw) : null; for (var i = 0; i < this.subCondList.length; i++) if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) return false; return true; }; return RelationalConditionInternal; }(); function parseOption(exprOption, getters) { if (exprOption === true || exprOption === false) { var cond = new ConstConditionInternal(); cond.value = exprOption; return cond; } var errMsg = ""; if (!isObjectNotArray(exprOption)) { errMsg = makePrintable("Illegal config. Expect a plain object but actually", exprOption); throwError(errMsg); } if (exprOption.and) return parseAndOrOption("and", exprOption, getters); else if (exprOption.or) return parseAndOrOption("or", exprOption, getters); else if (exprOption.not) return parseNotOption(exprOption, getters); return parseRelationalOption(exprOption, getters); } function parseAndOrOption(op, exprOption, getters) { var subOptionArr = exprOption[op]; var errMsg = ""; errMsg = makePrintable("\"and\"/\"or\" condition should only be `" + op + ": [...]` and must not be empty array.", "Illegal condition:", exprOption); if (!isArray$1(subOptionArr)) throwError(errMsg); if (!subOptionArr.length) throwError(errMsg); var cond = op === "and" ? new AndConditionInternal() : new OrConditionInternal(); cond.children = map$1(subOptionArr, function(subOption) { return parseOption(subOption, getters); }); if (!cond.children.length) throwError(errMsg); return cond; } function parseNotOption(exprOption, getters) { var subOption = exprOption.not; var errMsg = ""; errMsg = makePrintable("\"not\" condition should only be `not: {}`.", "Illegal condition:", exprOption); if (!isObjectNotArray(subOption)) throwError(errMsg); var cond = new NotConditionInternal(); cond.child = parseOption(subOption, getters); if (!cond.child) throwError(errMsg); return cond; } function parseRelationalOption(exprOption, getters) { var errMsg = ""; var valueGetterParam = getters.prepareGetValue(exprOption); var subCondList = []; var exprKeys = keys(exprOption); var parserName = exprOption.parser; var valueParser = parserName ? getRawValueParser(parserName) : null; for (var i = 0; i < exprKeys.length; i++) { var keyRaw = exprKeys[i]; if (keyRaw === "parser" || getters.valueGetterAttrMap.get(keyRaw)) continue; var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw; var condValueRaw = exprOption[keyRaw]; var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw; var evaluator = createFilterComparator(op, condValueParsed) || op === "reg" && new RegExpEvaluator(condValueParsed); if (!evaluator) { errMsg = makePrintable("Illegal relational operation: \"" + keyRaw + "\" in condition:", exprOption); throwError(errMsg); } subCondList.push(evaluator); } if (!subCondList.length) { errMsg = makePrintable("Relational condition must have at least one operator.", "Illegal condition:", exprOption); throwError(errMsg); } var cond = new RelationalConditionInternal(); cond.valueGetterParam = valueGetterParam; cond.valueParser = valueParser; cond.getValue = getters.getValue; cond.subCondList = subCondList; return cond; } function isObjectNotArray(val) { return isObject$3(val) && !isArrayLike(val); } var ConditionalExpressionParsed = function() { function ConditionalExpressionParsed(exprOption, getters) { this._cond = parseOption(exprOption, getters); } ConditionalExpressionParsed.prototype.evaluate = function() { return this._cond.evaluate(); }; return ConditionalExpressionParsed; }(); function parseConditionalExpression(exprOption, getters) { return new ConditionalExpressionParsed(exprOption, getters); } //#endregion //#region node_modules/echarts/lib/component/transform/filterTransform.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var filterTransform = { type: "echarts:filter", transform: function(params) { var upstream = params.upstream; var rawItem; var condition = parseConditionalExpression(params.config, { valueGetterAttrMap: createHashMap({ dimension: true }), prepareGetValue: function(exprOption) { var errMsg = ""; var dimLoose = exprOption.dimension; if (!hasOwn(exprOption, "dimension")) { errMsg = makePrintable("Relation condition must has prop \"dimension\" specified.", "Illegal condition:", exprOption); throwError(errMsg); } var dimInfo = upstream.getDimensionInfo(dimLoose); if (!dimInfo) { errMsg = makePrintable("Can not find dimension info via: " + dimLoose + ".\n", "Existing dimensions: ", upstream.cloneAllDimensionInfo(), ".\n", "Illegal condition:", exprOption, ".\n"); throwError(errMsg); } return { dimIdx: dimInfo.index }; }, getValue: function(param) { return upstream.retrieveValueFromItem(rawItem, param.dimIdx); } }); var resultData = []; for (var i = 0, len = upstream.count(); i < len; i++) { rawItem = upstream.getRawDataItem(i); if (condition.evaluate()) resultData.push(rawItem); } return { data: resultData }; } }; //#endregion //#region node_modules/echarts/lib/component/transform/sortTransform.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var sampleLog = ""; sampleLog = [ "Valid config is like:", "{ dimension: \"age\", order: \"asc\" }", "or [{ dimension: \"age\", order: \"asc\"], { dimension: \"date\", order: \"desc\" }]" ].join(" "); var sortTransform = { type: "echarts:sort", transform: function(params) { var upstream = params.upstream; var config = params.config; var errMsg = ""; var orderExprList = normalizeToArray(config); if (!orderExprList.length) { errMsg = "Empty `config` in sort transform."; throwError(errMsg); } var orderDefList = []; each$12(orderExprList, function(orderExpr) { var dimLoose = orderExpr.dimension; var order = orderExpr.order; var parserName = orderExpr.parser; var incomparable = orderExpr.incomparable; if (dimLoose == null) { errMsg = "Sort transform config must has \"dimension\" specified." + sampleLog; throwError(errMsg); } if (order !== "asc" && order !== "desc") { errMsg = "Sort transform config must has \"order\" specified." + sampleLog; throwError(errMsg); } if (incomparable && incomparable !== "min" && incomparable !== "max") { var errMsg_1 = ""; errMsg_1 = "incomparable must be \"min\" or \"max\" rather than \"" + incomparable + "\"."; throwError(errMsg_1); } if (order !== "asc" && order !== "desc") { var errMsg_2 = ""; errMsg_2 = "order must be \"asc\" or \"desc\" rather than \"" + order + "\"."; throwError(errMsg_2); } var dimInfo = upstream.getDimensionInfo(dimLoose); if (!dimInfo) { errMsg = makePrintable("Can not find dimension info via: " + dimLoose + ".\n", "Existing dimensions: ", upstream.cloneAllDimensionInfo(), ".\n", "Illegal config:", orderExpr, ".\n"); throwError(errMsg); } var parser = parserName ? getRawValueParser(parserName) : null; if (parserName && !parser) { errMsg = makePrintable("Invalid parser name " + parserName + ".\n", "Illegal config:", orderExpr, ".\n"); throwError(errMsg); } orderDefList.push({ dimIdx: dimInfo.index, parser, comparator: new SortOrderComparator(order, incomparable) }); }); var sourceFormat = upstream.sourceFormat; if (sourceFormat !== "arrayRows" && sourceFormat !== "objectRows") { errMsg = "sourceFormat \"" + sourceFormat + "\" is not supported yet"; throwError(errMsg); } var resultData = []; for (var i = 0, len = upstream.count(); i < len; i++) resultData.push(upstream.getRawDataItem(i)); resultData.sort(function(item0, item1) { for (var i = 0; i < orderDefList.length; i++) { var orderDef = orderDefList[i]; var val0 = upstream.retrieveValueFromItem(item0, orderDef.dimIdx); var val1 = upstream.retrieveValueFromItem(item1, orderDef.dimIdx); if (orderDef.parser) { val0 = orderDef.parser(val0); val1 = orderDef.parser(val1); } var result = orderDef.comparator.evaluate(val0, val1); if (result !== 0) return result; } return 0; }); return { data: resultData }; } }; //#endregion //#region node_modules/echarts/lib/component/transform/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function install$1(registers) { registers.registerTransform(filterTransform); registers.registerTransform(sortTransform); } //#endregion //#region node_modules/echarts/lib/component/dataset/install.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * This module is imported by echarts directly. * * Notice: * Always keep this file exists for backward compatibility. * Because before 4.1.0, dataset is an optional component, * some users may import this module manually. */ var DatasetModel = function(_super) { __extends(DatasetModel, _super); function DatasetModel() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "dataset"; return _this; } DatasetModel.prototype.init = function(option, parentModel, ecModel) { _super.prototype.init.call(this, option, parentModel, ecModel); this._sourceManager = new SourceManager(this); disableTransformOptionMerge(this); }; DatasetModel.prototype.mergeOption = function(newOption, ecModel) { _super.prototype.mergeOption.call(this, newOption, ecModel); disableTransformOptionMerge(this); }; DatasetModel.prototype.optionUpdated = function() { this._sourceManager.dirty(); }; DatasetModel.prototype.getSourceManager = function() { return this._sourceManager; }; DatasetModel.type = "dataset"; DatasetModel.defaultOption = { seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN }; return DatasetModel; }(ComponentModel); var DatasetView = function(_super) { __extends(DatasetView, _super); function DatasetView() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "dataset"; return _this; } DatasetView.type = "dataset"; return DatasetView; }(ComponentView); function install(registers) { registers.registerComponentModel(DatasetModel); registers.registerComponentView(DatasetView); } //#endregion //#region node_modules/zrender/lib/tool/convertPath.js var CMD = PathProxy.CMD; function aroundEqual(a, b) { return Math.abs(a - b) < 1e-5; } function pathToBezierCurves(path) { var data = path.data; var len = path.len(); var bezierArrayGroups = []; var currentSubpath; var xi = 0; var yi = 0; var x0 = 0; var y0 = 0; function createNewSubpath(x, y) { if (currentSubpath && currentSubpath.length > 2) bezierArrayGroups.push(currentSubpath); currentSubpath = [x, y]; } function addLine(x0, y0, x1, y1) { if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) currentSubpath.push(x0, y0, x1, y1, x1, y1); } function addArc(startAngle, endAngle, cx, cy, rx, ry) { var delta = Math.abs(endAngle - startAngle); var len = Math.tan(delta / 4) * 4 / 3; var dir = endAngle < startAngle ? -1 : 1; var c1 = Math.cos(startAngle); var s1 = Math.sin(startAngle); var c2 = Math.cos(endAngle); var s2 = Math.sin(endAngle); var x1 = c1 * rx + cx; var y1 = s1 * ry + cy; var x4 = c2 * rx + cx; var y4 = s2 * ry + cy; var hx = rx * len * dir; var hy = ry * len * dir; currentSubpath.push(x1 - hx * s1, y1 + hy * c1, x4 + hx * s2, y4 - hy * c2, x4, y4); } var x1; var y1; var x2; var y2; for (var i = 0; i < len;) { var cmd = data[i++]; var isFirst = i === 1; if (isFirst) { xi = data[i]; yi = data[i + 1]; x0 = xi; y0 = yi; if (cmd === CMD.L || cmd === CMD.C || cmd === CMD.Q) currentSubpath = [x0, y0]; } switch (cmd) { case CMD.M: xi = x0 = data[i++]; yi = y0 = data[i++]; createNewSubpath(x0, y0); break; case CMD.L: x1 = data[i++]; y1 = data[i++]; addLine(xi, yi, x1, y1); xi = x1; yi = y1; break; case CMD.C: currentSubpath.push(data[i++], data[i++], data[i++], data[i++], xi = data[i++], yi = data[i++]); break; case CMD.Q: x1 = data[i++]; y1 = data[i++]; x2 = data[i++]; y2 = data[i++]; currentSubpath.push(xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2); xi = x2; yi = y2; break; case CMD.A: var cx = data[i++]; var cy = data[i++]; var rx = data[i++]; var ry = data[i++]; var startAngle = data[i++]; var endAngle = data[i++] + startAngle; i += 1; var anticlockwise = !data[i++]; x1 = Math.cos(startAngle) * rx + cx; y1 = Math.sin(startAngle) * ry + cy; if (isFirst) { x0 = x1; y0 = y1; createNewSubpath(x0, y0); } else addLine(xi, yi, x1, y1); xi = Math.cos(endAngle) * rx + cx; yi = Math.sin(endAngle) * ry + cy; var step = (anticlockwise ? -1 : 1) * Math.PI / 2; for (var angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) { var nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle); addArc(angle, nextAngle, cx, cy, rx, ry); } break; case CMD.R: x0 = xi = data[i++]; y0 = yi = data[i++]; x1 = x0 + data[i++]; y1 = y0 + data[i++]; createNewSubpath(x1, y0); addLine(x1, y0, x1, y1); addLine(x1, y1, x0, y1); addLine(x0, y1, x0, y0); addLine(x0, y0, x1, y0); break; case CMD.Z: currentSubpath && addLine(xi, yi, x0, y0); xi = x0; yi = y0; } } if (currentSubpath && currentSubpath.length > 2) bezierArrayGroups.push(currentSubpath); return bezierArrayGroups; } function adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, out, scale) { if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) { out.push(x3, y3); return; } var PIXEL_DISTANCE = 2 / scale; var PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE; var dx = x3 - x0; var dy = y3 - y0; var d = Math.sqrt(dx * dx + dy * dy); dx /= d; dy /= d; var dx1 = x1 - x0; var dy1 = y1 - y0; var dx2 = x2 - x3; var dy2 = y2 - y3; var cp1LenSqr = dx1 * dx1 + dy1 * dy1; var cp2LenSqr = dx2 * dx2 + dy2 * dy2; if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) { out.push(x3, y3); return; } var projLen1 = dx * dx1 + dy * dy1; var projLen2 = -dx * dx2 - dy * dy2; var d1Sqr = cp1LenSqr - projLen1 * projLen1; var d2Sqr = cp2LenSqr - projLen2 * projLen2; if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0 && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0) { out.push(x3, y3); return; } var tmpSegX = []; var tmpSegY = []; cubicSubdivide(x0, x1, x2, x3, .5, tmpSegX); cubicSubdivide(y0, y1, y2, y3, .5, tmpSegY); adpativeBezier(tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3], out, scale); adpativeBezier(tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7], out, scale); } function pathToPolygons(path, scale) { var bezierArrayGroups = pathToBezierCurves(path); var polygons = []; scale = scale || 1; for (var i = 0; i < bezierArrayGroups.length; i++) { var beziers = bezierArrayGroups[i]; var polygon = []; var x0 = beziers[0]; var y0 = beziers[1]; polygon.push(x0, y0); for (var k = 2; k < beziers.length;) { var x1 = beziers[k++]; var y1 = beziers[k++]; var x2 = beziers[k++]; var y2 = beziers[k++]; var x3 = beziers[k++]; var y3 = beziers[k++]; adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale); x0 = x3; y0 = y3; } polygons.push(polygon); } return polygons; } //#endregion //#region node_modules/zrender/lib/tool/dividePath.js function getDividingGrids(dimSize, rowDim, count) { var rowSize = dimSize[rowDim]; var columnSize = dimSize[1 - rowDim]; var ratio = Math.abs(rowSize / columnSize); var rowCount = Math.ceil(Math.sqrt(ratio * count)); var columnCount = Math.floor(count / rowCount); if (columnCount === 0) { columnCount = 1; rowCount = count; } var grids = []; for (var i = 0; i < rowCount; i++) grids.push(columnCount); var remained = count - rowCount * columnCount; if (remained > 0) for (var i = 0; i < remained; i++) grids[i % rowCount] += 1; return grids; } function divideSector(sectorShape, count, outShapes) { var r0 = sectorShape.r0; var r = sectorShape.r; var startAngle = sectorShape.startAngle; var endAngle = sectorShape.endAngle; var angle = Math.abs(endAngle - startAngle); var arcLen = angle * r; var deltaR = r - r0; var isAngleRow = arcLen > Math.abs(deltaR); var grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count); var rowSize = (isAngleRow ? angle : deltaR) / grids.length; for (var row = 0; row < grids.length; row++) { var columnSize = (isAngleRow ? deltaR : angle) / grids[row]; for (var column = 0; column < grids[row]; column++) { var newShape = {}; if (isAngleRow) { newShape.startAngle = startAngle + rowSize * row; newShape.endAngle = startAngle + rowSize * (row + 1); newShape.r0 = r0 + columnSize * column; newShape.r = r0 + columnSize * (column + 1); } else { newShape.startAngle = startAngle + columnSize * column; newShape.endAngle = startAngle + columnSize * (column + 1); newShape.r0 = r0 + rowSize * row; newShape.r = r0 + rowSize * (row + 1); } newShape.clockwise = sectorShape.clockwise; newShape.cx = sectorShape.cx; newShape.cy = sectorShape.cy; outShapes.push(newShape); } } } function divideRect(rectShape, count, outShapes) { var width = rectShape.width; var height = rectShape.height; var isHorizontalRow = width > height; var grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count); var rowSizeDim = isHorizontalRow ? "width" : "height"; var columnSizeDim = isHorizontalRow ? "height" : "width"; var rowDim = isHorizontalRow ? "x" : "y"; var columnDim = isHorizontalRow ? "y" : "x"; var rowSize = rectShape[rowSizeDim] / grids.length; for (var row = 0; row < grids.length; row++) { var columnSize = rectShape[columnSizeDim] / grids[row]; for (var column = 0; column < grids[row]; column++) { var newShape = {}; newShape[rowDim] = row * rowSize; newShape[columnDim] = column * columnSize; newShape[rowSizeDim] = rowSize; newShape[columnSizeDim] = columnSize; newShape.x += rectShape.x; newShape.y += rectShape.y; outShapes.push(newShape); } } } function crossProduct2d(x1, y1, x2, y2) { return x1 * y2 - x2 * y1; } function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { var mx = a2x - a1x; var my = a2y - a1y; var nx = b2x - b1x; var ny = b2y - b1y; var nmCrossProduct = crossProduct2d(nx, ny, mx, my); if (Math.abs(nmCrossProduct) < 1e-6) return null; var p = crossProduct2d(a1x - b1x, a1y - b1y, nx, ny) / nmCrossProduct; if (p < 0 || p > 1) return null; return new Point(p * mx + a1x, p * my + a1y); } function projPtOnLine(pt, lineA, lineB) { var dir = new Point(); Point.sub(dir, lineB, lineA); dir.normalize(); var dir2 = new Point(); Point.sub(dir2, pt, lineA); return dir2.dot(dir); } function addToPoly(poly, pt) { var last = poly[poly.length - 1]; if (last && last[0] === pt[0] && last[1] === pt[1]) return; poly.push(pt); } function splitPolygonByLine(points, lineA, lineB) { var len = points.length; var intersections = []; for (var i = 0; i < len; i++) { var p0 = points[i]; var p1 = points[(i + 1) % len]; var intersectionPt = lineLineIntersect(p0[0], p0[1], p1[0], p1[1], lineA.x, lineA.y, lineB.x, lineB.y); if (intersectionPt) intersections.push({ projPt: projPtOnLine(intersectionPt, lineA, lineB), pt: intersectionPt, idx: i }); } if (intersections.length < 2) return [{ points }, { points }]; intersections.sort(function(a, b) { return a.projPt - b.projPt; }); var splitPt0 = intersections[0]; var splitPt1 = intersections[intersections.length - 1]; if (splitPt1.idx < splitPt0.idx) { var tmp = splitPt0; splitPt0 = splitPt1; splitPt1 = tmp; } var splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y]; var splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y]; var newPolyA = [splitPt0Arr]; var newPolyB = [splitPt1Arr]; for (var i = splitPt0.idx + 1; i <= splitPt1.idx; i++) addToPoly(newPolyA, points[i].slice()); addToPoly(newPolyA, splitPt1Arr); addToPoly(newPolyA, splitPt0Arr); for (var i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) addToPoly(newPolyB, points[i % len].slice()); addToPoly(newPolyB, splitPt0Arr); addToPoly(newPolyB, splitPt1Arr); return [{ points: newPolyA }, { points: newPolyB }]; } function binaryDividePolygon(polygonShape) { var points = polygonShape.points; var min = []; var max = []; fromPoints(points, min, max); var boundingRect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); var width = boundingRect.width; var height = boundingRect.height; var x = boundingRect.x; var y = boundingRect.y; var pt0 = new Point(); var pt1 = new Point(); if (width > height) { pt0.x = pt1.x = x + width / 2; pt0.y = y; pt1.y = y + height; } else { pt0.y = pt1.y = y + height / 2; pt0.x = x; pt1.x = x + width; } return splitPolygonByLine(points, pt0, pt1); } function binaryDivideRecursive(divider, shape, count, out) { if (count === 1) out.push(shape); else { var mid = Math.floor(count / 2); var sub = divider(shape); binaryDivideRecursive(divider, sub[0], mid, out); binaryDivideRecursive(divider, sub[1], count - mid, out); } return out; } function clone(path, count) { var paths = []; for (var i = 0; i < count; i++) paths.push(clonePath(path)); return paths; } function copyPathProps(source, target) { target.setStyle(source.style); target.z = source.z; target.z2 = source.z2; target.zlevel = source.zlevel; } function polygonConvert(points) { var out = []; for (var i = 0; i < points.length;) out.push([points[i++], points[i++]]); return out; } function split(path, count) { var outShapes = []; var shape = path.shape; var OutShapeCtor; switch (path.type) { case "rect": divideRect(shape, count, outShapes); OutShapeCtor = Rect$2; break; case "sector": divideSector(shape, count, outShapes); OutShapeCtor = Sector; break; case "circle": divideSector({ r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2, cx: shape.cx, cy: shape.cy }, count, outShapes); OutShapeCtor = Sector; break; default: var m = path.getComputedTransform(); var scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1; var polygons = map$1(pathToPolygons(path.getUpdatedPathProxy(), scale), function(poly) { return polygonConvert(poly); }); var polygonCount = polygons.length; if (polygonCount === 0) binaryDivideRecursive(binaryDividePolygon, { points: polygons[0] }, count, outShapes); else if (polygonCount === count) for (var i = 0; i < polygonCount; i++) outShapes.push({ points: polygons[i] }); else { var totalArea_1 = 0; var items = map$1(polygons, function(poly) { var min = []; var max = []; fromPoints(poly, min, max); var area = (max[1] - min[1]) * (max[0] - min[0]); totalArea_1 += area; return { poly, area }; }); items.sort(function(a, b) { return b.area - a.area; }); var left = count; for (var i = 0; i < polygonCount; i++) { var item = items[i]; if (left <= 0) break; var selfCount = i === polygonCount - 1 ? left : Math.ceil(item.area / totalArea_1 * count); if (selfCount < 0) continue; binaryDivideRecursive(binaryDividePolygon, { points: item.poly }, selfCount, outShapes); left -= selfCount; } } OutShapeCtor = Polygon; } if (!OutShapeCtor) return clone(path, count); var out = []; for (var i = 0; i < outShapes.length; i++) { var subPath = new OutShapeCtor(); subPath.setShape(outShapes[i]); copyPathProps(path, subPath); out.push(subPath); } return out; } //#endregion //#region node_modules/zrender/lib/tool/morphPath.js function alignSubpath(subpath1, subpath2) { var len1 = subpath1.length; var len2 = subpath2.length; if (len1 === len2) return [subpath1, subpath2]; var tmpSegX = []; var tmpSegY = []; var shorterPath = len1 < len2 ? subpath1 : subpath2; var shorterLen = Math.min(len1, len2); var diff = Math.abs(len2 - len1) / 6; var shorterBezierCount = (shorterLen - 2) / 6; var eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1; var newSubpath = [shorterPath[0], shorterPath[1]]; var remained = diff; for (var i = 2; i < shorterLen;) { var x0 = shorterPath[i - 2]; var y0 = shorterPath[i - 1]; var x1 = shorterPath[i++]; var y1 = shorterPath[i++]; var x2 = shorterPath[i++]; var y2 = shorterPath[i++]; var x3 = shorterPath[i++]; var y3 = shorterPath[i++]; if (remained <= 0) { newSubpath.push(x1, y1, x2, y2, x3, y3); continue; } var actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1; for (var k = 1; k <= actualSubDivCount; k++) { var p = k / actualSubDivCount; cubicSubdivide(x0, x1, x2, x3, p, tmpSegX); cubicSubdivide(y0, y1, y2, y3, p, tmpSegY); x0 = tmpSegX[3]; y0 = tmpSegY[3]; newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0); x1 = tmpSegX[5]; y1 = tmpSegY[5]; x2 = tmpSegX[6]; y2 = tmpSegY[6]; } remained -= actualSubDivCount - 1; } return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath]; } function createSubpath(lastSubpathSubpath, otherSubpath) { var len = lastSubpathSubpath.length; var lastX = lastSubpathSubpath[len - 2]; var lastY = lastSubpathSubpath[len - 1]; var newSubpath = []; for (var i = 0; i < otherSubpath.length;) { newSubpath[i++] = lastX; newSubpath[i++] = lastY; } return newSubpath; } function alignBezierCurves(array1, array2) { var _a; var lastSubpath1; var lastSubpath2; var newArray1 = []; var newArray2 = []; for (var i = 0; i < Math.max(array1.length, array2.length); i++) { var subpath1 = array1[i]; var subpath2 = array2[i]; var newSubpath1 = void 0; var newSubpath2 = void 0; if (!subpath1) { newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2); newSubpath2 = subpath2; } else if (!subpath2) { newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1); newSubpath1 = subpath1; } else { _a = alignSubpath(subpath1, subpath2), newSubpath1 = _a[0], newSubpath2 = _a[1]; lastSubpath1 = newSubpath1; lastSubpath2 = newSubpath2; } newArray1.push(newSubpath1); newArray2.push(newSubpath2); } return [newArray1, newArray2]; } function centroid(array) { var signedArea = 0; var cx = 0; var cy = 0; var len = array.length; for (var i = 0, j = len - 2; i < len; j = i, i += 2) { var x0 = array[j]; var y0 = array[j + 1]; var x1 = array[i]; var y1 = array[i + 1]; var a = x0 * y1 - x1 * y0; signedArea += a; cx += (x0 + x1) * a; cy += (y0 + y1) * a; } if (signedArea === 0) return [array[0] || 0, array[1] || 0]; return [ cx / signedArea / 3, cy / signedArea / 3, signedArea ]; } function findBestRingOffset(fromSubBeziers, toSubBeziers, fromCp, toCp) { var bezierCount = (fromSubBeziers.length - 2) / 6; var bestScore = Infinity; var bestOffset = 0; var len = fromSubBeziers.length; var len2 = len - 2; for (var offset = 0; offset < bezierCount; offset++) { var cursorOffset = offset * 6; var score = 0; for (var k = 0; k < len; k += 2) { var idx = k === 0 ? cursorOffset : (cursorOffset + k - 2) % len2 + 2; var x0 = fromSubBeziers[idx] - fromCp[0]; var y0 = fromSubBeziers[idx + 1] - fromCp[1]; var x1 = toSubBeziers[k] - toCp[0]; var y1 = toSubBeziers[k + 1] - toCp[1]; var dx = x1 - x0; var dy = y1 - y0; score += dx * dx + dy * dy; } if (score < bestScore) { bestScore = score; bestOffset = offset; } } return bestOffset; } function reverse(array) { var newArr = []; var len = array.length; for (var i = 0; i < len; i += 2) { newArr[i] = array[len - i - 2]; newArr[i + 1] = array[len - i - 1]; } return newArr; } function findBestMorphingRotation(fromArr, toArr, searchAngleIteration, searchAngleRange) { var result = []; var fromNeedsReverse; for (var i = 0; i < fromArr.length; i++) { var fromSubpathBezier = fromArr[i]; var toSubpathBezier = toArr[i]; var fromCp = centroid(fromSubpathBezier); var toCp = centroid(toSubpathBezier); if (fromNeedsReverse == null) fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0; var newFromSubpathBezier = []; var newToSubpathBezier = []; var bestAngle = 0; var bestScore = Infinity; var tmpArr = []; var len = fromSubpathBezier.length; if (fromNeedsReverse) fromSubpathBezier = reverse(fromSubpathBezier); var offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6; var len2 = len - 2; for (var k = 0; k < len2; k += 2) { var idx = (offset + k) % len2 + 2; newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0]; newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1]; } newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0]; newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1]; if (searchAngleIteration > 0) { var step = searchAngleRange / searchAngleIteration; for (var angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) { var sa = Math.sin(angle); var ca = Math.cos(angle); var score = 0; for (var k = 0; k < fromSubpathBezier.length; k += 2) { var x0 = newFromSubpathBezier[k]; var y0 = newFromSubpathBezier[k + 1]; var x1 = toSubpathBezier[k] - toCp[0]; var y1 = toSubpathBezier[k + 1] - toCp[1]; var newX1 = x1 * ca - y1 * sa; var newY1 = x1 * sa + y1 * ca; tmpArr[k] = newX1; tmpArr[k + 1] = newY1; var dx = newX1 - x0; var dy = newY1 - y0; score += dx * dx + dy * dy; } if (score < bestScore) { bestScore = score; bestAngle = angle; for (var m = 0; m < tmpArr.length; m++) newToSubpathBezier[m] = tmpArr[m]; } } } else for (var i_1 = 0; i_1 < len; i_1 += 2) { newToSubpathBezier[i_1] = toSubpathBezier[i_1] - toCp[0]; newToSubpathBezier[i_1 + 1] = toSubpathBezier[i_1 + 1] - toCp[1]; } result.push({ from: newFromSubpathBezier, to: newToSubpathBezier, fromCp, toCp, rotation: -bestAngle }); } return result; } function isCombineMorphing(path) { return path.__isCombineMorphing; } var SAVED_METHOD_PREFIX = "__mOriginal_"; function saveAndModifyMethod(obj, methodName, modifiers) { var savedMethodName = SAVED_METHOD_PREFIX + methodName; var originalMethod = obj[savedMethodName] || obj[methodName]; if (!obj[savedMethodName]) obj[savedMethodName] = obj[methodName]; var replace = modifiers.replace; var after = modifiers.after; var before = modifiers.before; obj[methodName] = function() { var args = arguments; var res; before && before.apply(this, args); if (replace) res = replace.apply(this, args); else res = originalMethod.apply(this, args); after && after.apply(this, args); return res; }; } function restoreMethod(obj, methodName) { var savedMethodName = SAVED_METHOD_PREFIX + methodName; if (obj[savedMethodName]) { obj[methodName] = obj[savedMethodName]; obj[savedMethodName] = null; } } function applyTransformOnBeziers(bezierCurves, mm) { for (var i = 0; i < bezierCurves.length; i++) { var subBeziers = bezierCurves[i]; for (var k = 0; k < subBeziers.length;) { var x = subBeziers[k]; var y = subBeziers[k + 1]; subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4]; subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5]; } } } function prepareMorphPath(fromPath, toPath) { var fromPathProxy = fromPath.getUpdatedPathProxy(); var toPathProxy = toPath.getUpdatedPathProxy(); var _a = alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy)), fromBezierCurves = _a[0], toBezierCurves = _a[1]; var fromPathTransform = fromPath.getComputedTransform(); var toPathTransform = toPath.getComputedTransform(); function updateIdentityTransform() { this.transform = null; } fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform); toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform); saveAndModifyMethod(toPath, "updateTransform", { replace: updateIdentityTransform }); toPath.transform = null; var morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI); var tmpArr = []; saveAndModifyMethod(toPath, "buildPath", { replace: function(path) { var t = toPath.__morphT; var onet = 1 - t; var newCp = []; for (var i = 0; i < morphingData.length; i++) { var item = morphingData[i]; var from = item.from; var to = item.to; var angle = item.rotation * t; var fromCp = item.fromCp; var toCp = item.toCp; var sa = Math.sin(angle); var ca = Math.cos(angle); lerp$1(newCp, fromCp, toCp, t); for (var m = 0; m < from.length; m += 2) { var x0_1 = from[m]; var y0_1 = from[m + 1]; var x1 = to[m]; var y1 = to[m + 1]; var x = x0_1 * onet + x1 * t; var y = y0_1 * onet + y1 * t; tmpArr[m] = x * ca - y * sa + newCp[0]; tmpArr[m + 1] = x * sa + y * ca + newCp[1]; } var x0 = tmpArr[0]; var y0 = tmpArr[1]; path.moveTo(x0, y0); for (var m = 2; m < from.length;) { var x1 = tmpArr[m++]; var y1 = tmpArr[m++]; var x2 = tmpArr[m++]; var y2 = tmpArr[m++]; var x3 = tmpArr[m++]; var y3 = tmpArr[m++]; if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) path.lineTo(x3, y3); else path.bezierCurveTo(x1, y1, x2, y2, x3, y3); x0 = x3; y0 = y3; } } } }); } function morphPath(fromPath, toPath, animationOpts) { if (!fromPath || !toPath) return toPath; var oldDone = animationOpts.done; var oldDuring = animationOpts.during; prepareMorphPath(fromPath, toPath); toPath.__morphT = 0; function restoreToPath() { restoreMethod(toPath, "buildPath"); restoreMethod(toPath, "updateTransform"); toPath.__morphT = -1; toPath.createPathProxy(); toPath.dirtyShape(); } toPath.animateTo({ __morphT: 1 }, defaults({ during: function(p) { toPath.dirtyShape(); oldDuring && oldDuring(p); }, done: function() { restoreToPath(); oldDone && oldDone(); } }, animationOpts)); return toPath; } function hilbert(x, y, minX, minY, maxX, maxY) { var bits = 16; x = maxX === minX ? 0 : Math.round(32767 * (x - minX) / (maxX - minX)); y = maxY === minY ? 0 : Math.round(32767 * (y - minY) / (maxY - minY)); var d = 0; var tmp; for (var s = (1 << bits) / 2; s > 0; s /= 2) { var rx = 0; var ry = 0; if ((x & s) > 0) rx = 1; if ((y & s) > 0) ry = 1; d += s * s * (3 * rx ^ ry); if (ry === 0) { if (rx === 1) { x = s - 1 - x; y = s - 1 - y; } tmp = x; x = y; y = tmp; } } return d; } function sortPaths(pathList) { var xMin = Infinity; var yMin = Infinity; var xMax = -Infinity; var yMax = -Infinity; return map$1(map$1(pathList, function(path) { var rect = path.getBoundingRect(); var m = path.getComputedTransform(); var x = rect.x + rect.width / 2 + (m ? m[4] : 0); var y = rect.y + rect.height / 2 + (m ? m[5] : 0); xMin = Math.min(x, xMin); yMin = Math.min(y, yMin); xMax = Math.max(x, xMax); yMax = Math.max(y, yMax); return [x, y]; }), function(cp, idx) { return { cp, z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax), path: pathList[idx] }; }).sort(function(a, b) { return a.z - b.z; }).map(function(item) { return item.path; }); } function defaultDividePath(param) { return split(param.path, param.count); } function createEmptyReturn() { return { fromIndividuals: [], toIndividuals: [], count: 0 }; } function combineMorph(fromList, toPath, animationOpts) { var fromPathList = []; function addFromPath(fromList) { for (var i = 0; i < fromList.length; i++) { var from = fromList[i]; if (isCombineMorphing(from)) addFromPath(from.childrenRef()); else if (from instanceof Path) fromPathList.push(from); } } addFromPath(fromList); var separateCount = fromPathList.length; if (!separateCount) return createEmptyReturn(); var toSubPathList = (animationOpts.dividePath || defaultDividePath)({ path: toPath, count: separateCount }); if (toSubPathList.length !== separateCount) { console.error("Invalid morphing: unmatched splitted path"); return createEmptyReturn(); } fromPathList = sortPaths(fromPathList); toSubPathList = sortPaths(toSubPathList); var oldDone = animationOpts.done; var oldDuring = animationOpts.during; var individualDelay = animationOpts.individualDelay; var identityTransform = new Transformable(); for (var i = 0; i < separateCount; i++) { var from = fromPathList[i]; var to = toSubPathList[i]; to.parent = toPath; to.copyTransform(identityTransform); if (!individualDelay) prepareMorphPath(from, to); } toPath.__isCombineMorphing = true; toPath.childrenRef = function() { return toSubPathList; }; function addToSubPathListToZr(zr) { for (var i = 0; i < toSubPathList.length; i++) toSubPathList[i].addSelfToZr(zr); } saveAndModifyMethod(toPath, "addSelfToZr", { after: function(zr) { addToSubPathListToZr(zr); } }); saveAndModifyMethod(toPath, "removeSelfFromZr", { after: function(zr) { for (var i = 0; i < toSubPathList.length; i++) toSubPathList[i].removeSelfFromZr(zr); } }); function restoreToPath() { toPath.__isCombineMorphing = false; toPath.__morphT = -1; toPath.childrenRef = null; restoreMethod(toPath, "addSelfToZr"); restoreMethod(toPath, "removeSelfFromZr"); } var toLen = toSubPathList.length; if (individualDelay) { var animating_1 = toLen; var eachDone = function() { animating_1--; if (animating_1 === 0) { restoreToPath(); oldDone && oldDone(); } }; for (var i = 0; i < toLen; i++) { var indivdualAnimationOpts = individualDelay ? defaults({ delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]), done: eachDone }, animationOpts) : animationOpts; morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts); } } else { toPath.__morphT = 0; toPath.animateTo({ __morphT: 1 }, defaults({ during: function(p) { for (var i = 0; i < toLen; i++) { var child = toSubPathList[i]; child.__morphT = toPath.__morphT; child.dirtyShape(); } oldDuring && oldDuring(p); }, done: function() { restoreToPath(); for (var i = 0; i < fromList.length; i++) restoreMethod(fromList[i], "updateTransform"); oldDone && oldDone(); } }, animationOpts)); } if (toPath.__zr) addToSubPathListToZr(toPath.__zr); return { fromIndividuals: fromPathList, toIndividuals: toSubPathList, count: toLen }; } function separateMorph(fromPath, toPathList, animationOpts) { var toLen = toPathList.length; var fromPathList = []; var dividePath = animationOpts.dividePath || defaultDividePath; function addFromPath(fromList) { for (var i = 0; i < fromList.length; i++) { var from = fromList[i]; if (isCombineMorphing(from)) addFromPath(from.childrenRef()); else if (from instanceof Path) fromPathList.push(from); } } if (isCombineMorphing(fromPath)) { addFromPath(fromPath.childrenRef()); var fromLen = fromPathList.length; if (fromLen < toLen) { var k = 0; for (var i = fromLen; i < toLen; i++) fromPathList.push(clonePath(fromPathList[k++ % fromLen])); } fromPathList.length = toLen; } else { fromPathList = dividePath({ path: fromPath, count: toLen }); var fromPathTransform = fromPath.getComputedTransform(); for (var i = 0; i < fromPathList.length; i++) fromPathList[i].setLocalTransform(fromPathTransform); if (fromPathList.length !== toLen) { console.error("Invalid morphing: unmatched splitted path"); return createEmptyReturn(); } } fromPathList = sortPaths(fromPathList); toPathList = sortPaths(toPathList); var individualDelay = animationOpts.individualDelay; for (var i = 0; i < toLen; i++) { var indivdualAnimationOpts = individualDelay ? defaults({ delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i]) }, animationOpts) : animationOpts; morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts); } return { fromIndividuals: fromPathList, toIndividuals: toPathList, count: toPathList.length }; } //#endregion //#region node_modules/echarts/lib/animation/morphTransitionHelper.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function isMultiple(elements) { return isArray$1(elements[0]); } function prepareMorphBatches(one, many) { var batches = []; var batchCount = one.length; for (var i = 0; i < batchCount; i++) batches.push({ one: one[i], many: [] }); for (var i = 0; i < many.length; i++) { var len = many[i].length; var k = void 0; for (k = 0; k < len; k++) batches[k % batchCount].many.push(many[i][k]); } var off = 0; for (var i = batchCount - 1; i >= 0; i--) if (!batches[i].many.length) { var moveFrom = batches[off].many; if (moveFrom.length <= 1) { if (off) off = 0; else return batches; } var len = moveFrom.length; var mid = Math.ceil(len / 2); batches[i].many = moveFrom.slice(mid, len); batches[off].many = moveFrom.slice(0, mid); off++; } return batches; } var pathDividers = { clone: function(params) { var ret = []; var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count); for (var i = 0; i < params.count; i++) { var cloned = clonePath(params.path); cloned.setStyle("opacity", approxOpacity); ret.push(cloned); } return ret; }, split: null }; function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) { if (!from.length || !to.length) return; var updateAnimationCfg = getAnimationConfig("update", seriesModel, dataIndex); if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) return; var animationDelay = seriesModel.getModel("universalTransition").get("delay"); var animationCfg = extend({ setToFinal: true }, updateAnimationCfg); var many; var one; if (isMultiple(from)) { many = from; one = to; } if (isMultiple(to)) { many = to; one = from; } function morphOneBatch(batch, fromIsMany, animateIndex, animateCount, forceManyOne) { var batchMany = batch.many; var batchOne = batch.one; if (batchMany.length === 1 && !forceManyOne) { var batchFrom = fromIsMany ? batchMany[0] : batchOne; var batchTo = fromIsMany ? batchOne : batchMany[0]; if (isCombineMorphing(batchFrom)) morphOneBatch({ many: [batchFrom], one: batchTo }, true, animateIndex, animateCount, true); else { var individualAnimationCfg = animationDelay ? defaults({ delay: animationDelay(animateIndex, animateCount) }, animationCfg) : animationCfg; morphPath(batchFrom, batchTo, individualAnimationCfg); animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg); } } else { var separateAnimationCfg = defaults({ dividePath: pathDividers[divideShape], individualDelay: animationDelay && function(idx, count, fromPath, toPath) { return animationDelay(idx + animateIndex, animateCount); } }, animationCfg); var _a = fromIsMany ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg), fromIndividuals = _a.fromIndividuals, toIndividuals = _a.toIndividuals; var count = fromIndividuals.length; for (var k = 0; k < count; k++) { var individualAnimationCfg = animationDelay ? defaults({ delay: animationDelay(k, count) }, animationCfg) : animationCfg; animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany ? batchMany[k] : batch.one, fromIsMany ? batch.one : batchMany[k], individualAnimationCfg); } } } var fromIsMany = many ? many === from : from.length > to.length; var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]); var animateCount = 0; for (var i = 0; i < morphBatches.length; i++) animateCount += morphBatches[i].many.length; var animateIndex = 0; for (var i = 0; i < morphBatches.length; i++) { morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount); animateIndex += morphBatches[i].many.length; } } function getPathList(elements) { if (!elements) return []; if (isArray$1(elements)) { var pathList_1 = []; for (var i = 0; i < elements.length; i++) pathList_1.push(getPathList(elements[i])); return pathList_1; } var pathList = []; elements.traverse(function(el) { if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) pathList.push(el); }); return pathList; } //#endregion //#region node_modules/echarts/lib/animation/universalTransition.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var DATA_COUNT_THRESHOLD = 1e4; var TRANSITION_NONE = 0; var TRANSITION_P2C = 1; var TRANSITION_C2P = 2; var getUniversalTransitionGlobalStore = makeInner(); function getDimension(data, visualDimension) { var dimensions = data.dimensions; for (var i = 0; i < dimensions.length; i++) { var dimInfo = data.getDimensionInfo(dimensions[i]); if (dimInfo && dimInfo.otherDims[visualDimension] === 0) return dimensions[i]; } } function getValueByDimension(data, dataIndex, dimension) { var dimInfo = data.getDimensionInfo(dimension); var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta; if (dimInfo) { var value = data.get(dimInfo.name, dataIndex); if (dimOrdinalMeta) return dimOrdinalMeta.categories[value] || value + ""; return value + ""; } } function getGroupId(data, dataIndex, dataGroupId, isChild) { var groupIdDim = getDimension(data, isChild ? "itemChildGroupId" : "itemGroupId"); if (groupIdDim) return getValueByDimension(data, dataIndex, groupIdDim); var rawDataItem = data.getRawDataItem(dataIndex); var property = isChild ? "childGroupId" : "groupId"; if (rawDataItem && rawDataItem[property]) return rawDataItem[property] + ""; if (isChild) return; return dataGroupId || data.getId(dataIndex); } function flattenDataDiffItems(list) { var items = []; each$12(list, function(seriesInfo) { var data = seriesInfo.data; var dataGroupId = seriesInfo.dataGroupId; if (data.count() > DATA_COUNT_THRESHOLD) { warn("Universal transition is disabled on large data > 10k."); return; } var indices = data.getIndices(); for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) items.push({ data, groupId: getGroupId(data, dataIndex, dataGroupId, false), childGroupId: getGroupId(data, dataIndex, dataGroupId, true), divide: seriesInfo.divide, dataIndex }); }); return items; } function fadeInElement(newEl, newSeries, newIndex) { newEl.traverse(function(el) { if (el instanceof Path) initProps(el, { style: { opacity: 0 } }, newSeries, { dataIndex: newIndex, isFrom: true }); }); } function removeEl(el) { if (el.parent) { var computedTransform = el.getComputedTransform(); el.setLocalTransform(computedTransform); el.parent.remove(el); } } function stopAnimation(el) { el.stopAnimation(); if (el.isGroup) el.traverse(function(child) { child.stopAnimation(); }); } function animateElementStyles(el, dataIndex, seriesModel) { var animationConfig = getAnimationConfig("update", seriesModel, dataIndex); animationConfig && el.traverse(function(child) { if (child instanceof Displayable) { var oldStyle = getOldStyle(child); if (oldStyle) child.animateFrom({ style: oldStyle }, animationConfig); } }); } function isAllIdSame(oldDiffItems, newDiffItems) { var len = oldDiffItems.length; if (len !== newDiffItems.length) return false; for (var i = 0; i < len; i++) { var oldItem = oldDiffItems[i]; var newItem = newDiffItems[i]; if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) return false; } return true; } function transitionBetween(oldList, newList, api) { var oldDiffItems = flattenDataDiffItems(oldList); var newDiffItems = flattenDataDiffItems(newList); function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) { if (rawFrom || from) to.animateFrom({ style: rawFrom && rawFrom !== from ? extend(extend({}, rawFrom.style), from.style) : from.style }, animationCfg); } var hasMorphAnimation = false; /** * With groupId and childGroupId, we can build parent-child relationships between dataItems. * However, we should mind the parent-child "direction" between old and new options. * * For example, suppose we have two dataItems from two series.data: * * dataA: [ dataB: [ * { { * value: 5, value: 3, * groupId: 'creatures', groupId: 'animals', * childGroupId: 'animals' childGroupId: 'dogs' * }, }, * ... ... * ] ] * * where dataA is belong to optionA and dataB is belong to optionB. * * When we `setOption(optionB)` from optionA, we choose childGroupId of dataItemA and groupId of * dataItemB as keys so the two keys are matched (both are 'animals'), then universalTransition * will work. This derection is "parent -> child". * * If we `setOption(optionA)` from optionB, we also choose groupId of dataItemB and childGroupId * of dataItemA as keys and universalTransition will work. This derection is "child -> parent". * * If there is no childGroupId specified, which means no multiLevelDrillDown/Up is needed and no * parent-child relationship exists. This direction is "none". * * So we need to know whether to use groupId or childGroupId as the key when we call the keyGetter * functions. Thus, we need to decide the direction first. * * The rule is: * * if (all childGroupIds in oldDiffItems and all groupIds in newDiffItems have common value) { * direction = 'parent -> child'; * } else if (all groupIds in oldDiffItems and all childGroupIds in newDiffItems have common value) { * direction = 'child -> parent'; * } else { * direction = 'none'; * } */ var direction = TRANSITION_NONE; var oldGroupIds = createHashMap(); var oldChildGroupIds = createHashMap(); each$12(oldDiffItems, function(item) { item.groupId && oldGroupIds.set(item.groupId, true); item.childGroupId && oldChildGroupIds.set(item.childGroupId, true); }); for (var i = 0; i < newDiffItems.length; i++) { var newGroupId = newDiffItems[i].groupId; if (oldChildGroupIds.get(newGroupId)) { direction = TRANSITION_P2C; break; } var newChildGroupId = newDiffItems[i].childGroupId; if (newChildGroupId && oldGroupIds.get(newChildGroupId)) { direction = TRANSITION_C2P; break; } } function createKeyGetter(isOld, onlyGetId) { return function(diffItem) { var data = diffItem.data; var dataIndex = diffItem.dataIndex; if (onlyGetId) return data.getId(dataIndex); if (isOld) return direction === TRANSITION_P2C ? diffItem.childGroupId : diffItem.groupId; else return direction === TRANSITION_C2P ? diffItem.childGroupId : diffItem.groupId; }; } var useId = isAllIdSame(oldDiffItems, newDiffItems); var isElementStillInChart = {}; if (!useId) for (var i = 0; i < newDiffItems.length; i++) { var newItem = newDiffItems[i]; var el = newItem.data.getItemGraphicEl(newItem.dataIndex); if (el) isElementStillInChart[el.id] = true; } function updateOneToOne(newIndex, oldIndex) { var oldItem = oldDiffItems[oldIndex]; var newItem = newDiffItems[newIndex]; var newSeries = newItem.data.hostModel; var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex); if (oldEl === newEl) { newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries); return; } if (oldEl && isElementStillInChart[oldEl.id]) return; if (newEl) { stopAnimation(newEl); if (oldEl) { stopAnimation(oldEl); removeEl(oldEl); hasMorphAnimation = true; applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps); } else fadeInElement(newEl, newSeries, newIndex); } } new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, "multiple").update(updateOneToOne).updateManyToOne(function(newIndex, oldIndices) { var newItem = newDiffItems[newIndex]; var newData = newItem.data; var newSeries = newData.hostModel; var newEl = newData.getItemGraphicEl(newItem.dataIndex); var oldElsList = filter(map$1(oldIndices, function(idx) { return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex); }), function(oldEl) { return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id]; }); if (newEl) { stopAnimation(newEl); if (oldElsList.length) { each$12(oldElsList, function(oldEl) { stopAnimation(oldEl); removeEl(oldEl); }); hasMorphAnimation = true; applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps); } else fadeInElement(newEl, newSeries, newItem.dataIndex); } }).updateOneToMany(function(newIndices, oldIndex) { var oldItem = oldDiffItems[oldIndex]; var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); if (oldEl && isElementStillInChart[oldEl.id]) return; var newElsList = filter(map$1(newIndices, function(idx) { return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex); }), function(el) { return el && el !== oldEl; }); var newSeris = newDiffItems[newIndices[0]].data.hostModel; if (newElsList.length) { each$12(newElsList, function(newEl) { return stopAnimation(newEl); }); if (oldEl) { stopAnimation(oldEl); removeEl(oldEl); hasMorphAnimation = true; applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide, newSeris, newIndices[0], updateMorphingPathProps); } else each$12(newElsList, function(newEl) { return fadeInElement(newEl, newSeris, newIndices[0]); }); } }).updateManyToMany(function(newIndices, oldIndices) { new DataDiffer(oldIndices, newIndices, function(rawIdx) { return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex); }, function(rawIdx) { return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex); }).update(function(newIndex, oldIndex) { updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]); }).execute(); }).execute(); if (hasMorphAnimation) each$12(newList, function(_a) { var seriesModel = _a.data.hostModel; var view = seriesModel && api.getViewOfSeriesModel(seriesModel); var animationCfg = getAnimationConfig("update", seriesModel, 0); if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) view.group.traverse(function(el) { if (el instanceof Path && !el.animators.length) el.animateFrom({ style: { opacity: 0 } }, animationCfg); }); }); } function getSeriesTransitionKey(series) { var seriesKey = series.getModel("universalTransition").get("seriesKey"); if (!seriesKey) return series.id; return seriesKey; } function convertArraySeriesKeyToString(seriesKey) { if (isArray$1(seriesKey)) return seriesKey.sort().join(","); return seriesKey; } function getDivideShapeFromData(data) { if (data.hostModel) return data.hostModel.getModel("universalTransition").get("divideShape"); } function findTransitionSeriesBatches(globalStore, params) { var updateBatches = createHashMap(); var oldDataMap = createHashMap(); var oldDataMapForSplit = createHashMap(); each$12(globalStore.oldSeries, function(series, idx) { var oldDataGroupId = globalStore.oldDataGroupIds[idx]; var oldData = globalStore.oldData[idx]; var transitionKey = getSeriesTransitionKey(series); var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); oldDataMap.set(transitionKeyStr, { dataGroupId: oldDataGroupId, data: oldData }); if (isArray$1(transitionKey)) each$12(transitionKey, function(key) { oldDataMapForSplit.set(key, { key: transitionKeyStr, dataGroupId: oldDataGroupId, data: oldData }); }); }); function checkTransitionSeriesKeyDuplicated(transitionKeyStr) { if (updateBatches.get(transitionKeyStr)) warn("Duplicated seriesKey in universalTransition " + transitionKeyStr); } each$12(params.updatedSeries, function(series) { if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) { var newDataGroupId = series.get("dataGroupId"); var newData = series.getData(); var transitionKey = getSeriesTransitionKey(series); var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); var oldData = oldDataMap.get(transitionKeyStr); if (oldData) { checkTransitionSeriesKeyDuplicated(transitionKeyStr); updateBatches.set(transitionKeyStr, { oldSeries: [{ dataGroupId: oldData.dataGroupId, divide: getDivideShapeFromData(oldData.data), data: oldData.data }], newSeries: [{ dataGroupId: newDataGroupId, divide: getDivideShapeFromData(newData), data: newData }] }); } else if (isArray$1(transitionKey)) { checkTransitionSeriesKeyDuplicated(transitionKeyStr); var oldSeries_1 = []; each$12(transitionKey, function(key) { var oldData = oldDataMap.get(key); if (oldData.data) oldSeries_1.push({ dataGroupId: oldData.dataGroupId, divide: getDivideShapeFromData(oldData.data), data: oldData.data }); }); if (oldSeries_1.length) updateBatches.set(transitionKeyStr, { oldSeries: oldSeries_1, newSeries: [{ dataGroupId: newDataGroupId, data: newData, divide: getDivideShapeFromData(newData) }] }); } else { var oldData_1 = oldDataMapForSplit.get(transitionKey); if (oldData_1) { var batch = updateBatches.get(oldData_1.key); if (!batch) { batch = { oldSeries: [{ dataGroupId: oldData_1.dataGroupId, data: oldData_1.data, divide: getDivideShapeFromData(oldData_1.data) }], newSeries: [] }; updateBatches.set(oldData_1.key, batch); } batch.newSeries.push({ dataGroupId: newDataGroupId, data: newData, divide: getDivideShapeFromData(newData) }); } } } }); return updateBatches; } function querySeries(series, finder) { for (var i = 0; i < series.length; i++) if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) return i; } function transitionSeriesFromOpt(transitionOpt, globalStore, params, api) { var from = []; var to = []; each$12(normalizeToArray(transitionOpt.from), function(finder) { var idx = querySeries(globalStore.oldSeries, finder); if (idx >= 0) from.push({ dataGroupId: globalStore.oldDataGroupIds[idx], data: globalStore.oldData[idx], divide: getDivideShapeFromData(globalStore.oldData[idx]), groupIdDim: finder.dimension }); }); each$12(normalizeToArray(transitionOpt.to), function(finder) { var idx = querySeries(params.updatedSeries, finder); if (idx >= 0) { var data = params.updatedSeries[idx].getData(); to.push({ dataGroupId: globalStore.oldDataGroupIds[idx], data, divide: getDivideShapeFromData(data), groupIdDim: finder.dimension }); } }); if (from.length > 0 && to.length > 0) transitionBetween(from, to, api); } function installUniversalTransition(registers) { registers.registerUpdateLifecycle("series:beforeupdate", function(ecMOdel, api, params) { each$12(normalizeToArray(params.seriesTransition), function(transOpt) { each$12(normalizeToArray(transOpt.to), function(finder) { var series = params.updatedSeries; for (var i = 0; i < series.length; i++) if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true; }); }); }); registers.registerUpdateLifecycle("series:transition", function(ecModel, api, params) { var globalStore = getUniversalTransitionGlobalStore(api); if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) { var transitionOpt = params.seriesTransition; if (transitionOpt) each$12(normalizeToArray(transitionOpt), function(opt) { transitionSeriesFromOpt(opt, globalStore, params, api); }); else { var updateBatches_1 = findTransitionSeriesBatches(globalStore, params); each$12(updateBatches_1.keys(), function(key) { var batch = updateBatches_1.get(key); transitionBetween(batch.oldSeries, batch.newSeries, api); }); } each$12(params.updatedSeries, function(series) { if (series["__universalTransitionEnabled"]) series[SERIES_UNIVERSAL_TRANSITION_PROP] = false; }); } var allSeries = ecModel.getSeries(); var savedSeries = globalStore.oldSeries = []; var savedDataGroupIds = globalStore.oldDataGroupIds = []; var savedData = globalStore.oldData = []; for (var i = 0; i < allSeries.length; i++) { var data = allSeries[i].getData(); if (data.count() < DATA_COUNT_THRESHOLD) { savedSeries.push(allSeries[i]); savedDataGroupIds.push(allSeries[i].get("dataGroupId")); savedData.push(data); } } }); } //#endregion //#region node_modules/echarts/lib/scale/breakImpl.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ var BreakScaleMapperImpl = function() { function BreakScaleMapperImpl(breakParsed, initialExtent) { decorateScaleMapper(this, BreakScaleMapperImpl.decoratedMethods); this._outOfBrk = initLinearScaleMapper(null, initialExtent); var mapper = this._linear = initLinearScaleMapper(null, initialExtent); enableScaleMapperFreeze(this, mapper); this.breaks = breakParsed && breakParsed.breaks || []; } BreakScaleMapperImpl.prototype.hasBreaks = function() { return !!this.breaks.length; }; /** * When iteratively generating ticks by nice interval, currently the `interval`, which is * calculated by break-elapsed extent span, is probably very small comparing to the original * extent, leading to a large number of iteration and tick generation, even over `safeLimit`. * Thus stepping over breaks is necessary in that loop. * * "Nice" should be ensured on ticks when step over the breaks. Thus this method returns * a integer multiple of the "nice tick interval". * * This method does little work; it is just for unifying and restricting the behavior. */ BreakScaleMapperImpl.prototype.calcNiceTickMultiple = function(tickVal, estimateNiceMultiple) { for (var idx = 0; idx < this.breaks.length; idx++) { var brk = this.breaks[idx]; if (brk.vmin < tickVal && tickVal < brk.vmax) { var multiple = estimateNiceMultiple(tickVal, brk.vmax); assert(multiple >= 0 && mathRound$1(multiple) === multiple); return multiple; } } return 0; }; BreakScaleMapperImpl.decoratedMethods = { needTransform: function() { return !this.breaks.length; }, getExtent: function() { return this._outOfBrk.getExtent(); }, getExtentUnsafe: function(kind, depth) { return depth == null || depth === 2 ? this._outOfBrk.getExtentUnsafe(kind, null) : this._linear.getExtentUnsafe(kind, null); }, setExtent: function(start, end) { this.setExtent2(0, start, end); }, setExtent2: function(kind, start, end) { if (isValidBoundsForExtent(start, end)) { if (kind === 0) updateAxisBreakGapReal(this, [start, end]); this._outOfBrk.setExtent2(kind, start, end); this._linear.setExtent2(kind, this.transformIn(start, null), this.transformIn(end, null)); } }, normalize: function(val) { return this._linear.normalize(this.transformIn(val, null)); }, scale: function(val) { return this.transformOut(this._linear.scale(val), null); }, contain: function(val) { return this._outOfBrk.contain(val); }, /** * a.k.a., "elapse" * Suppose: * AXIS_BREAK_LAST_BREAK_END_BASE: 0 * AXIS_BREAK_ELAPSED_BASE: 0 * breaks: [ * {start: -400, end: -300, gap: 27}, * {start: -100, end: 100, gap: 10}, * {start: 200, end: 400, gap: 300}, * ] * The mapping will be: * | | * 400 + -> + 237 * | | | | (gap: 300) * 200 + -> + -63 * | | * 100 + -> + -163 * | | | | (gap: 10) * -100 + -> + -173 * | | * -300 + -> + -373 * | | | | (gap: 27) * -400 + -> + -400 * | | * origianl elapsed * * Note: * `transformIn` and `transformOut` has nothing to do with "scale extent" - out of extent is supported. */ transformIn: function(val, opt) { if (opt && opt.depth === 2) return val; var elapsedVal = AXIS_BREAK_ELAPSED_BASE; var lastBreakEnd = AXIS_BREAK_LAST_BREAK_END_BASE; var stillOver = true; for (var i = 0; i < this.breaks.length; i++) { var brk = this.breaks[i]; if (val <= brk.vmax) { if (val > brk.vmin) elapsedVal += brk.vmin - lastBreakEnd + (val - brk.vmin) / (brk.vmax - brk.vmin) * brk.gapReal; else elapsedVal += val - lastBreakEnd; lastBreakEnd = brk.vmax; stillOver = false; break; } elapsedVal += brk.vmin - lastBreakEnd + brk.gapReal; lastBreakEnd = brk.vmax; } if (stillOver) elapsedVal += val - lastBreakEnd; return elapsedVal; }, /** * @see transformIn * a.k.a., "unelapse" */ transformOut: function(elapsedVal, opt) { if (opt && opt.depth === 2) return elapsedVal; var lastElapsedEnd = AXIS_BREAK_ELAPSED_BASE; var lastBreakEnd = AXIS_BREAK_LAST_BREAK_END_BASE; var stillOver = true; var unelapsedVal = 0; for (var i = 0; i < this.breaks.length; i++) { var brk = this.breaks[i]; var elapsedStart = lastElapsedEnd + brk.vmin - lastBreakEnd; var elapsedEnd = elapsedStart + brk.gapReal; if (elapsedVal <= elapsedEnd) { if (elapsedVal > elapsedStart) unelapsedVal = brk.vmin + (elapsedVal - elapsedStart) / (elapsedEnd - elapsedStart) * (brk.vmax - brk.vmin); else unelapsedVal = lastBreakEnd + elapsedVal - lastElapsedEnd; lastBreakEnd = brk.vmax; stillOver = false; break; } lastElapsedEnd = elapsedEnd; lastBreakEnd = brk.vmax; } if (stillOver) unelapsedVal = lastBreakEnd + elapsedVal - lastElapsedEnd; return unelapsedVal; } }; return BreakScaleMapperImpl; }(); function createBreakScaleMapper(breakParsed, initialExtent) { return new BreakScaleMapperImpl(breakParsed, initialExtent); } var AXIS_BREAK_ELAPSED_BASE = 0; var AXIS_BREAK_LAST_BREAK_END_BASE = 0; /** * `gapReal` in brkMapper.breaks will be calculated. */ function updateAxisBreakGapReal(brkMapper, scaleExtent) { var gapPrctSum = 0; var fullyInExtBrksSum = { tpAbs: { span: 0, val: 0 }, tpPrct: { span: 0, val: 0 } }; var init = function() { return { has: false, span: NaN, inExtFrac: NaN, val: NaN }; }; var semiInExtBrk = { S: { tpAbs: init(), tpPrct: init() }, E: { tpAbs: init(), tpPrct: init() } }; each$12(brkMapper.breaks, function(brk) { var gapParsed = brk.gapParsed; if (gapParsed.type === "tpPrct") gapPrctSum += gapParsed.val; var clampedBrk = clampBreakByExtent(brk, scaleExtent); if (clampedBrk) { var vminClamped = clampedBrk.vmin !== brk.vmin; var vmaxClamped = clampedBrk.vmax !== brk.vmax; var clampedSpan = clampedBrk.vmax - clampedBrk.vmin; if (vminClamped && vmaxClamped) {} else if (vminClamped || vmaxClamped) { var sOrE = vminClamped ? "S" : "E"; semiInExtBrk[sOrE][gapParsed.type].has = true; semiInExtBrk[sOrE][gapParsed.type].span = clampedSpan; semiInExtBrk[sOrE][gapParsed.type].inExtFrac = clampedSpan / (brk.vmax - brk.vmin); semiInExtBrk[sOrE][gapParsed.type].val = gapParsed.val; } else { fullyInExtBrksSum[gapParsed.type].span += clampedSpan; fullyInExtBrksSum[gapParsed.type].val += gapParsed.val; } } }); var prctBrksGapRealSum = gapPrctSum * (0 + (scaleExtent[1] - scaleExtent[0]) + (fullyInExtBrksSum.tpAbs.val - fullyInExtBrksSum.tpAbs.span) + (semiInExtBrk.S.tpAbs.has ? (semiInExtBrk.S.tpAbs.val - semiInExtBrk.S.tpAbs.span) * semiInExtBrk.S.tpAbs.inExtFrac : 0) + (semiInExtBrk.E.tpAbs.has ? (semiInExtBrk.E.tpAbs.val - semiInExtBrk.E.tpAbs.span) * semiInExtBrk.E.tpAbs.inExtFrac : 0) - fullyInExtBrksSum.tpPrct.span - (semiInExtBrk.S.tpPrct.has ? semiInExtBrk.S.tpPrct.span * semiInExtBrk.S.tpPrct.inExtFrac : 0) - (semiInExtBrk.E.tpPrct.has ? semiInExtBrk.E.tpPrct.span * semiInExtBrk.E.tpPrct.inExtFrac : 0)) / (1 - fullyInExtBrksSum.tpPrct.val - (semiInExtBrk.S.tpPrct.has ? semiInExtBrk.S.tpPrct.val * semiInExtBrk.S.tpPrct.inExtFrac : 0) - (semiInExtBrk.E.tpPrct.has ? semiInExtBrk.E.tpPrct.val * semiInExtBrk.E.tpPrct.inExtFrac : 0)); each$12(brkMapper.breaks, function(brk) { var gapParsed = brk.gapParsed; if (gapParsed.type === "tpPrct") brk.gapReal = gapPrctSum !== 0 ? mathMax$9(prctBrksGapRealSum, 0) * gapParsed.val / gapPrctSum : 0; if (gapParsed.type === "tpAbs") brk.gapReal = gapParsed.val; if (brk.gapReal == null) brk.gapReal = 0; }); } function pruneTicksByBreak(pruneByBreak, ticks, breaks, getValue, interval, scaleExtent) { if (pruneByBreak === "no") return; each$12(breaks, function(brk) { var clampedBrk = clampBreakByExtent(brk, scaleExtent); if (!clampedBrk) return; for (var j = ticks.length - 1; j >= 0; j--) { var tick = ticks[j]; var val = getValue(tick); var gap = interval * 3 / 4; if (val > clampedBrk.vmin - gap && val < clampedBrk.vmax + gap && (pruneByBreak !== "preserve_extent_bound" || val !== scaleExtent[0] && val !== scaleExtent[1])) ticks.splice(j, 1); } }); } function addBreaksToTicks(ticks, breaks, scaleExtent, getTimeProps) { each$12(breaks, function(brk) { var clampedBrk = clampBreakByExtent(brk, scaleExtent); if (!clampedBrk) return; ticks.push({ value: clampedBrk.vmin, "break": { type: "vmin", parsedBreak: clampedBrk }, time: getTimeProps ? getTimeProps(clampedBrk) : void 0 }); ticks.push({ value: clampedBrk.vmax, "break": { type: "vmax", parsedBreak: clampedBrk }, time: getTimeProps ? getTimeProps(clampedBrk) : void 0 }); }); if (breaks.length) ticks.sort(function(a, b) { return a.value - b.value; }); } /** * If break and extent does not intersect, return null/undefined. * If the intersection is only a point at scaleExtent[0] or scaleExtent[1], return null/undefined. */ function clampBreakByExtent(brk, scaleExtent) { var vmin = mathMax$9(brk.vmin, scaleExtent[0]); var vmax = mathMin$9(brk.vmax, scaleExtent[1]); return vmin < vmax || vmin === vmax && vmin > scaleExtent[0] && vmin < scaleExtent[1] ? { vmin, vmax, breakOption: brk.breakOption, gapParsed: brk.gapParsed, gapReal: brk.gapReal } : null; } function parseAxisBreakOption(breakOptionList, scale, opt) { var parsedBreaks = []; if (!breakOptionList) return { breaks: parsedBreaks }; function validatePercent(normalizedPercent, msg) { if (normalizedPercent >= 0 && normalizedPercent < .99999) return true; error(msg + " must be >= 0 and < 1, rather than " + normalizedPercent + " ."); return false; } each$12(breakOptionList, function(brkOption) { if (!brkOption || brkOption.start == null || brkOption.end == null) { error("The input axis breaks start/end should not be empty."); return; } if (brkOption.isExpanded) return; var parsedBrk = { breakOption: clone$4(brkOption), vmin: scale.parse(brkOption.start), vmax: scale.parse(brkOption.end), gapParsed: { type: "tpAbs", val: 0 }, gapReal: null }; if (brkOption.gap != null) { var isPrct = false; if (isString(brkOption.gap)) { var trimmedGap = trim$1(brkOption.gap); if (trimmedGap.match(/%$/)) { var normalizedPercent = parseFloat(trimmedGap) / 100; if (!validatePercent(normalizedPercent, "Percent gap")) normalizedPercent = 0; parsedBrk.gapParsed.type = "tpPrct"; parsedBrk.gapParsed.val = normalizedPercent; isPrct = true; } } if (!isPrct) { var absolute = scale.parse(brkOption.gap); if (!isFinite(absolute) || absolute < 0) { error("Axis breaks gap must positive finite rather than (" + brkOption.gap + ")."); absolute = 0; } parsedBrk.gapParsed.type = "tpAbs"; parsedBrk.gapParsed.val = absolute; } } if (parsedBrk.vmin === parsedBrk.vmax) { parsedBrk.gapParsed.type = "tpAbs"; parsedBrk.gapParsed.val = 0; } if (opt && opt.noNegative) each$12(["vmin", "vmax"], function(se) { if (parsedBrk[se] < 0) { error("Axis break." + se + " must not be negative."); parsedBrk[se] = 0; } }); if (parsedBrk.vmin > parsedBrk.vmax) { var tmp = parsedBrk.vmax; parsedBrk.vmax = parsedBrk.vmin; parsedBrk.vmin = tmp; } parsedBreaks.push(parsedBrk); }); parsedBreaks.sort(function(item1, item2) { return item1.vmin - item2.vmin; }); var lastEnd = -Infinity; each$12(parsedBreaks, function(brk, idx) { if (lastEnd > brk.vmin) { error("Axis breaks must not overlap."); parsedBreaks[idx] = null; } lastEnd = brk.vmax; }); return { breaks: filter(parsedBreaks, function(brk) { return !!brk; }) }; } function identifyAxisBreak(brk, identifier) { return serializeAxisBreakIdentifier(identifier) === serializeAxisBreakIdentifier(brk); } function serializeAxisBreakIdentifier(identifier) { return identifier.start + "_\0_" + identifier.end; } /** * - A break pair represents `[vmin, vmax]`, * - Only both vmin and vmax item exist, they are counted as a pair. */ function retrieveAxisBreakPairs(itemList, getVisualAxisBreak, returnIdx) { var idxPairList = []; each$12(itemList, function(el, idx) { var vBreak = getVisualAxisBreak(el); if (vBreak && vBreak.type === "vmin") idxPairList.push([idx]); }); each$12(itemList, function(el, idx) { var vBreak = getVisualAxisBreak(el); if (vBreak && vBreak.type === "vmax") { var idxPair = find(idxPairList, function(pr) { return identifyAxisBreak(getVisualAxisBreak(itemList[pr[0]]).parsedBreak.breakOption, vBreak.parsedBreak.breakOption); }); idxPair && idxPair.push(idx); } }); var result = []; each$12(idxPairList, function(idxPair) { if (idxPair.length === 2) result.push(returnIdx ? idxPair : [itemList[idxPair[0]], itemList[idxPair[1]]]); }); return result; } function getTicksBreakOutwardTransform(scale, tick, outermostBreaks, lookup) { if (!tick["break"]) return; var brk = tick["break"].parsedBreak; var originalBrkItem = find(outermostBreaks, function(brk) { return identifyAxisBreak(brk.breakOption, tick["break"].parsedBreak.breakOption); }); var opt = { lookup, depth: 2 }; var parsedBreak = { vmin: scale.transformOut(brk.vmin, opt), vmax: scale.transformOut(brk.vmax, opt), breakOption: brk.breakOption, gapParsed: clone$4(originalBrkItem.gapParsed), gapReal: brk.gapReal }; return { tickVal: parsedBreak[tick["break"].type], vBreak: { type: tick["break"].type, parsedBreak } }; } function parseAxisBreakOptionInwardTransform(breakOptionList, scale, parseOpt, lookupStartIdx, out) { out.original = parseAxisBreakOption(breakOptionList, scale, parseOpt); var transformed = out.transformed = parseAxisBreakOption(breakOptionList, scale, parseOpt); var lookup = out.lookup; transformed.breaks = map$1(transformed.breaks, function(brk, idx) { var transOpt = { depth: 2 }; var vmin = scale.transformIn(brk.vmin, transOpt); var vmax = scale.transformIn(brk.vmax, transOpt); var gapParsed = { type: brk.gapParsed.type, val: brk.gapParsed.type === "tpAbs" ? scale.transformIn(brk.vmin + brk.gapParsed.val, transOpt) - vmin : brk.gapParsed.val }; lookup.from[lookupStartIdx + idx] = vmin; lookup.to[lookupStartIdx + idx] = brk.vmin; lookup.from[lookupStartIdx + idx + 1] = vmax; lookup.to[lookupStartIdx + idx + 1] = brk.vmax; return { vmin, vmax, gapParsed, gapReal: brk.gapReal, breakOption: brk.breakOption }; }); } var BREAK_MIN_MAX_TO_PARAM = { vmin: "start", vmax: "end" }; function makeAxisLabelFormatterParamBreak(extraParam, vBreak) { if (vBreak) { extraParam = extraParam || {}; extraParam["break"] = { type: BREAK_MIN_MAX_TO_PARAM[vBreak.type], start: vBreak.parsedBreak.vmin, end: vBreak.parsedBreak.vmax }; } return extraParam; } function installScaleBreakHelper() { registerScaleBreakHelperImpl({ createBreakScaleMapper, pruneTicksByBreak, addBreaksToTicks, parseAxisBreakOption, identifyAxisBreak, serializeAxisBreakIdentifier, retrieveAxisBreakPairs, getTicksBreakOutwardTransform, parseAxisBreakOptionInwardTransform, makeAxisLabelFormatterParamBreak }); } //#endregion //#region node_modules/echarts/lib/component/axis/axisBreakHelperImpl.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * @caution * Must not export anything except `installAxisBreakHelper` */ /** * The zigzag shapes for axis breaks are generated according to some random * factors. It should persist as much as possible to avoid constantly * changing by every user operation. */ var viewCache = makeInner(); function ensureVisualInCache(visualList, targetBreak) { var visual = find(visualList, function(item) { return getScaleBreakHelper().identifyAxisBreak(item.parsedBreak.breakOption, targetBreak.breakOption); }); if (!visual) visualList.push(visual = { zigzagRandomList: [], parsedBreak: targetBreak, shouldRemove: false }); return visual; } function resetCacheVisualRemoveFlag(visualList) { each$12(visualList, function(item) { return item.shouldRemove = true; }); } function removeUnusedCacheVisual(visualList) { for (var i = visualList.length - 1; i >= 0; i--) if (visualList[i].shouldRemove) visualList.splice(i, 1); } function rectCoordBuildBreakAxis(axisGroup, axisView, axisModel, coordSysRect, api) { var axis = axisModel.axis; if (axis.scale.isBlank() || !getScaleBreakHelper()) return; var breakPairs = getScaleBreakHelper().retrieveAxisBreakPairs(axis.scale.getTicks({ breakTicks: "only_break" }), function(tick) { return tick["break"]; }, false); if (!breakPairs.length) return; var breakAreaModel = axisModel.getModel("breakArea"); var zigzagAmplitude = breakAreaModel.get("zigzagAmplitude"); var zigzagMinSpan = breakAreaModel.get("zigzagMinSpan"); var zigzagMaxSpan = breakAreaModel.get("zigzagMaxSpan"); zigzagMinSpan = Math.max(2, zigzagMinSpan || 0); zigzagMaxSpan = Math.max(zigzagMinSpan, zigzagMaxSpan || 0); var expandOnClick = breakAreaModel.get("expandOnClick"); var zigzagZ = breakAreaModel.get("zigzagZ"); var itemStyle = breakAreaModel.getModel("itemStyle").getItemStyle(); var borderColor = itemStyle.stroke; var borderWidth = itemStyle.lineWidth; var borderType = itemStyle.lineDash; var color = itemStyle.fill; var group = new Group$3({ ignoreModelZ: true }); var isAxisHorizontal = axis.isHorizontal(); var cachedVisualList = viewCache(axisView).visualList || (viewCache(axisView).visualList = []); resetCacheVisualRemoveFlag(cachedVisualList); var _loop_1 = function(i) { var parsedBreak = breakPairs[i][0]["break"].parsedBreak; var coords = []; coords[0] = axis.toGlobalCoord(axis.dataToCoord(parsedBreak.vmin, true)); coords[1] = axis.toGlobalCoord(axis.dataToCoord(parsedBreak.vmax, true)); if (coords[1] < coords[0]) coords.reverse(); var cachedVisual = ensureVisualInCache(cachedVisualList, parsedBreak); cachedVisual.shouldRemove = false; var breakGroup = new Group$3(); addZigzagShapes(cachedVisual.zigzagRandomList, breakGroup, coords[0], coords[1], isAxisHorizontal, parsedBreak); if (expandOnClick) breakGroup.on("click", function() { var payload = { type: AXIS_BREAK_EXPAND_ACTION_TYPE, breaks: [{ start: parsedBreak.breakOption.start, end: parsedBreak.breakOption.end }] }; payload[axis.dim + "AxisIndex"] = axisModel.componentIndex; api.dispatchAction(payload); }); breakGroup.silent = !expandOnClick; group.add(breakGroup); }; for (var i = 0; i < breakPairs.length; i++) _loop_1(i); axisGroup.add(group); removeUnusedCacheVisual(cachedVisualList); function addZigzagShapes(zigzagRandomList, breakGroup, startCoord, endCoord, isAxisHorizontal, trimmedBreak) { var polylineStyle = { stroke: borderColor, lineWidth: borderWidth, lineDash: borderType, fill: "none" }; var dimBrk = isAxisHorizontal ? 0 : 1; var dimZigzag = 1 - dimBrk; var zigzagCoordMax = coordSysRect[XY$2[dimZigzag]] + coordSysRect[WH$2[dimZigzag]]; function subPixelOpt(brkCoord) { var pBrk = []; var dummyP = []; pBrk[dimBrk] = dummyP[dimBrk] = brkCoord; pBrk[dimZigzag] = coordSysRect[XY$2[dimZigzag]]; dummyP[dimZigzag] = zigzagCoordMax; var dummyShape = { x1: pBrk[0], y1: pBrk[1], x2: dummyP[0], y2: dummyP[1] }; subPixelOptimizeLine$1(dummyShape, dummyShape, { lineWidth: 1 }); pBrk[0] = dummyShape.x1; pBrk[1] = dummyShape.y1; return pBrk[dimBrk]; } startCoord = subPixelOpt(startCoord); endCoord = subPixelOpt(endCoord); var pointsA = []; var pointsB = []; var isSwap = true; var current = coordSysRect[XY$2[dimZigzag]]; for (var idx = 0;; idx++) { var isFirstPoint = current === coordSysRect[XY$2[dimZigzag]]; var isLastPoint = current >= zigzagCoordMax; if (isLastPoint) current = zigzagCoordMax; var pA = []; var pB = []; pA[dimBrk] = startCoord; pB[dimBrk] = endCoord; if (!isFirstPoint && !isLastPoint) { pA[dimBrk] += isSwap ? -zigzagAmplitude : zigzagAmplitude; pB[dimBrk] -= !isSwap ? -zigzagAmplitude : zigzagAmplitude; } pA[dimZigzag] = current; pB[dimZigzag] = current; pointsA.push(pA); pointsB.push(pB); var randomVal = void 0; if (idx < zigzagRandomList.length) randomVal = zigzagRandomList[idx]; else { randomVal = Math.random(); zigzagRandomList.push(randomVal); } current += randomVal * (zigzagMaxSpan - zigzagMinSpan) + zigzagMinSpan; isSwap = !isSwap; if (isLastPoint) break; } var anidSuffix = getScaleBreakHelper().serializeAxisBreakIdentifier(trimmedBreak.breakOption); breakGroup.add(new Polyline$1({ anid: "break_a_" + anidSuffix, shape: { points: pointsA }, style: polylineStyle, z: zigzagZ })); if (trimmedBreak.gapReal !== 0) { breakGroup.add(new Polyline$1({ anid: "break_b_" + anidSuffix, shape: { points: pointsB }, style: polylineStyle, z: zigzagZ })); var pointsB2 = pointsB.slice(); pointsB2.reverse(); var polygonPoints = pointsA.concat(pointsB2); breakGroup.add(new Polygon({ anid: "break_c_" + anidSuffix, shape: { points: polygonPoints }, style: { fill: color, opacity: itemStyle.opacity }, z: zigzagZ })); } } } function buildAxisBreakLine(axisModel, group, transformGroup, pathBaseProp) { var axis = axisModel.axis; var transform = transformGroup.transform; assert(pathBaseProp.style); var extent = axis.getExtent(); if (axis.inverse) { extent = extent.slice(); extent.reverse(); } var brkLayoutList = map$1(getScaleBreakHelper().retrieveAxisBreakPairs(axis.scale.getTicks({ breakTicks: "only_break" }), function(tick) { return tick["break"]; }, false), function(breakPair) { var parsedBreak = breakPair[0]["break"].parsedBreak; var coordPair = [axis.dataToCoord(parsedBreak.vmin, true), axis.dataToCoord(parsedBreak.vmax, true)]; coordPair[0] > coordPair[1] && coordPair.reverse(); return { coordPair, brkId: getScaleBreakHelper().serializeAxisBreakIdentifier(parsedBreak.breakOption) }; }); brkLayoutList.sort(function(layout1, layout2) { return layout1.coordPair[0] - layout2.coordPair[0]; }); var ySegMin = extent[0]; var lastLayout = null; for (var idx = 0; idx < brkLayoutList.length; idx++) { var layout = brkLayoutList[idx]; var brkTirmmedMin = Math.max(layout.coordPair[0], extent[0]); var brkTirmmedMax = Math.min(layout.coordPair[1], extent[1]); if (ySegMin <= brkTirmmedMin) addSeg(ySegMin, brkTirmmedMin, lastLayout, layout); ySegMin = brkTirmmedMax; lastLayout = layout; } if (ySegMin <= extent[1]) addSeg(ySegMin, extent[1], lastLayout, null); function addSeg(min, max, layout1, layout2) { function trans(p1, p2) { if (transform) { applyTransform$1(p1, p1, transform); applyTransform$1(p2, p2, transform); } } function subPixelOptimizePP(p1, p2) { var shape = { x1: p1[0], y1: p1[1], x2: p2[0], y2: p2[1] }; subPixelOptimizeLine$1(shape, shape, pathBaseProp.style); p1[0] = shape.x1; p1[1] = shape.y1; p2[0] = shape.x2; p2[1] = shape.y2; } var lineP1 = [min, 0]; var lineP2 = [max, 0]; var dummyTickEnd1 = [min, 5]; var dummyTickEnd2 = [max, 5]; trans(lineP1, dummyTickEnd1); subPixelOptimizePP(lineP1, dummyTickEnd1); trans(lineP2, dummyTickEnd2); subPixelOptimizePP(lineP2, dummyTickEnd2); subPixelOptimizePP(lineP1, lineP2); var seg = new Line$1(extend({ shape: { x1: lineP1[0], y1: lineP1[1], x2: lineP2[0], y2: lineP2[1] } }, pathBaseProp)); group.add(seg); seg.anid = "breakLine_" + (layout1 ? layout1.brkId : "\0") + "_\0_" + (layout2 ? layout2.brkId : "\0"); } } /** * Resolve the overlap of a pair of labels. * * [CAUTION] Only label.x/y are allowed to change. */ function adjustBreakLabelPair(axisInverse, axisRotation, layoutPair) { if (find(layoutPair, function(item) { return !item; })) return; var mtv = new Point(); if (!labelIntersect(layoutPair[0], layoutPair[1], mtv, { direction: -(axisInverse ? axisRotation + Math.PI : axisRotation), touchThreshold: 0, bidirectional: false })) return; var axisStTrans = create$1(); rotate(axisStTrans, axisStTrans, -axisRotation); var labelPairStTrans = map$1(layoutPair, function(layout) { return layout.transform ? mul(create$1(), axisStTrans, layout.transform) : axisStTrans; }); function isParallelToAxis(whIdx) { var localRect = layoutPair[0].localRect; var labelVec0 = new Point(localRect[WH$2[whIdx]] * labelPairStTrans[0][0], localRect[WH$2[whIdx]] * labelPairStTrans[0][1]); return Math.abs(labelVec0.y) < 1e-5; } var k = .5; if (isParallelToAxis(0) || isParallelToAxis(1)) { var rectSt = map$1(layoutPair, function(layout, idx) { var rect = layout.localRect.clone(); rect.applyTransform(labelPairStTrans[idx]); return rect; }); var brkCenterSt = new Point(); brkCenterSt.copy(layoutPair[0].label).add(layoutPair[1].label).scale(.5); brkCenterSt.transform(axisStTrans); var mtvSt = mtv.clone().transform(axisStTrans); var qval = (rectSt[0].x + rectSt[1].x + (mtvSt.x >= 0 ? rectSt[0].width : rectSt[1].width) + mtvSt.x) / 2 - brkCenterSt.x; var uvalMin = Math.min(qval, qval - mtvSt.x); var uvalMax = Math.max(qval, qval - mtvSt.x); k = (qval - (uvalMax < 0 ? uvalMax : uvalMin > 0 ? uvalMin : 0)) / mtvSt.x; } var delta0 = new Point(); var delta1 = new Point(); Point.scale(delta0, mtv, -k); Point.scale(delta1, mtv, 1 - k); labelLayoutApplyTranslation(layoutPair[0], delta0); labelLayoutApplyTranslation(layoutPair[1], delta1); } function updateModelAxisBreak(model, payload) { var result = { breaks: [] }; each$12(payload.breaks, function(inputBrk) { if (!inputBrk) return; var breakOption = find(model.get("breaks", true), function(brkOption) { return getScaleBreakHelper().identifyAxisBreak(brkOption, inputBrk); }); if (!breakOption) { warn("Can not find axis break by start: " + inputBrk.start + ", end: " + inputBrk.end); return; } var actionType = payload.type; var old = { isExpanded: !!breakOption.isExpanded }; breakOption.isExpanded = actionType === "expandAxisBreak" ? true : actionType === "collapseAxisBreak" ? false : actionType === "toggleAxisBreak" ? !breakOption.isExpanded : breakOption.isExpanded; result.breaks.push({ start: breakOption.start, end: breakOption.end, isExpanded: !!breakOption.isExpanded, old }); }); return result; } function installAxisBreakHelper() { registerAxisBreakHelperImpl({ adjustBreakLabelPair, buildAxisBreakLine, rectCoordBuildBreakAxis, updateModelAxisBreak }); } //#endregion //#region node_modules/echarts/lib/component/axis/installBreak.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ function installAxisBreak(registers) { registerAction$1(registers); installScaleBreakHelper(); installAxisBreakHelper(); } //#endregion //#region node_modules/echarts/lib/coord/cartesian/legacyContainLabel.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /** * [CAUTION] Never export methods other than `installLegacyGridContainLabel`. */ function installLegacyGridContainLabel() { registerLegacyGridContainLabelImpl(legacyLayOutGridByContained); } /** * The input gridRect and axes will be modified. */ function legacyLayOutGridByContained(axesList, gridRect) { each$12(axesList, function(axis) { if (!axis.model.get(["axisLabel", "inside"])) { var labelUnionRect = estimateLabelUnionRect(axis); if (labelUnionRect) { var dim = axis.isHorizontal() ? "height" : "width"; var margin = axis.model.get(["axisLabel", "margin"]); gridRect[dim] -= labelUnionRect[dim] + margin; if (axis.position === "top") gridRect.y += labelUnionRect.height + margin; else if (axis.position === "left") gridRect.x += labelUnionRect.width + margin; } } }); } /** * @return Be null/undefined if no labels. */ function estimateLabelUnionRect(axis) { var axisModel = axis.model; var scale = axis.scale; if (!axisModel.get(["axisLabel", "show"]) || scale.isBlank()) return; var realNumberScaleTicks; var tickCount; var categoryScaleExtent = scale.getExtent(); if (scale instanceof OrdinalScale) tickCount = scale.count(); else { realNumberScaleTicks = scale.getTicks(); tickCount = realNumberScaleTicks.length; } var axisLabelModel = axis.getLabelModel(); var labelFormatter = makeLabelFormatter(axis); var rect; var step = 1; if (tickCount > 40) step = Math.ceil(tickCount / 40); for (var i = 0; i < tickCount; i += step) { var label = labelFormatter(realNumberScaleTicks ? realNumberScaleTicks[i] : { value: categoryScaleExtent[0] + i }, i); var singleRect = rotateTextRect(axisLabelModel.getTextRect(label), axisLabelModel.get("rotate") || 0); rect ? rect.union(singleRect) : rect = singleRect; } return rect; function rotateTextRect(textRect, rotate) { var rotateRadians = rotate * Math.PI / 180; var beforeWidth = textRect.width; var beforeHeight = textRect.height; var afterWidth = beforeWidth * Math.abs(Math.cos(rotateRadians)) + Math.abs(beforeHeight * Math.sin(rotateRadians)); var afterHeight = beforeWidth * Math.abs(Math.sin(rotateRadians)) + Math.abs(beforeHeight * Math.cos(rotateRadians)); return new BoundingRect(textRect.x, textRect.y, afterWidth, afterHeight); } } //#endregion //#region node_modules/echarts/index.js /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ use([install$56]); use([install$57]); use([ install$55, install$54, install$53, install$51, install$49, install$47, install$46, install$45, install$44, install$43, install$42, install$41, install$39, install$38, install$37, install$36, install$35, install$34, install$33, install$32, install$31, install$30, install$29 ]); use(install$27); use(install$26); use(install$48); use(install$25); use(install$40); use(install$24); use(install$23); use(install$22); use(install$20); use(install$19); use(install$28); use(install$18); use(install$17); use(install$16); use(install$15); use(install$14); use(install$13); use(install$10); use(install$7); use(install$9); use(install$8); use(install$4); use(install$6); use(install$5); use(install$3); use(install$2); use(install$1); use(install); use(installUniversalTransition); use(installLabelLayout); use(installAxisBreak); use(installLegacyGridContainLabel); use(installScatterJitter); //#endregion export { Axis, ChartView, ComponentModel, ComponentView, SeriesData as List, Model, PRIORITY, SeriesModel, color_exports as color, connect, dataTool, dependencies, disConnect, disconnect, dispose, env, extendChartView, extendComponentModel, extendComponentView, extendSeriesModel, format_exports as format, getCoordinateSystemDimensions, getInstanceByDom, getInstanceById, getMap, graphic_exports as graphic, helper_exports as helper, init, brushSingle as innerDrawElementOnCanvas, matrix_exports as matrix, number_exports as number, parseGeoJSON, parseGeoJSON as parseGeoJson, registerAction, registerCoordinateSystem, registerCustomSeries, registerLayout, registerLoading, registerLocale, registerMap, registerPostInit, registerPostUpdate, registerPreprocessor, registerProcessor, registerTheme, registerTransform, registerUpdateLifecycle, registerVisual, setCanvasCreator, setPlatformAPI, throttle, time_exports as time, use, util_exports as util, vector_exports as vector, version, util_exports$1 as zrUtil, zrender_exports as zrender };