}\n */\n\nfunction partition(rows, group_by) {\n var order_by = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var newRows = rows;\n\n if (order_by && order_by.length) {\n newRows = sortBy(rows, order_by);\n }\n\n var groupingFn;\n\n if (is_function_default()(group_by)) {\n groupingFn = group_by;\n } else if (is_array_default()(group_by)) {\n groupingFn = function groupingFn(row) {\n return \"_\".concat(group_by.map(function (col) {\n return row[col];\n }).join('-'));\n }; // NOTE: Object.keys({'b': 'b', '2': '2', '1': '1', 'a': 'a'}) => [ '1', '2', 'b', 'a' ]\n // that is why we have to add a prefix\n\n } else if (is_string_default()(group_by)) {\n groupingFn = function groupingFn(row) {\n return \"_\".concat(row[group_by]);\n };\n }\n\n var groups = group_by_default()(newRows, groupingFn);\n return groups;\n}\n\n;\n/* harmony default export */ var data_transform_partition = (partition);\n// CONCATENATED MODULE: ./src/utils/data-transform/percentage.ts\n\n// 只列举常用的函数,复杂的推荐使用第三方类库。\n\n\n\n\n/**\n * 百分比计算, 不支持重复数据统计\n * @param data object[] 数据源\n * @param field string 被统计的值\n * @param as string 生成的百分比字段名\n * @param groupBy : string | string[] 将数据分组后再计算百分比\n */\n\n/* harmony default export */ var percentage = (function (data, field, as, groupBy) {\n var result = [];\n var groups = groupBy ? data_transform_partition(data, groupBy) : {\n _data: data\n };\n\n for_in_default()(groups, function (group) {\n var totalSum = Object(sum[\"a\" /* default */])(group.map(function (row) {\n return row[field];\n }));\n warning_default()(totalSum !== 0, \"Invalid data: total sum of field \".concat(field, \" is 0!\"));\n\n for_in_default()(group, function (item) {\n var resultRow = _object_assign_4_1_2_object_assign_default()({}, item);\n\n if (totalSum === 0) {\n resultRow[as] = 0;\n } else {\n resultRow[as] = item[field] / totalSum;\n }\n\n result.push(resultRow);\n });\n });\n\n return result;\n});\n// CONCATENATED MODULE: ./src/utils/data-transform/minifyNum.ts\n/* harmony default export */ var minifyNum = (function (num) {\n var decimal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var wan = 10000;\n var yi = 100000000;\n\n if (num >= yi) {\n return \"\".concat((num / yi).toFixed(decimal).replace(/\\.?0*$/, ''), \"\\u4EBF\");\n }\n\n if (num >= wan) {\n return \"\".concat((num / wan).toFixed(decimal).replace(/\\.?0*$/, ''), \"\\u4E07\");\n }\n\n return num.toFixed(decimal).replace(/\\.?0*$/, '');\n});\n// CONCATENATED MODULE: ./src/utils/data-transform/splitBySeparator.ts\n/* harmony default export */ var splitBySeparator = (function (num) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n\n if (typeof num === 'number') {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n }\n\n return num;\n});\n// EXTERNAL MODULE: ./src/utils/plotTools.ts\nvar plotTools = __webpack_require__(170);\n\n// EXTERNAL MODULE: ./src/utils/cloneDeep.ts\nvar cloneDeep = __webpack_require__(80);\n\n// EXTERNAL MODULE: ./src/utils/shallowEqual.ts\nvar shallowEqual = __webpack_require__(81);\n\n// CONCATENATED MODULE: ./src/utils/index.ts\n// 数据处理\n\n\n\n // 配置项处理\n\n // 函数工具\n\n\n\n\n/***/ }),\n/* 614 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(615);\n\n\n/***/ }),\n/* 615 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Util\", function() { return Util; });\n/* harmony import */ var object_assign__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var object_assign__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(object_assign__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_antv_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_Annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(584);\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Annotation\", function() { return _components_Annotation__WEBPACK_IMPORTED_MODULE_2__; });\n/* harmony import */ var _g2_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(316);\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"G2\", function() { return _g2_all__WEBPACK_IMPORTED_MODULE_3__; });\n/* harmony import */ var _g_components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(583);\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"GComponents\", function() { return _g_components__WEBPACK_IMPORTED_MODULE_4__; });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(613);\n/* harmony import */ var _components_Chart__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(586);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Chart\", function() { return _components_Chart__WEBPACK_IMPORTED_MODULE_6__[\"a\"]; });\n\n/* harmony import */ var _components_View__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(587);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"View\", function() { return _components_View__WEBPACK_IMPORTED_MODULE_7__[\"a\"]; });\n\n/* harmony import */ var _components_Tooltip__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(585);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Tooltip\", function() { return _components_Tooltip__WEBPACK_IMPORTED_MODULE_8__[\"a\"]; });\n\n/* harmony import */ var _components_Legend__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(588);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Legend\", function() { return _components_Legend__WEBPACK_IMPORTED_MODULE_9__[\"a\"]; });\n\n/* harmony import */ var _components_Coordinate__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(214);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Coordinate\", function() { return _components_Coordinate__WEBPACK_IMPORTED_MODULE_10__[\"a\"]; });\n\n/* harmony import */ var _components_Axis__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(589);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Axis\", function() { return _components_Axis__WEBPACK_IMPORTED_MODULE_11__[\"a\"]; });\n\n/* harmony import */ var _components_Facet__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(474);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Facet\", function() { return _components_Facet__WEBPACK_IMPORTED_MODULE_12__[\"a\"]; });\n\n/* harmony import */ var _components_Slider__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(475);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Slider\", function() { return _components_Slider__WEBPACK_IMPORTED_MODULE_13__[\"a\"]; });\n\n/* harmony import */ var _geometry_Area__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(128);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Area\", function() { return _geometry_Area__WEBPACK_IMPORTED_MODULE_14__[\"a\"]; });\n\n/* harmony import */ var _geometry_Edge__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(215);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Edge\", function() { return _geometry_Edge__WEBPACK_IMPORTED_MODULE_15__[\"a\"]; });\n\n/* harmony import */ var _geometry_Heatmap__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(216);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Heatmap\", function() { return _geometry_Heatmap__WEBPACK_IMPORTED_MODULE_16__[\"a\"]; });\n\n/* harmony import */ var _geometry_Interval__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(217);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Interval\", function() { return _geometry_Interval__WEBPACK_IMPORTED_MODULE_17__[\"a\"]; });\n\n/* harmony import */ var _geometry_Line__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(129);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return _geometry_Line__WEBPACK_IMPORTED_MODULE_18__[\"a\"]; });\n\n/* harmony import */ var _geometry_Point__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(130);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Point\", function() { return _geometry_Point__WEBPACK_IMPORTED_MODULE_19__[\"a\"]; });\n\n/* harmony import */ var _geometry_Polygon__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(218);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polygon\", function() { return _geometry_Polygon__WEBPACK_IMPORTED_MODULE_20__[\"a\"]; });\n\n/* harmony import */ var _geometry_Schema__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(477);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Schema\", function() { return _geometry_Schema__WEBPACK_IMPORTED_MODULE_21__[\"a\"]; });\n\n/* harmony import */ var _geometry_Base__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(37);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BaseGeom\", function() { return _geometry_Base__WEBPACK_IMPORTED_MODULE_22__[\"a\"]; });\n\n/* harmony import */ var _geometry_Label__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(290);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Label\", function() { return _geometry_Label__WEBPACK_IMPORTED_MODULE_23__[\"a\"]; });\n\n/* harmony import */ var _geometry_Path__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(478);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Path\", function() { return _geometry_Path__WEBPACK_IMPORTED_MODULE_24__[\"a\"]; });\n\n/* harmony import */ var _geometry_LineAdvance__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(219);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LineAdvance\", function() { return _geometry_LineAdvance__WEBPACK_IMPORTED_MODULE_25__[\"a\"]; });\n\n/* harmony import */ var _geometry__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(479);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Geom\", function() { return _geometry__WEBPACK_IMPORTED_MODULE_26__[\"a\"]; });\n\n/* harmony import */ var _components_Coordinate_coord__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(480);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Coord\", function() { return _components_Coordinate_coord__WEBPACK_IMPORTED_MODULE_27__[\"a\"]; });\n\n/* harmony import */ var _adapter_Guide__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(481);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Guide\", function() { return _adapter_Guide__WEBPACK_IMPORTED_MODULE_28__[\"a\"]; });\n\n/* harmony import */ var _components_Effects__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(482);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Effects\", function() { return _components_Effects__WEBPACK_IMPORTED_MODULE_29__[\"a\"]; });\n\n/* harmony import */ var _components_Interaction__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(483);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Interaction\", function() { return _components_Interaction__WEBPACK_IMPORTED_MODULE_30__[\"a\"]; });\n\n/* harmony import */ var _createPlot__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(10);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPlot\", function() { return _createPlot__WEBPACK_IMPORTED_MODULE_31__[\"a\"]; });\n\n/* harmony import */ var _connector_createTooltipConnector__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(171);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createTooltipConnector\", function() { return _connector_createTooltipConnector__WEBPACK_IMPORTED_MODULE_32__[\"a\"]; });\n\n/* harmony import */ var _hooks_useChartView__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(42);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useView\", function() { return _hooks_useChartView__WEBPACK_IMPORTED_MODULE_33__[\"a\"]; });\n\n/* harmony import */ var _hooks_useChartInstance__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(126);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useRootChart\", function() { return _hooks_useChartInstance__WEBPACK_IMPORTED_MODULE_34__[\"a\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useChartInstance\", function() { return _hooks_useChartInstance__WEBPACK_IMPORTED_MODULE_34__[\"a\"]; });\n\n/* harmony import */ var _hooks_useTheme__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(484);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"useTheme\", function() { return _hooks_useTheme__WEBPACK_IMPORTED_MODULE_35__[\"a\"]; });\n\n/* harmony import */ var _context_view__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(49);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withView\", function() { return _context_view__WEBPACK_IMPORTED_MODULE_36__[\"b\"]; });\n\n/* harmony import */ var _context_root__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(74);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"withChartInstance\", function() { return _context_root__WEBPACK_IMPORTED_MODULE_37__[\"b\"]; });\n\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _core__WEBPACK_IMPORTED_MODULE_38__) if([\"default\",\"Util\",\"Annotation\",\"G2\",\"GComponents\",\"Chart\",\"View\",\"Tooltip\",\"Legend\",\"Coordinate\",\"Axis\",\"Facet\",\"Slider\",\"Area\",\"Edge\",\"Heatmap\",\"Interval\",\"Line\",\"Point\",\"Polygon\",\"Schema\",\"BaseGeom\",\"Label\",\"Path\",\"LineAdvance\",\"Geom\",\"Coord\",\"Guide\",\"Effects\",\"Interaction\",\"createPlot\",\"createTooltipConnector\",\"useView\",\"useRootChart\",\"useChartInstance\",\"useTheme\",\"withView\",\"withChartInstance\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _core__WEBPACK_IMPORTED_MODULE_38__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _plots__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(582);\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProgressChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"w\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RingProgressChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"A\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TinyColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"J\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TinyAreaChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"I\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TinyLineChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"K\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LineChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"p\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TreemapChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"L\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StepLineChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"H\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"b\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StackedBarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"E\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GroupedBarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"k\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PercentStackedBarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"s\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RangeBarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"y\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AreaChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"a\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StackedAreaChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"D\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PercentStackedAreaChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"r\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GroupedColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"l\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StackedColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"F\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RangeColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"z\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PercentStackedColumnChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"t\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PieChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"u\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DensityHeatmapChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"g\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HeatmapChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"n\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WordCloudChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"N\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RoseChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"B\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunnelChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"i\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StackedRoseChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"G\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GroupedRoseChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"m\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RadarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"x\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LiquidChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"q\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HistogramChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"o\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DonutChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"h\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WaterfallChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"M\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ScatterChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"C\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BubbleChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"c\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BulletChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"d\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalendarChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"e\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GaugeChart\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"j\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PlotAdapter\", function() { return _plots__WEBPACK_IMPORTED_MODULE_39__[\"v\"]; });\n\n\n\n\n\n\n\nvar Util = object_assign__WEBPACK_IMPORTED_MODULE_0___default()(object_assign__WEBPACK_IMPORTED_MODULE_0___default()(object_assign__WEBPACK_IMPORTED_MODULE_0___default()({}, _antv_util__WEBPACK_IMPORTED_MODULE_1__), _utils__WEBPACK_IMPORTED_MODULE_5__), _g2_all__WEBPACK_IMPORTED_MODULE_3__[\"Util\"]); // 基础组件\n\n\n\n\n\n\n\n\n\n // geometry\n\n\n\n\n\n\n\n\n\n\n\n\n // 通用 geometry\n\n // 兼容\n\n\n // 工具\n\n\n\n\n // hooks\n\n // fixme: 更名,在5.0后正式更名为 useChartInstance\n\n // 正确写法\n\n\n\n\n // 注册主题\n\n // 基于 g2-plots 基础图表\n\n // g-components\n\n/***/ }),\n/* 616 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar keysShim;\n\nif (!Object.keys) {\n // modified from https://github.com/es-shims/es5-shim\n var has = Object.prototype.hasOwnProperty;\n var toStr = Object.prototype.toString;\n\n var isArgs = __webpack_require__(358); // eslint-disable-line global-require\n\n\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var hasDontEnumBug = !isEnumerable.call({\n toString: null\n }, 'toString');\n var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n var dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];\n\n var equalsConstructorPrototype = function equalsConstructorPrototype(o) {\n var ctor = o.constructor;\n return ctor && ctor.prototype === o;\n };\n\n var excludedKeys = {\n $applicationCache: true,\n $console: true,\n $external: true,\n $frame: true,\n $frameElement: true,\n $frames: true,\n $innerHeight: true,\n $innerWidth: true,\n $onmozfullscreenchange: true,\n $onmozfullscreenerror: true,\n $outerHeight: true,\n $outerWidth: true,\n $pageXOffset: true,\n $pageYOffset: true,\n $parent: true,\n $scrollLeft: true,\n $scrollTop: true,\n $scrollX: true,\n $scrollY: true,\n $self: true,\n $webkitIndexedDB: true,\n $webkitStorageInfo: true,\n $window: true\n };\n\n var hasAutomationEqualityBug = function () {\n /* global window */\n if (typeof window === 'undefined') {\n return false;\n }\n\n for (var k in window) {\n try {\n if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && (0, _typeof2.default)(window[k]) === 'object') {\n try {\n equalsConstructorPrototype(window[k]);\n } catch (e) {\n return true;\n }\n }\n } catch (e) {\n return true;\n }\n }\n\n return false;\n }();\n\n var equalsConstructorPrototypeIfNotBuggy = function equalsConstructorPrototypeIfNotBuggy(o) {\n /* global window */\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n return equalsConstructorPrototype(o);\n }\n\n try {\n return equalsConstructorPrototype(o);\n } catch (e) {\n return false;\n }\n };\n\n keysShim = function keys(object) {\n var isObject = object !== null && (0, _typeof2.default)(object) === 'object';\n var isFunction = toStr.call(object) === '[object Function]';\n var isArguments = isArgs(object);\n var isString = isObject && toStr.call(object) === '[object String]';\n var theKeys = [];\n\n if (!isObject && !isFunction && !isArguments) {\n throw new TypeError('Object.keys called on a non-object');\n }\n\n var skipProto = hasProtoEnumBug && isFunction;\n\n if (isString && object.length > 0 && !has.call(object, 0)) {\n for (var i = 0; i < object.length; ++i) {\n theKeys.push(String(i));\n }\n }\n\n if (isArguments && object.length > 0) {\n for (var j = 0; j < object.length; ++j) {\n theKeys.push(String(j));\n }\n } else {\n for (var name in object) {\n if (!(skipProto && name === 'prototype') && has.call(object, name)) {\n theKeys.push(String(name));\n }\n }\n }\n\n if (hasDontEnumBug) {\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n for (var k = 0; k < dontEnums.length; ++k) {\n if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n theKeys.push(dontEnums[k]);\n }\n }\n }\n\n return theKeys;\n };\n}\n\nmodule.exports = keysShim;\n\n/***/ }),\n/* 617 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n\n var args = slice.call(arguments, 1);\n var bound;\n\n var binder = function binder() {\n if (this instanceof bound) {\n var result = target.apply(this, args.concat(slice.call(arguments)));\n\n if (Object(result) === result) {\n return result;\n }\n\n return this;\n } else {\n return target.apply(that, args.concat(slice.call(arguments)));\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n\n/***/ }),\n/* 618 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar origSymbol = global.Symbol;\n\nvar hasSymbolSham = __webpack_require__(362);\n\nmodule.exports = function hasNativeSymbols() {\n if (typeof origSymbol !== 'function') {\n return false;\n }\n\n if (typeof Symbol !== 'function') {\n return false;\n }\n\n if ((0, _typeof2.default)(origSymbol('foo')) !== 'symbol') {\n return false;\n }\n\n if ((0, _typeof2.default)(Symbol('bar')) !== 'symbol') {\n return false;\n }\n\n return hasSymbolSham();\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(361)))\n\n/***/ }),\n/* 619 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(236);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n\n/***/ }),\n/* 620 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(360);\n\nvar callBind = __webpack_require__(359);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n var intrinsic = GetIntrinsic(name, !!allowMissing);\n\n if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n return callBind(intrinsic);\n }\n\n return intrinsic;\n};\n\n/***/ }),\n/* 621 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(356);\n\nvar getPolyfill = __webpack_require__(364);\n\nmodule.exports = function shimAssign() {\n var polyfill = getPolyfill();\n define(Object, {\n assign: polyfill\n }, {\n assign: function assign() {\n return Object.assign !== polyfill;\n }\n });\n return polyfill;\n};\n\n/***/ }),\n/* 622 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _filter = _interopRequireDefault(__webpack_require__(365));\n\nvar _contains = _interopRequireDefault(__webpack_require__(174));\n\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to inspect.\n * @param {Array} values The values to exclude.\n * @return {Array} Returns the new array of filtered values.\n * @example\n * difference([2, 1], [2, 3]); // => [1]\n */\nvar difference = function difference(arr, values) {\n if (values === void 0) {\n values = [];\n }\n\n return (0, _filter.default)(arr, function (value) {\n return !(0, _contains.default)(values, value);\n });\n};\n\nvar _default = difference;\nexports.default = _default;\n\n/***/ }),\n/* 623 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\nvar _isMatch = _interopRequireDefault(__webpack_require__(366));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isPlainObject = _interopRequireDefault(__webpack_require__(137));\n\nfunction find(arr, predicate) {\n if (!(0, _isArray.default)(arr)) return null;\n\n var _predicate;\n\n if ((0, _isFunction.default)(predicate)) {\n _predicate = predicate;\n }\n\n if ((0, _isPlainObject.default)(predicate)) {\n _predicate = function _predicate(a) {\n return (0, _isMatch.default)(a, predicate);\n };\n }\n\n if (_predicate) {\n for (var i = 0; i < arr.length; i += 1) {\n if (_predicate(arr[i])) {\n return arr[i];\n }\n }\n }\n\n return null;\n}\n\nvar _default = find;\nexports.default = _default;\n\n/***/ }),\n/* 624 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction findIndex(arr, predicate, fromIndex) {\n if (fromIndex === void 0) {\n fromIndex = 0;\n }\n\n for (var i = fromIndex; i < arr.length; i++) {\n if (predicate(arr[i], i)) {\n // 找到终止循环\n return i;\n }\n }\n\n return -1;\n}\n\nvar _default = findIndex;\nexports.default = _default;\n\n/***/ }),\n/* 625 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNil = _interopRequireDefault(__webpack_require__(94));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar firstValue = function firstValue(data, name) {\n var rst = null;\n\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n\n if (!(0, _isNil.default)(value)) {\n if ((0, _isArray.default)(value)) {\n rst = value[0]; // todo 这里是否应该使用递归,调用 firstValue @绝云\n } else {\n rst = value;\n }\n\n break;\n }\n }\n\n return rst;\n};\n\nvar _default = firstValue;\nexports.default = _default;\n\n/***/ }),\n/* 626 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function flatten(arr) {\n if (!(0, _isArray.default)(arr)) {\n return [];\n }\n\n var rst = [];\n\n for (var i = 0; i < arr.length; i++) {\n rst = rst.concat(arr[i]);\n }\n\n return rst;\n};\n\nvar _default = flatten;\nexports.default = _default;\n\n/***/ }),\n/* 627 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @param {Array} result The array to return.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flattenDeep([1, [2, [3, [4]], 5]]); // => [1, 2, 3, 4, 5]\n */\nvar flattenDeep = function flattenDeep(arr, result) {\n if (result === void 0) {\n result = [];\n }\n\n if (!(0, _isArray.default)(arr)) {\n result.push(arr);\n } else {\n for (var i = 0; i < arr.length; i += 1) {\n flattenDeep(arr[i], result);\n }\n }\n\n return result;\n};\n\nvar _default = flattenDeep;\nexports.default = _default;\n\n/***/ }),\n/* 628 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar getRange = function getRange(values) {\n // 存在 NaN 时,min,max 判定会出问题\n var filterValues = values.filter(function (v) {\n return !isNaN(v);\n });\n\n if (!filterValues.length) {\n // 如果没有数值则直接返回0\n return {\n min: 0,\n max: 0\n };\n }\n\n if ((0, _isArray.default)(values[0])) {\n var tmp = [];\n\n for (var i = 0; i < values.length; i++) {\n tmp = tmp.concat(values[i]);\n }\n\n filterValues = tmp;\n }\n\n var max = Math.max.apply(null, filterValues);\n var min = Math.min.apply(null, filterValues);\n return {\n min: min,\n max: max\n };\n};\n\nvar _default = getRange;\nexports.default = _default;\n\n/***/ }),\n/* 629 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar arrPrototype = Array.prototype;\nvar splice = arrPrototype.splice;\nvar indexOf = arrPrototype.indexOf;\n\nvar pull = function pull(arr) {\n var values = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var fromIndex = -1;\n\n while ((fromIndex = indexOf.call(arr, value)) > -1) {\n splice.call(arr, fromIndex, 1);\n }\n }\n\n return arr;\n};\n\nvar _default = pull;\nexports.default = _default;\n\n/***/ }),\n/* 630 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _each = _interopRequireDefault(__webpack_require__(84));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isPlainObject = _interopRequireDefault(__webpack_require__(137));\n\nvar reduce = function reduce(arr, fn, init) {\n if (!(0, _isArray.default)(arr) && !(0, _isPlainObject.default)(arr)) {\n return arr;\n }\n\n var result = init;\n (0, _each.default)(arr, function (data, i) {\n result = fn(result, data, i);\n });\n return result;\n};\n\nvar _default = reduce;\nexports.default = _default;\n\n/***/ }),\n/* 631 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nvar _pullAt = _interopRequireDefault(__webpack_require__(368));\n\nvar remove = function remove(arr, predicate) {\n /**\n * const arr = [1, 2, 3, 4]\n * const evens = remove(arr, n => n % 2 == 0)\n * console.log(arr) // => [1, 3]\n * console.log(evens) // => [2, 4]\n */\n var result = [];\n\n if (!(0, _isArrayLike.default)(arr)) {\n return result;\n }\n\n var i = -1;\n var indexes = [];\n var length = arr.length;\n\n while (++i < length) {\n var value = arr[i];\n\n if (predicate(value, i, arr)) {\n result.push(value);\n indexes.push(i);\n }\n }\n\n (0, _pullAt.default)(arr, indexes);\n return result;\n};\n\nvar _default = remove;\nexports.default = _default;\n\n/***/ }),\n/* 632 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isString = _interopRequireDefault(__webpack_require__(102));\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\nfunction sortBy(arr, key) {\n var comparer;\n\n if ((0, _isFunction.default)(key)) {\n comparer = function comparer(a, b) {\n return key(a) - key(b);\n };\n } else {\n var keys_1 = [];\n\n if ((0, _isString.default)(key)) {\n keys_1.push(key);\n } else if ((0, _isArray.default)(key)) {\n keys_1 = key;\n }\n\n comparer = function comparer(a, b) {\n for (var i = 0; i < keys_1.length; i += 1) {\n var prop = keys_1[i];\n\n if (a[prop] > b[prop]) {\n return 1;\n }\n\n if (a[prop] < b[prop]) {\n return -1;\n }\n }\n\n return 0;\n };\n }\n\n arr.sort(comparer);\n return arr;\n}\n\nvar _default = sortBy;\nexports.default = _default;\n\n/***/ }),\n/* 633 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _uniq = _interopRequireDefault(__webpack_require__(369));\n\nvar union = function union() {\n var sources = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n\n return (0, _uniq.default)([].concat.apply([], sources));\n};\n\nvar _default = union;\nexports.default = _default;\n\n/***/ }),\n/* 634 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isNil = _interopRequireDefault(__webpack_require__(94));\n\nvar _default = function _default(data, name) {\n var rst = [];\n var tmpMap = {};\n\n for (var i = 0; i < data.length; i++) {\n var obj = data[i];\n var value = obj[name];\n\n if (!(0, _isNil.default)(value)) {\n // flatten\n if (!(0, _isArray.default)(value)) {\n value = [value];\n }\n\n for (var j = 0; j < value.length; j++) {\n var val = value[j]; // unique\n\n if (!tmpMap[val]) {\n rst.push(val);\n tmpMap[val] = true;\n }\n }\n }\n }\n\n return rst;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 635 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = head;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nfunction head(o) {\n if ((0, _isArrayLike.default)(o)) {\n return o[0];\n }\n\n return undefined;\n}\n\n/***/ }),\n/* 636 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = last;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nfunction last(o) {\n if ((0, _isArrayLike.default)(o)) {\n var arr = o;\n return arr[arr.length - 1];\n }\n\n return undefined;\n}\n\n/***/ }),\n/* 637 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isString = _interopRequireDefault(__webpack_require__(102));\n\nfunction startsWith(arr, e) {\n return (0, _isArray.default)(arr) || (0, _isString.default)(arr) ? arr[0] === e : false;\n}\n\nvar _default = startsWith;\nexports.default = _default;\n\n/***/ }),\n/* 638 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isString = _interopRequireDefault(__webpack_require__(102));\n\nfunction endsWith(arr, e) {\n return (0, _isArray.default)(arr) || (0, _isString.default)(arr) ? arr[arr.length - 1] === e : false;\n}\n\nvar _default = endsWith;\nexports.default = _default;\n\n/***/ }),\n/* 639 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * 只要有一个不满足条件就返回 false\n * @param arr\n * @param func\n */\nvar every = function every(arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (!func(arr[i], i)) return false;\n }\n\n return true;\n};\n\nvar _default = every;\nexports.default = _default;\n\n/***/ }),\n/* 640 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * 只要有一个满足条件就返回 true\n * @param arr\n * @param func\n */\nvar some = function some(arr, func) {\n for (var i = 0; i < arr.length; i++) {\n if (func(arr[i], i)) return true;\n }\n\n return false;\n};\n\nvar _default = some;\nexports.default = _default;\n\n/***/ }),\n/* 641 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _groupToMap = _interopRequireDefault(__webpack_require__(370));\n\nvar _default = function _default(data, condition) {\n if (!condition) {\n // 没有条件,则自身改成数组\n return [data];\n }\n\n var groups = (0, _groupToMap.default)(data, condition);\n var array = [];\n\n for (var i in groups) {\n array.push(groups[i]);\n }\n\n return array;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 642 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * 获取封装的事件\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n}\n\nvar _default = getWrapBehavior;\nexports.default = _default;\n\n/***/ }),\n/* 643 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * 封装事件,便于使用上下文this,和便于解除事件时使用\n * @protected\n * @param {Object} obj 对象\n * @param {String} action 事件名称\n * @return {Function} 返回事件处理函数\n */\nfunction wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n\n var method = function method(e) {\n obj[action](e);\n };\n\n obj['_wrap_' + action] = method;\n return method;\n}\n\nvar _default = wrapBehavior;\nexports.default = _default;\n\n/***/ }),\n/* 644 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar numColorCache = {};\n\nfunction numberToColor(num) {\n // 增加缓存\n var color = numColorCache[num];\n\n if (!color) {\n var str = num.toString(16);\n\n for (var i = str.length; i < 6; i++) {\n str = '0' + str;\n }\n\n color = '#' + str;\n numColorCache[num] = color;\n }\n\n return color;\n}\n\nvar _default = numberToColor;\nexports.default = _default;\n\n/***/ }),\n/* 645 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nfunction parseRadius(radius) {\n var r1 = 0,\n r2 = 0,\n r3 = 0,\n r4 = 0;\n\n if ((0, _isArray.default)(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n } else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n } else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n } else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n } else {\n r1 = r2 = r3 = r4 = radius;\n }\n\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4\n };\n}\n\nvar _default = parseRadius;\nexports.default = _default;\n\n/***/ }),\n/* 646 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar clamp = function clamp(a, min, max) {\n if (a < min) {\n return min;\n } else if (a > max) {\n return max;\n }\n\n return a;\n};\n\nvar _default = clamp;\nexports.default = _default;\n\n/***/ }),\n/* 647 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar fixedBase = function fixedBase(v, base) {\n var str = base.toString();\n var index = str.indexOf('.');\n\n if (index === -1) {\n return Math.round(v);\n }\n\n var length = str.substr(index + 1).length;\n\n if (length > 20) {\n length = 20;\n }\n\n return parseFloat(v.toFixed(length));\n};\n\nvar _default = fixedBase;\nexports.default = _default;\n\n/***/ }),\n/* 648 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isDecimal = function isDecimal(num) {\n return (0, _isNumber.default)(num) && num % 1 !== 0;\n};\n\nvar _default = isDecimal;\nexports.default = _default;\n\n/***/ }),\n/* 649 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isEven = function isEven(num) {\n return (0, _isNumber.default)(num) && num % 2 === 0;\n};\n\nvar _default = isEven;\nexports.default = _default;\n\n/***/ }),\n/* 650 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isInteger = Number.isInteger ? Number.isInteger : function (num) {\n return (0, _isNumber.default)(num) && num % 1 === 0;\n};\nvar _default = isInteger;\nexports.default = _default;\n\n/***/ }),\n/* 651 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isNegative = function isNegative(num) {\n return (0, _isNumber.default)(num) && num < 0;\n};\n\nvar _default = isNegative;\nexports.default = _default;\n\n/***/ }),\n/* 652 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isNumberEqual;\nvar PRECISION = 0.00001; // numbers less than this is considered as 0\n\nfunction isNumberEqual(a, b, precision) {\n if (precision === void 0) {\n precision = PRECISION;\n }\n\n return Math.abs(a - b) < precision;\n}\n\n;\n\n/***/ }),\n/* 653 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isOdd = function isOdd(num) {\n return (0, _isNumber.default)(num) && num % 2 !== 0;\n};\n\nvar _default = isOdd;\nexports.default = _default;\n\n/***/ }),\n/* 654 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\nvar isPositive = function isPositive(num) {\n return (0, _isNumber.default)(num) && num > 0;\n};\n\nvar _default = isPositive;\nexports.default = _default;\n\n/***/ }),\n/* 655 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _each = _interopRequireDefault(__webpack_require__(84));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nvar _default = function _default(arr, fn) {\n if (!(0, _isArray.default)(arr)) {\n return undefined;\n }\n\n var max = arr[0];\n var maxData;\n\n if ((0, _isFunction.default)(fn)) {\n maxData = fn(arr[0]);\n } else {\n maxData = arr[0][fn];\n }\n\n var data;\n (0, _each.default)(arr, function (val) {\n if ((0, _isFunction.default)(fn)) {\n data = fn(val);\n } else {\n data = val[fn];\n }\n\n if (data > maxData) {\n max = val;\n maxData = data;\n }\n });\n return max;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 656 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _each = _interopRequireDefault(__webpack_require__(84));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nvar _default = function _default(arr, fn) {\n if (!(0, _isArray.default)(arr)) {\n return undefined;\n }\n\n var min = arr[0];\n var minData;\n\n if ((0, _isFunction.default)(fn)) {\n minData = fn(arr[0]);\n } else {\n minData = arr[0][fn];\n }\n\n var data;\n (0, _each.default)(arr, function (val) {\n if ((0, _isFunction.default)(fn)) {\n data = fn(val);\n } else {\n data = val[fn];\n }\n\n if (data < minData) {\n min = val;\n minData = data;\n }\n });\n return min;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 657 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar mod = function mod(n, m) {\n return (n % m + m) % m;\n};\n\nvar _default = mod;\nexports.default = _default;\n\n/***/ }),\n/* 658 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar DEGREE = 180 / Math.PI;\n\nvar toDegree = function toDegree(radian) {\n return DEGREE * radian;\n};\n\nvar _default = toDegree;\nexports.default = _default;\n\n/***/ }),\n/* 659 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = parseInt;\nexports.default = _default;\n\n/***/ }),\n/* 660 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar RADIAN = Math.PI / 180;\n\nvar toRadian = function toRadian(degree) {\n return RADIAN * degree;\n};\n\nvar _default = toRadian;\nexports.default = _default;\n\n/***/ }),\n/* 661 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _each = _interopRequireDefault(__webpack_require__(84));\n\nvar _default = _each.default;\nexports.default = _default;\n\n/***/ }),\n/* 662 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _has = _interopRequireDefault(__webpack_require__(372));\n\nvar _default = _has.default;\nexports.default = _default;\n\n/***/ }),\n/* 663 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _contains = _interopRequireDefault(__webpack_require__(174));\n\nvar _values = _interopRequireDefault(__webpack_require__(373));\n\nvar _default = function _default(obj, value) {\n return (0, _contains.default)((0, _values.default)(obj), value);\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 664 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _toString = _interopRequireDefault(__webpack_require__(138));\n\nvar lowerCase = function lowerCase(str) {\n return (0, _toString.default)(str).toLowerCase();\n};\n\nvar _default = lowerCase;\nexports.default = _default;\n\n/***/ }),\n/* 665 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _toString = _interopRequireDefault(__webpack_require__(138));\n\nvar lowerFirst = function lowerFirst(value) {\n var str = (0, _toString.default)(value);\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\nvar _default = lowerFirst;\nexports.default = _default;\n\n/***/ }),\n/* 666 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction substitute(str, o) {\n if (!str || !o) {\n return str;\n }\n\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n\n return o[name] === undefined ? '' : o[name];\n });\n}\n\nvar _default = substitute;\nexports.default = _default;\n\n/***/ }),\n/* 667 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _toString = _interopRequireDefault(__webpack_require__(138));\n\nvar upperCase = function upperCase(str) {\n return (0, _toString.default)(str).toUpperCase();\n};\n\nvar _default = upperCase;\nexports.default = _default;\n\n/***/ }),\n/* 668 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _toString = _interopRequireDefault(__webpack_require__(138));\n\nvar upperFirst = function upperFirst(value) {\n var str = (0, _toString.default)(value);\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nvar _default = upperFirst;\nexports.default = _default;\n\n/***/ }),\n/* 669 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isType = _interopRequireDefault(__webpack_require__(67));\n\n/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar isArguments = function isArguments(value) {\n return (0, _isType.default)(value, 'Arguments');\n};\n\nvar _default = isArguments;\nexports.default = _default;\n\n/***/ }),\n/* 670 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isType = _interopRequireDefault(__webpack_require__(67));\n\n/**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar isBoolean = function isBoolean(value) {\n return (0, _isType.default)(value, 'Boolean');\n};\n\nvar _default = isBoolean;\nexports.default = _default;\n\n/***/ }),\n/* 671 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isType = _interopRequireDefault(__webpack_require__(67));\n\nvar isDate = function isDate(value) {\n return (0, _isType.default)(value, 'Date');\n};\n\nvar _default = isDate;\nexports.default = _default;\n\n/***/ }),\n/* 672 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isType = _interopRequireDefault(__webpack_require__(67));\n\n/**\n * 是否是参数类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar isError = function isError(value) {\n return (0, _isType.default)(value, 'Error');\n};\n\nvar _default = isError;\nexports.default = _default;\n\n/***/ }),\n/* 673 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\n/**\n * 判断是否为有限数\n * @return {Boolean}\n */\nfunction _default(value) {\n return (0, _isNumber.default)(value) && isFinite(value);\n}\n\n/***/ }),\n/* 674 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar isNull = function isNull(value) {\n return value === null;\n};\n\nvar _default = isNull;\nexports.default = _default;\n\n/***/ }),\n/* 675 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isType = _interopRequireDefault(__webpack_require__(67));\n\nvar isRegExp = function isRegExp(str) {\n return (0, _isType.default)(str, 'RegExp');\n};\n\nvar _default = isRegExp;\nexports.default = _default;\n\n/***/ }),\n/* 676 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar isUndefined = function isUndefined(value) {\n return value === undefined;\n};\n\nvar _default = isUndefined;\nexports.default = _default;\n\n/***/ }),\n/* 677 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * 判断是否HTML元素\n * @return {Boolean} 是否HTML元素\n */\nvar isElement = function isElement(o) {\n return o instanceof Element || o instanceof HTMLDocument;\n};\n\nvar _default = isElement;\nexports.default = _default;\n\n/***/ }),\n/* 678 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requestAnimationFrame;\n\nfunction requestAnimationFrame(fn) {\n var method = window.requestAnimationFrame || window.webkitRequestAnimationFrame || // @ts-ignore\n window.mozRequestAnimationFrame || // @ts-ignore\n window.msRequestAnimationFrame || function (f) {\n return setTimeout(f, 16);\n };\n\n return method(fn);\n}\n\n;\n\n/***/ }),\n/* 679 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cancelAnimationFrame;\n\nfunction cancelAnimationFrame(handler) {\n var method = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || // @ts-ignore\n window.mozCancelAnimationFrame || // @ts-ignore\n window.msCancelAnimationFrame || clearTimeout;\n method(handler);\n}\n\n;\n\n/***/ }),\n/* 680 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _mix = _interopRequireDefault(__webpack_require__(238));\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\nvar augment = function augment() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var c = args[0];\n\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n\n if ((0, _isFunction.default)(obj)) {\n obj = obj.prototype;\n }\n\n (0, _mix.default)(c.prototype, obj);\n }\n};\n\nvar _default = augment;\nexports.default = _default;\n\n/***/ }),\n/* 681 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar clone = function clone(obj) {\n if ((0, _typeof2.default)(obj) !== 'object' || obj === null) {\n return obj;\n }\n\n var rst;\n\n if ((0, _isArray.default)(obj)) {\n rst = [];\n\n for (var i = 0, l = obj.length; i < l; i++) {\n if ((0, _typeof2.default)(obj[i]) === 'object' && obj[i] != null) {\n rst[i] = clone(obj[i]);\n } else {\n rst[i] = obj[i];\n }\n }\n } else {\n rst = {};\n\n for (var k in obj) {\n if ((0, _typeof2.default)(obj[k]) === 'object' && obj[k] != null) {\n rst[k] = clone(obj[k]);\n } else {\n rst[k] = obj[k];\n }\n }\n }\n\n return rst;\n};\n\nvar _default = clone;\nexports.default = _default;\n\n/***/ }),\n/* 682 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n\n var later = function later() {\n timeout = null;\n\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n\nvar _default = debounce;\nexports.default = _default;\n\n/***/ }),\n/* 683 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\n/**\n * _.memoize(calColor);\n * _.memoize(calColor, (...args) => args[0]);\n * @param f\n * @param resolver\n */\nvar _default = function _default(f, resolver) {\n if (!(0, _isFunction.default)(f)) {\n throw new TypeError('Expected a function');\n }\n\n var memoized = function memoized() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n } // 使用方法构造 key,如果不存在 resolver,则直接取第一个参数作为 key\n\n\n var key = resolver ? resolver.apply(this, args) : args[0];\n var cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = f.apply(this, args); // 缓存起来\n\n cache.set(key, result);\n return result;\n };\n\n memoized.cache = new Map();\n return memoized;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 684 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArray = _interopRequireDefault(__webpack_require__(39));\n\nvar _isPlainObject = _interopRequireDefault(__webpack_require__(137));\n\nvar MAX_MIX_LEVEL = 5;\n\nfunction _deepMix(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n var value = src[key];\n\n if (value !== null && (0, _isPlainObject.default)(value)) {\n if (!(0, _isPlainObject.default)(dist[key])) {\n dist[key] = {};\n }\n\n if (level < maxLevel) {\n _deepMix(dist[key], value, level + 1, maxLevel);\n } else {\n dist[key] = src[key];\n }\n } else if ((0, _isArray.default)(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else if (value !== undefined) {\n dist[key] = value;\n }\n }\n }\n} // todo 重写\n\n\nvar deepMix = function deepMix(rst) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n for (var i = 0; i < args.length; i += 1) {\n _deepMix(rst, args[i]);\n }\n\n return rst;\n};\n\nvar _default = deepMix;\nexports.default = _default;\n\n/***/ }),\n/* 685 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _mix = _interopRequireDefault(__webpack_require__(238));\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\nvar extend = function extend(subclass, superclass, overrides, staticOverrides) {\n // 如果只提供父类构造函数,则自动生成子类构造函数\n if (!(0, _isFunction.default)(superclass)) {\n overrides = superclass;\n superclass = subclass;\n\n subclass = function subclass() {};\n }\n\n var create = Object.create ? function (proto, c) {\n return Object.create(proto, {\n constructor: {\n value: c\n }\n });\n } : function (proto, c) {\n function Tmp() {}\n\n Tmp.prototype = proto;\n var o = new Tmp();\n o.constructor = c;\n return o;\n };\n var superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype\n\n subclass.prototype = (0, _mix.default)(superObj, subclass.prototype); // 指定子类的prototype\n\n subclass.superclass = create(superclass.prototype, superclass);\n (0, _mix.default)(superObj, overrides);\n (0, _mix.default)(subclass, staticOverrides);\n return subclass;\n};\n\nvar _default = extend;\nexports.default = _default;\n\n/***/ }),\n/* 686 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nvar indexOf = function indexOf(arr, obj) {\n if (!(0, _isArrayLike.default)(arr)) {\n return -1;\n }\n\n var m = Array.prototype.indexOf;\n\n if (m) {\n return m.call(arr, obj);\n }\n\n var index = -1;\n\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === obj) {\n index = i;\n break;\n }\n }\n\n return index;\n};\n\nvar _default = indexOf;\nexports.default = _default;\n\n/***/ }),\n/* 687 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNil = _interopRequireDefault(__webpack_require__(94));\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nvar _getType = _interopRequireDefault(__webpack_require__(374));\n\nvar _isPrototype = _interopRequireDefault(__webpack_require__(375));\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isEmpty(value) {\n /**\n * isEmpty(null) => true\n * isEmpty() => true\n * isEmpty(true) => true\n * isEmpty(1) => true\n * isEmpty([1, 2, 3]) => false\n * isEmpty('abc') => false\n * isEmpty({ a: 1 }) => false\n */\n if ((0, _isNil.default)(value)) {\n return true;\n }\n\n if ((0, _isArrayLike.default)(value)) {\n return !value.length;\n }\n\n var type = (0, _getType.default)(value);\n\n if (type === 'Map' || type === 'Set') {\n return !value.size;\n }\n\n if ((0, _isPrototype.default)(value)) {\n return !Object.keys(value).length;\n }\n\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n\nvar _default = isEmpty;\nexports.default = _default;\n\n/***/ }),\n/* 688 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isFunction = _interopRequireDefault(__webpack_require__(58));\n\nvar _isEqual = _interopRequireDefault(__webpack_require__(376));\n\n/**\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [fn] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * isEqualWith(array, other, customizer); // => true\n */\nvar _default = function _default(value, other, fn) {\n if (!(0, _isFunction.default)(fn)) {\n return (0, _isEqual.default)(value, other);\n }\n\n return !!fn(value, other);\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 689 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nvar map = function map(arr, func) {\n if (!(0, _isArrayLike.default)(arr)) {\n // @ts-ignore\n return arr;\n }\n\n var result = [];\n\n for (var index = 0; index < arr.length; index++) {\n var value = arr[index];\n result.push(func(value, index));\n }\n\n return result;\n};\n\nvar _default = map;\nexports.default = _default;\n\n/***/ }),\n/* 690 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isNil = _interopRequireDefault(__webpack_require__(94));\n\nvar _isObject = _interopRequireDefault(__webpack_require__(175));\n\nvar identity = function identity(v) {\n return v;\n};\n\nvar _default = function _default(object, func) {\n if (func === void 0) {\n func = identity;\n }\n\n var r = {};\n\n if ((0, _isObject.default)(object) && !(0, _isNil.default)(object)) {\n Object.keys(object).forEach(function (key) {\n // @ts-ignore\n r[key] = func(object[key], key);\n });\n }\n\n return r;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 691 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isString = _interopRequireDefault(__webpack_require__(102));\n\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param key\n * @param defaultValue\n */\nvar _default = function _default(obj, key, defaultValue) {\n var p = 0;\n var keyArr = (0, _isString.default)(key) ? key.split('.') : key;\n\n while (obj && p < keyArr.length) {\n obj = obj[keyArr[p++]];\n }\n\n return obj === undefined || p < keyArr.length ? defaultValue : obj;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 692 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isObject = _interopRequireDefault(__webpack_require__(175));\n\nvar _isString = _interopRequireDefault(__webpack_require__(102));\n\nvar _isNumber = _interopRequireDefault(__webpack_require__(85));\n\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param path\n * @param value\n */\nvar _default = function _default(obj, path, value) {\n var o = obj;\n var keyArr = (0, _isString.default)(path) ? path.split('.') : path;\n keyArr.forEach(function (key, idx) {\n // 不是最后一个\n if (idx < keyArr.length - 1) {\n if (!(0, _isObject.default)(o[key])) {\n o[key] = (0, _isNumber.default)(keyArr[idx + 1]) ? [] : {};\n }\n\n o = o[key];\n } else {\n o[key] = value;\n }\n });\n return obj;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 693 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _each = _interopRequireDefault(__webpack_require__(84));\n\nvar _isPlainObject = _interopRequireDefault(__webpack_require__(137));\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar _default = function _default(object, keys) {\n if (object === null || !(0, _isPlainObject.default)(object)) {\n return {};\n }\n\n var result = {};\n (0, _each.default)(keys, function (key) {\n if (hasOwnProperty.call(object, key)) {\n result[key] = object[key];\n }\n });\n return result;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 694 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 695 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nvar _default = function _default(value) {\n return (0, _isArrayLike.default)(value) ? Array.prototype.slice.call(value) : [];\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 696 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar map = {};\n\nvar _default = function _default(prefix) {\n prefix = prefix || 'g';\n\n if (!map[prefix]) {\n map[prefix] = 1;\n } else {\n map[prefix] += 1;\n }\n\n return prefix + map[prefix];\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 697 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default() {};\n\nexports.default = _default;\n\n/***/ }),\n/* 698 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _default = function _default(v) {\n return v;\n};\n\nexports.default = _default;\n\n/***/ }),\n/* 699 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = size;\n\nvar _isNil = _interopRequireDefault(__webpack_require__(94));\n\nvar _isArrayLike = _interopRequireDefault(__webpack_require__(57));\n\nfunction size(o) {\n if ((0, _isNil.default)(o)) {\n return 0;\n }\n\n if ((0, _isArrayLike.default)(o)) {\n return o.length;\n }\n\n return Object.keys(o).length;\n}\n\n/***/ }),\n/* 700 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/**\n * k-v 存储\n */\nvar default_1 =\n/** @class */\nfunction () {\n function default_1() {\n this.map = {};\n }\n\n default_1.prototype.has = function (key) {\n return this.map[key] !== undefined;\n };\n\n default_1.prototype.get = function (key, def) {\n var v = this.map[key];\n return v === undefined ? def : v;\n };\n\n default_1.prototype.set = function (key, value) {\n this.map[key] = value;\n };\n\n default_1.prototype.clear = function () {\n this.map = {};\n };\n\n default_1.prototype.delete = function (key) {\n delete this.map[key];\n };\n\n default_1.prototype.size = function () {\n return Object.keys(this.map).length;\n };\n\n return default_1;\n}();\n\nvar _default = default_1;\nexports.default = _default;\n\n/***/ }),\n/* 701 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 702 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 703 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _detectBrowser = __webpack_require__(240);\n\nvar _container = _interopRequireDefault(__webpack_require__(381));\n\nvar _util = __webpack_require__(103);\n\nvar _timeline = _interopRequireDefault(__webpack_require__(709));\n\nvar _eventContoller = _interopRequireDefault(__webpack_require__(741));\n\nvar PX_SUFFIX = 'px';\nvar browser = (0, _detectBrowser.detect)();\nvar isFirefox = browser && browser.name === 'firefox';\n\nvar Canvas =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Canvas, _super);\n\n function Canvas(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.initContainer();\n\n _this.initDom();\n\n _this.initEvents();\n\n _this.initTimeline();\n\n return _this;\n }\n\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this); // set default cursor style for canvas\n\n\n cfg['cursor'] = 'default'; // CSS transform 目前尚未经过长时间验证,为了避免影响上层业务,默认关闭,上层按需开启\n\n cfg['supportCSSTransform'] = false;\n return cfg;\n };\n /**\n * @protected\n * 初始化容器\n */\n\n\n Canvas.prototype.initContainer = function () {\n var container = this.get('container');\n\n if ((0, _util.isString)(container)) {\n container = document.getElementById(container);\n this.set('container', container);\n }\n };\n /**\n * @protected\n * 初始化 DOM\n */\n\n\n Canvas.prototype.initDom = function () {\n var el = this.createDom();\n this.set('el', el); // 附加到容器\n\n var container = this.get('container');\n container.appendChild(el); // 设置初始宽度\n\n this.setDOMSize(this.get('width'), this.get('height'));\n };\n /**\n * @protected\n * 初始化绑定的事件\n */\n\n\n Canvas.prototype.initEvents = function () {\n var eventController = new _eventContoller.default({\n canvas: this\n });\n eventController.init();\n this.set('eventController', eventController);\n };\n /**\n * @protected\n * 初始化时间轴\n */\n\n\n Canvas.prototype.initTimeline = function () {\n var timeline = new _timeline.default(this);\n this.set('timeline', timeline);\n };\n /**\n * @protected\n * 修改画布对应的 DOM 的大小\n * @param {number} width 宽度\n * @param {number} height 高度\n */\n\n\n Canvas.prototype.setDOMSize = function (width, height) {\n var el = this.get('el');\n\n if (_util.isBrowser) {\n el.style.width = width + PX_SUFFIX;\n el.style.height = height + PX_SUFFIX;\n }\n }; // 实现接口\n\n\n Canvas.prototype.changeSize = function (width, height) {\n this.setDOMSize(width, height);\n this.set('width', width);\n this.set('height', height);\n this.onCanvasChange('changeSize');\n };\n /**\n * 获取当前的渲染引擎\n * @return {Renderer} 返回当前的渲染引擎\n */\n\n\n Canvas.prototype.getRenderer = function () {\n return this.get('renderer');\n };\n /**\n * 获取画布的 cursor 样式\n * @return {Cursor}\n */\n\n\n Canvas.prototype.getCursor = function () {\n return this.get('cursor');\n };\n /**\n * 设置画布的 cursor 样式\n * @param {Cursor} cursor cursor 样式\n */\n\n\n Canvas.prototype.setCursor = function (cursor) {\n this.set('cursor', cursor);\n var el = this.get('el');\n\n if (_util.isBrowser && el) {\n // 直接设置样式,不等待鼠标移动时再设置\n el.style.cursor = cursor;\n }\n }; // 实现接口\n\n\n Canvas.prototype.getPointByEvent = function (ev) {\n var supportCSSTransform = this.get('supportCSSTransform');\n\n if (supportCSSTransform) {\n // For Firefox <= 38\n if (isFirefox && !(0, _util.isNil)(ev.layerX) && ev.layerX !== ev.offsetX) {\n return {\n x: ev.layerX,\n y: ev.layerY\n };\n }\n\n if (!(0, _util.isNil)(ev.offsetX)) {\n // For IE6+, Firefox >= 39, Chrome, Safari, Opera\n return {\n x: ev.offsetX,\n y: ev.offsetY\n };\n }\n } // should calculate by self for other cases, like Safari in ios\n // TODO: support CSS transform\n\n\n var _a = this.getClientByEvent(ev),\n clientX = _a.x,\n clientY = _a.y;\n\n return this.getPointByClient(clientX, clientY);\n }; // 获取 touch 事件的 clientX 和 clientY 需要单独处理\n\n\n Canvas.prototype.getClientByEvent = function (ev) {\n var clientInfo = ev;\n\n if (ev.touches) {\n if (ev.type === 'touchend') {\n clientInfo = ev.changedTouches[0];\n } else {\n clientInfo = ev.touches[0];\n }\n }\n\n return {\n x: clientInfo.clientX,\n y: clientInfo.clientY\n };\n }; // 实现接口\n\n\n Canvas.prototype.getPointByClient = function (clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: clientX - bbox.left,\n y: clientY - bbox.top\n };\n }; // 实现接口\n\n\n Canvas.prototype.getClientByPoint = function (x, y) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: x + bbox.left,\n y: y + bbox.top\n };\n }; // 实现接口\n\n\n Canvas.prototype.draw = function () {};\n /**\n * @protected\n * 销毁 DOM 容器\n */\n\n\n Canvas.prototype.removeDom = function () {\n var el = this.get('el');\n el.parentNode.removeChild(el);\n };\n /**\n * @protected\n * 清理所有的事件\n */\n\n\n Canvas.prototype.clearEvents = function () {\n var eventController = this.get('eventController');\n eventController.destroy();\n };\n\n Canvas.prototype.isCanvas = function () {\n return true;\n };\n\n Canvas.prototype.getParent = function () {\n return null;\n };\n\n Canvas.prototype.destroy = function () {\n var timeline = this.get('timeline');\n\n if (this.get('destroyed')) {\n return;\n }\n\n this.clear(); // 同初始化时相反顺序调用\n\n if (timeline) {\n // 画布销毁时自动停止动画\n timeline.stop();\n }\n\n this.clearEvents();\n this.removeDom();\n\n _super.prototype.destroy.call(this);\n };\n\n return Canvas;\n}(_container.default);\n\nvar _default = Canvas;\nexports.default = _default;\n\n/***/ }),\n/* 704 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};\n\n/***/ }),\n/* 705 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.create = create;\nexports.clone = clone;\nexports.copy = copy;\nexports.identity = identity;\nexports.fromValues = fromValues;\nexports.set = set;\nexports.transpose = transpose;\nexports.invert = invert;\nexports.adjoint = adjoint;\nexports.determinant = determinant;\nexports.multiply = multiply;\nexports.rotate = rotate;\nexports.scale = scale;\nexports.fromRotation = fromRotation;\nexports.fromScaling = fromScaling;\nexports.str = str;\nexports.frob = frob;\nexports.LDU = LDU;\nexports.add = add;\nexports.subtract = subtract;\nexports.exactEquals = exactEquals;\nexports.equals = equals;\nexports.multiplyScalar = multiplyScalar;\nexports.multiplyScalarAndAdd = multiplyScalarAndAdd;\nexports.sub = exports.mul = void 0;\n\nvar glMatrix = _interopRequireWildcard(__webpack_require__(76));\n\n/**\r\n * 2x2 Matrix\r\n * @module mat2\r\n */\n\n/**\r\n * Creates a new identity mat2\r\n *\r\n * @returns {mat2} a new 2x2 matrix\r\n */\nfunction create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n }\n\n out[0] = 1;\n out[3] = 1;\n return out;\n}\n/**\r\n * Creates a new mat2 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat2} a matrix to clone\r\n * @returns {mat2} a new 2x2 matrix\r\n */\n\n\nfunction clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Copy the values from one mat2 to another\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the source matrix\r\n * @returns {mat2} out\r\n */\n\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set a mat2 to the identity matrix\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @returns {mat2} out\r\n */\n\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\r\n * Create a new mat2 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out A new 2x2 matrix\r\n */\n\n\nfunction fromValues(m00, m01, m10, m11) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = m00;\n out[1] = m01;\n out[2] = m10;\n out[3] = m11;\n return out;\n}\n/**\r\n * Set the components of a mat2 to the given values\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 2)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 3)\r\n * @returns {mat2} out\r\n */\n\n\nfunction set(out, m00, m01, m10, m11) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m10;\n out[3] = m11;\n return out;\n}\n/**\r\n * Transpose the values of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the source matrix\r\n * @returns {mat2} out\r\n */\n\n\nfunction transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache\n // some values\n if (out === a) {\n var a1 = a[1];\n out[1] = a[2];\n out[2] = a1;\n } else {\n out[0] = a[0];\n out[1] = a[2];\n out[2] = a[1];\n out[3] = a[3];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the source matrix\r\n * @returns {mat2} out\r\n */\n\n\nfunction invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3]; // Calculate the determinant\n\n var det = a0 * a3 - a2 * a1;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = a3 * det;\n out[1] = -a1 * det;\n out[2] = -a2 * det;\n out[3] = a0 * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the source matrix\r\n * @returns {mat2} out\r\n */\n\n\nfunction adjoint(out, a) {\n // Caching this value is nessecary if out == a\n var a0 = a[0];\n out[0] = a[3];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a0;\n return out;\n}\n/**\r\n * Calculates the determinant of a mat2\r\n *\r\n * @param {ReadonlyMat2} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\n\nfunction determinant(a) {\n return a[0] * a[3] - a[2] * a[1];\n}\n/**\r\n * Multiplies two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the first operand\r\n * @param {ReadonlyMat2} b the second operand\r\n * @returns {mat2} out\r\n */\n\n\nfunction multiply(out, a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n return out;\n}\n/**\r\n * Rotates a mat2 by the given angle\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\n\n\nfunction rotate(out, a, rad) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n return out;\n}\n/**\r\n * Scales the mat2 by the dimensions in the given vec2\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the matrix to rotate\r\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\r\n * @returns {mat2} out\r\n **/\n\n\nfunction scale(out, a, v) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var v0 = v[0],\n v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2} out\r\n */\n\n\nfunction fromRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = -s;\n out[3] = c;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2.identity(dest);\r\n * mat2.scale(dest, dest, vec);\r\n *\r\n * @param {mat2} out mat2 receiving operation result\r\n * @param {ReadonlyVec2} v Scaling vector\r\n * @returns {mat2} out\r\n */\n\n\nfunction fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = v[1];\n return out;\n}\n/**\r\n * Returns a string representation of a mat2\r\n *\r\n * @param {ReadonlyMat2} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\n\nfunction str(a) {\n return \"mat2(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat2\r\n *\r\n * @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\n\nfunction frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3]);\n}\n/**\r\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\r\n * @param {ReadonlyMat2} L the lower triangular matrix\r\n * @param {ReadonlyMat2} D the diagonal matrix\r\n * @param {ReadonlyMat2} U the upper triangular matrix\r\n * @param {ReadonlyMat2} a the input matrix to factorize\r\n */\n\n\nfunction LDU(L, D, U, a) {\n L[2] = a[2] / a[0];\n U[0] = a[0];\n U[1] = a[1];\n U[3] = a[3] - L[2] * U[1];\n return [L, D, U];\n}\n/**\r\n * Adds two mat2's\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the first operand\r\n * @param {ReadonlyMat2} b the second operand\r\n * @returns {mat2} out\r\n */\n\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the first operand\r\n * @param {ReadonlyMat2} b the second operand\r\n * @returns {mat2} out\r\n */\n\n\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat2} a The first matrix.\r\n * @param {ReadonlyMat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat2} a The first matrix.\r\n * @param {ReadonlyMat2} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\n\nfunction equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2} out the receiving matrix\r\n * @param {ReadonlyMat2} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2} out\r\n */\n\n\nfunction multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\r\n * Adds two mat2's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2} out the receiving vector\r\n * @param {ReadonlyMat2} a the first operand\r\n * @param {ReadonlyMat2} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2} out\r\n */\n\n\nfunction multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\r\n * Alias for {@link mat2.multiply}\r\n * @function\r\n */\n\n\nvar mul = multiply;\n/**\r\n * Alias for {@link mat2.subtract}\r\n * @function\r\n */\n\nexports.mul = mul;\nvar sub = subtract;\nexports.sub = sub;\n\n/***/ }),\n/* 706 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.create = create;\nexports.clone = clone;\nexports.copy = copy;\nexports.identity = identity;\nexports.fromValues = fromValues;\nexports.set = set;\nexports.invert = invert;\nexports.determinant = determinant;\nexports.multiply = multiply;\nexports.rotate = rotate;\nexports.scale = scale;\nexports.translate = translate;\nexports.fromRotation = fromRotation;\nexports.fromScaling = fromScaling;\nexports.fromTranslation = fromTranslation;\nexports.str = str;\nexports.frob = frob;\nexports.add = add;\nexports.subtract = subtract;\nexports.multiplyScalar = multiplyScalar;\nexports.multiplyScalarAndAdd = multiplyScalarAndAdd;\nexports.exactEquals = exactEquals;\nexports.equals = equals;\nexports.sub = exports.mul = void 0;\n\nvar glMatrix = _interopRequireWildcard(__webpack_require__(76));\n\n/**\r\n * 2x3 Matrix\r\n * @module mat2d\r\n * @description\r\n * A mat2d contains six elements defined as:\r\n * \r\n * [a, b,\r\n * c, d,\r\n * tx, ty]\r\n *
\r\n * This is a short form for the 3x3 matrix:\r\n * \r\n * [a, b, 0,\r\n * c, d, 0,\r\n * tx, ty, 1]\r\n *
\r\n * The last column is ignored so the array is shorter and operations are faster.\r\n */\n\n/**\r\n * Creates a new identity mat2d\r\n *\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\nfunction create() {\n var out = new glMatrix.ARRAY_TYPE(6);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[4] = 0;\n out[5] = 0;\n }\n\n out[0] = 1;\n out[3] = 1;\n return out;\n}\n/**\r\n * Creates a new mat2d initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat2d} a matrix to clone\r\n * @returns {mat2d} a new 2x3 matrix\r\n */\n\n\nfunction clone(a) {\n var out = new glMatrix.ARRAY_TYPE(6);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n}\n/**\r\n * Copy the values from one mat2d to another\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\n\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n}\n/**\r\n * Set a mat2d to the identity matrix\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @returns {mat2d} out\r\n */\n\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n/**\r\n * Create a new mat2d with the given values\r\n *\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} A new mat2d\r\n */\n\n\nfunction fromValues(a, b, c, d, tx, ty) {\n var out = new glMatrix.ARRAY_TYPE(6);\n out[0] = a;\n out[1] = b;\n out[2] = c;\n out[3] = d;\n out[4] = tx;\n out[5] = ty;\n return out;\n}\n/**\r\n * Set the components of a mat2d to the given values\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {Number} a Component A (index 0)\r\n * @param {Number} b Component B (index 1)\r\n * @param {Number} c Component C (index 2)\r\n * @param {Number} d Component D (index 3)\r\n * @param {Number} tx Component TX (index 4)\r\n * @param {Number} ty Component TY (index 5)\r\n * @returns {mat2d} out\r\n */\n\n\nfunction set(out, a, b, c, d, tx, ty) {\n out[0] = a;\n out[1] = b;\n out[2] = c;\n out[3] = d;\n out[4] = tx;\n out[5] = ty;\n return out;\n}\n/**\r\n * Inverts a mat2d\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the source matrix\r\n * @returns {mat2d} out\r\n */\n\n\nfunction invert(out, a) {\n var aa = a[0],\n ab = a[1],\n ac = a[2],\n ad = a[3];\n var atx = a[4],\n aty = a[5];\n var det = aa * ad - ab * ac;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n}\n/**\r\n * Calculates the determinant of a mat2d\r\n *\r\n * @param {ReadonlyMat2d} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\n\nfunction determinant(a) {\n return a[0] * a[3] - a[1] * a[2];\n}\n/**\r\n * Multiplies two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the first operand\r\n * @param {ReadonlyMat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\n\n\nfunction multiply(out, a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n out[4] = a0 * b4 + a2 * b5 + a4;\n out[5] = a1 * b4 + a3 * b5 + a5;\n return out;\n}\n/**\r\n * Rotates a mat2d by the given angle\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\n\n\nfunction rotate(out, a, rad) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5];\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n out[4] = a4;\n out[5] = a5;\n return out;\n}\n/**\r\n * Scales the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to translate\r\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\r\n * @returns {mat2d} out\r\n **/\n\n\nfunction scale(out, a, v) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5];\n var v0 = v[0],\n v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n out[4] = a4;\n out[5] = a5;\n return out;\n}\n/**\r\n * Translates the mat2d by the dimensions in the given vec2\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to translate\r\n * @param {ReadonlyVec2} v the vec2 to translate the matrix by\r\n * @returns {mat2d} out\r\n **/\n\n\nfunction translate(out, a, v) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5];\n var v0 = v[0],\n v1 = v[1];\n out[0] = a0;\n out[1] = a1;\n out[2] = a2;\n out[3] = a3;\n out[4] = a0 * v0 + a2 * v1 + a4;\n out[5] = a1 * v0 + a3 * v1 + a5;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.rotate(dest, dest, rad);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat2d} out\r\n */\n\n\nfunction fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = -s;\n out[3] = c;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.scale(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {ReadonlyVec2} v Scaling vector\r\n * @returns {mat2d} out\r\n */\n\n\nfunction fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = v[1];\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat2d.identity(dest);\r\n * mat2d.translate(dest, dest, vec);\r\n *\r\n * @param {mat2d} out mat2d receiving operation result\r\n * @param {ReadonlyVec2} v Translation vector\r\n * @returns {mat2d} out\r\n */\n\n\nfunction fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = v[0];\n out[5] = v[1];\n return out;\n}\n/**\r\n * Returns a string representation of a mat2d\r\n *\r\n * @param {ReadonlyMat2d} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\n\nfunction str(a) {\n return \"mat2d(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \")\";\n}\n/**\r\n * Returns Frobenius norm of a mat2d\r\n *\r\n * @param {ReadonlyMat2d} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\n\nfunction frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], 1);\n}\n/**\r\n * Adds two mat2d's\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the first operand\r\n * @param {ReadonlyMat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\n\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the first operand\r\n * @param {ReadonlyMat2d} b the second operand\r\n * @returns {mat2d} out\r\n */\n\n\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat2d} out the receiving matrix\r\n * @param {ReadonlyMat2d} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix's elements by\r\n * @returns {mat2d} out\r\n */\n\n\nfunction multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n return out;\n}\n/**\r\n * Adds two mat2d's after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat2d} out the receiving vector\r\n * @param {ReadonlyMat2d} a the first operand\r\n * @param {ReadonlyMat2d} b the second operand\r\n * @param {Number} scale the amount to scale b's elements by before adding\r\n * @returns {mat2d} out\r\n */\n\n\nfunction multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat2d} a The first matrix.\r\n * @param {ReadonlyMat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat2d} a The first matrix.\r\n * @param {ReadonlyMat2d} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\n\nfunction equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5));\n}\n/**\r\n * Alias for {@link mat2d.multiply}\r\n * @function\r\n */\n\n\nvar mul = multiply;\n/**\r\n * Alias for {@link mat2d.subtract}\r\n * @function\r\n */\n\nexports.mul = mul;\nvar sub = subtract;\nexports.sub = sub;\n\n/***/ }),\n/* 707 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.create = create;\nexports.clone = clone;\nexports.fromValues = fromValues;\nexports.fromRotationTranslationValues = fromRotationTranslationValues;\nexports.fromRotationTranslation = fromRotationTranslation;\nexports.fromTranslation = fromTranslation;\nexports.fromRotation = fromRotation;\nexports.fromMat4 = fromMat4;\nexports.copy = copy;\nexports.identity = identity;\nexports.set = set;\nexports.getDual = getDual;\nexports.setDual = setDual;\nexports.getTranslation = getTranslation;\nexports.translate = translate;\nexports.rotateX = rotateX;\nexports.rotateY = rotateY;\nexports.rotateZ = rotateZ;\nexports.rotateByQuatAppend = rotateByQuatAppend;\nexports.rotateByQuatPrepend = rotateByQuatPrepend;\nexports.rotateAroundAxis = rotateAroundAxis;\nexports.add = add;\nexports.multiply = multiply;\nexports.scale = scale;\nexports.lerp = lerp;\nexports.invert = invert;\nexports.conjugate = conjugate;\nexports.normalize = normalize;\nexports.str = str;\nexports.exactEquals = exactEquals;\nexports.equals = equals;\nexports.sqrLen = exports.squaredLength = exports.len = exports.length = exports.dot = exports.mul = exports.setReal = exports.getReal = void 0;\n\nvar glMatrix = _interopRequireWildcard(__webpack_require__(76));\n\nvar quat = _interopRequireWildcard(__webpack_require__(386));\n\nvar mat4 = _interopRequireWildcard(__webpack_require__(385));\n\n/**\r\n * Dual Quaternion
\r\n * Format: [real, dual]
\r\n * Quaternion format: XYZW
\r\n * Make sure to have normalized dual quaternions, otherwise the functions may not work as intended.
\r\n * @module quat2\r\n */\n\n/**\r\n * Creates a new identity dual quat\r\n *\r\n * @returns {quat2} a new dual quaternion [real -> rotation, dual -> translation]\r\n */\nfunction create() {\n var dq = new glMatrix.ARRAY_TYPE(8);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n dq[0] = 0;\n dq[1] = 0;\n dq[2] = 0;\n dq[4] = 0;\n dq[5] = 0;\n dq[6] = 0;\n dq[7] = 0;\n }\n\n dq[3] = 1;\n return dq;\n}\n/**\r\n * Creates a new quat initialized with values from an existing quaternion\r\n *\r\n * @param {ReadonlyQuat2} a dual quaternion to clone\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\n\n\nfunction clone(a) {\n var dq = new glMatrix.ARRAY_TYPE(8);\n dq[0] = a[0];\n dq[1] = a[1];\n dq[2] = a[2];\n dq[3] = a[3];\n dq[4] = a[4];\n dq[5] = a[5];\n dq[6] = a[6];\n dq[7] = a[7];\n return dq;\n}\n/**\r\n * Creates a new dual quat initialized with the given values\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\n\n\nfunction fromValues(x1, y1, z1, w1, x2, y2, z2, w2) {\n var dq = new glMatrix.ARRAY_TYPE(8);\n dq[0] = x1;\n dq[1] = y1;\n dq[2] = z1;\n dq[3] = w1;\n dq[4] = x2;\n dq[5] = y2;\n dq[6] = z2;\n dq[7] = w2;\n return dq;\n}\n/**\r\n * Creates a new dual quat from the given values (quat and translation)\r\n *\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component (translation)\r\n * @param {Number} y2 Y component (translation)\r\n * @param {Number} z2 Z component (translation)\r\n * @returns {quat2} new dual quaternion\r\n * @function\r\n */\n\n\nfunction fromRotationTranslationValues(x1, y1, z1, w1, x2, y2, z2) {\n var dq = new glMatrix.ARRAY_TYPE(8);\n dq[0] = x1;\n dq[1] = y1;\n dq[2] = z1;\n dq[3] = w1;\n var ax = x2 * 0.5,\n ay = y2 * 0.5,\n az = z2 * 0.5;\n dq[4] = ax * w1 + ay * z1 - az * y1;\n dq[5] = ay * w1 + az * x1 - ax * z1;\n dq[6] = az * w1 + ax * y1 - ay * x1;\n dq[7] = -ax * x1 - ay * y1 - az * z1;\n return dq;\n}\n/**\r\n * Creates a dual quat from a quaternion and a translation\r\n *\r\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\r\n * @param {ReadonlyQuat} q a normalized quaternion\r\n * @param {ReadonlyVec3} t tranlation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\n\n\nfunction fromRotationTranslation(out, q, t) {\n var ax = t[0] * 0.5,\n ay = t[1] * 0.5,\n az = t[2] * 0.5,\n bx = q[0],\n by = q[1],\n bz = q[2],\n bw = q[3];\n out[0] = bx;\n out[1] = by;\n out[2] = bz;\n out[3] = bw;\n out[4] = ax * bw + ay * bz - az * by;\n out[5] = ay * bw + az * bx - ax * bz;\n out[6] = az * bw + ax * by - ay * bx;\n out[7] = -ax * bx - ay * by - az * bz;\n return out;\n}\n/**\r\n * Creates a dual quat from a translation\r\n *\r\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\r\n * @param {ReadonlyVec3} t translation vector\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\n\n\nfunction fromTranslation(out, t) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = t[0] * 0.5;\n out[5] = t[1] * 0.5;\n out[6] = t[2] * 0.5;\n out[7] = 0;\n return out;\n}\n/**\r\n * Creates a dual quat from a quaternion\r\n *\r\n * @param {ReadonlyQuat2} dual quaternion receiving operation result\r\n * @param {ReadonlyQuat} q the quaternion\r\n * @returns {quat2} dual quaternion receiving operation result\r\n * @function\r\n */\n\n\nfunction fromRotation(out, q) {\n out[0] = q[0];\n out[1] = q[1];\n out[2] = q[2];\n out[3] = q[3];\n out[4] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n return out;\n}\n/**\r\n * Creates a new dual quat from a matrix (4x4)\r\n *\r\n * @param {quat2} out the dual quaternion\r\n * @param {ReadonlyMat4} a the matrix\r\n * @returns {quat2} dual quat receiving operation result\r\n * @function\r\n */\n\n\nfunction fromMat4(out, a) {\n //TODO Optimize this\n var outer = quat.create();\n mat4.getRotation(outer, a);\n var t = new glMatrix.ARRAY_TYPE(3);\n mat4.getTranslation(t, a);\n fromRotationTranslation(out, outer, t);\n return out;\n}\n/**\r\n * Copy the values from one dual quat to another\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the source dual quaternion\r\n * @returns {quat2} out\r\n * @function\r\n */\n\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n return out;\n}\n/**\r\n * Set a dual quat to the identity dual quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @returns {quat2} out\r\n */\n\n\nfunction identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n return out;\n}\n/**\r\n * Set the components of a dual quat to the given values\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {Number} x1 X component\r\n * @param {Number} y1 Y component\r\n * @param {Number} z1 Z component\r\n * @param {Number} w1 W component\r\n * @param {Number} x2 X component\r\n * @param {Number} y2 Y component\r\n * @param {Number} z2 Z component\r\n * @param {Number} w2 W component\r\n * @returns {quat2} out\r\n * @function\r\n */\n\n\nfunction set(out, x1, y1, z1, w1, x2, y2, z2, w2) {\n out[0] = x1;\n out[1] = y1;\n out[2] = z1;\n out[3] = w1;\n out[4] = x2;\n out[5] = y2;\n out[6] = z2;\n out[7] = w2;\n return out;\n}\n/**\r\n * Gets the real part of a dual quat\r\n * @param {quat} out real part\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @return {quat} real part\r\n */\n\n\nvar getReal = quat.copy;\n/**\r\n * Gets the dual part of a dual quat\r\n * @param {quat} out dual part\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @return {quat} dual part\r\n */\n\nexports.getReal = getReal;\n\nfunction getDual(out, a) {\n out[0] = a[4];\n out[1] = a[5];\n out[2] = a[6];\n out[3] = a[7];\n return out;\n}\n/**\r\n * Set the real component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {ReadonlyQuat} q a quaternion representing the real part\r\n * @returns {quat2} out\r\n * @function\r\n */\n\n\nvar setReal = quat.copy;\n/**\r\n * Set the dual component of a dual quat to the given quaternion\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {ReadonlyQuat} q a quaternion representing the dual part\r\n * @returns {quat2} out\r\n * @function\r\n */\n\nexports.setReal = setReal;\n\nfunction setDual(out, q) {\n out[4] = q[0];\n out[5] = q[1];\n out[6] = q[2];\n out[7] = q[3];\n return out;\n}\n/**\r\n * Gets the translation of a normalized dual quat\r\n * @param {vec3} out translation\r\n * @param {ReadonlyQuat2} a Dual Quaternion to be decomposed\r\n * @return {vec3} translation\r\n */\n\n\nfunction getTranslation(out, a) {\n var ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7],\n bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3];\n out[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n out[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n out[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n return out;\n}\n/**\r\n * Translates a dual quat by the given vector\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to translate\r\n * @param {ReadonlyVec3} v vector to translate by\r\n * @returns {quat2} out\r\n */\n\n\nfunction translate(out, a, v) {\n var ax1 = a[0],\n ay1 = a[1],\n az1 = a[2],\n aw1 = a[3],\n bx1 = v[0] * 0.5,\n by1 = v[1] * 0.5,\n bz1 = v[2] * 0.5,\n ax2 = a[4],\n ay2 = a[5],\n az2 = a[6],\n aw2 = a[7];\n out[0] = ax1;\n out[1] = ay1;\n out[2] = az1;\n out[3] = aw1;\n out[4] = aw1 * bx1 + ay1 * bz1 - az1 * by1 + ax2;\n out[5] = aw1 * by1 + az1 * bx1 - ax1 * bz1 + ay2;\n out[6] = aw1 * bz1 + ax1 * by1 - ay1 * bx1 + az2;\n out[7] = -ax1 * bx1 - ay1 * by1 - az1 * bz1 + aw2;\n return out;\n}\n/**\r\n * Rotates a dual quat around the X axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateX(out, a, rad) {\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7],\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\n az1 = az * bw + aw * bz + ax * by - ay * bx,\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\n quat.rotateX(out, a, rad);\n bx = out[0];\n by = out[1];\n bz = out[2];\n bw = out[3];\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n return out;\n}\n/**\r\n * Rotates a dual quat around the Y axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateY(out, a, rad) {\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7],\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\n az1 = az * bw + aw * bz + ax * by - ay * bx,\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\n quat.rotateY(out, a, rad);\n bx = out[0];\n by = out[1];\n bz = out[2];\n bw = out[3];\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n return out;\n}\n/**\r\n * Rotates a dual quat around the Z axis\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @param {number} rad how far should the rotation be\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateZ(out, a, rad) {\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7],\n ax1 = ax * bw + aw * bx + ay * bz - az * by,\n ay1 = ay * bw + aw * by + az * bx - ax * bz,\n az1 = az * bw + aw * bz + ax * by - ay * bx,\n aw1 = aw * bw - ax * bx - ay * by - az * bz;\n quat.rotateZ(out, a, rad);\n bx = out[0];\n by = out[1];\n bz = out[2];\n bw = out[3];\n out[4] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n out[5] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n out[6] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n out[7] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n return out;\n}\n/**\r\n * Rotates a dual quat by a given quaternion (a * q)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @param {ReadonlyQuat} q quaternion to rotate by\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateByQuatAppend(out, a, q) {\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3],\n ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n out[0] = ax * qw + aw * qx + ay * qz - az * qy;\n out[1] = ay * qw + aw * qy + az * qx - ax * qz;\n out[2] = az * qw + aw * qz + ax * qy - ay * qx;\n out[3] = aw * qw - ax * qx - ay * qy - az * qz;\n ax = a[4];\n ay = a[5];\n az = a[6];\n aw = a[7];\n out[4] = ax * qw + aw * qx + ay * qz - az * qy;\n out[5] = ay * qw + aw * qy + az * qx - ax * qz;\n out[6] = az * qw + aw * qz + ax * qy - ay * qx;\n out[7] = aw * qw - ax * qx - ay * qy - az * qz;\n return out;\n}\n/**\r\n * Rotates a dual quat by a given quaternion (q * a)\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat} q quaternion to rotate by\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateByQuatPrepend(out, q, a) {\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3],\n bx = a[0],\n by = a[1],\n bz = a[2],\n bw = a[3];\n out[0] = qx * bw + qw * bx + qy * bz - qz * by;\n out[1] = qy * bw + qw * by + qz * bx - qx * bz;\n out[2] = qz * bw + qw * bz + qx * by - qy * bx;\n out[3] = qw * bw - qx * bx - qy * by - qz * bz;\n bx = a[4];\n by = a[5];\n bz = a[6];\n bw = a[7];\n out[4] = qx * bw + qw * bx + qy * bz - qz * by;\n out[5] = qy * bw + qw * by + qz * bx - qx * bz;\n out[6] = qz * bw + qw * bz + qx * by - qy * bx;\n out[7] = qw * bw - qx * bx - qy * by - qz * bz;\n return out;\n}\n/**\r\n * Rotates a dual quat around a given axis. Does the normalisation automatically\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the dual quaternion to rotate\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @param {Number} rad how far the rotation should be\r\n * @returns {quat2} out\r\n */\n\n\nfunction rotateAroundAxis(out, a, axis, rad) {\n //Special case for rad = 0\n if (Math.abs(rad) < glMatrix.EPSILON) {\n return copy(out, a);\n }\n\n var axisLength = Math.hypot(axis[0], axis[1], axis[2]);\n rad = rad * 0.5;\n var s = Math.sin(rad);\n var bx = s * axis[0] / axisLength;\n var by = s * axis[1] / axisLength;\n var bz = s * axis[2] / axisLength;\n var bw = Math.cos(rad);\n var ax1 = a[0],\n ay1 = a[1],\n az1 = a[2],\n aw1 = a[3];\n out[0] = ax1 * bw + aw1 * bx + ay1 * bz - az1 * by;\n out[1] = ay1 * bw + aw1 * by + az1 * bx - ax1 * bz;\n out[2] = az1 * bw + aw1 * bz + ax1 * by - ay1 * bx;\n out[3] = aw1 * bw - ax1 * bx - ay1 * by - az1 * bz;\n var ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n out[4] = ax * bw + aw * bx + ay * bz - az * by;\n out[5] = ay * bw + aw * by + az * bx - ax * bz;\n out[6] = az * bw + aw * bz + ax * by - ay * bx;\n out[7] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\r\n * Adds two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the first operand\r\n * @param {ReadonlyQuat2} b the second operand\r\n * @returns {quat2} out\r\n * @function\r\n */\n\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n return out;\n}\n/**\r\n * Multiplies two dual quat's\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a the first operand\r\n * @param {ReadonlyQuat2} b the second operand\r\n * @returns {quat2} out\r\n */\n\n\nfunction multiply(out, a, b) {\n var ax0 = a[0],\n ay0 = a[1],\n az0 = a[2],\n aw0 = a[3],\n bx1 = b[4],\n by1 = b[5],\n bz1 = b[6],\n bw1 = b[7],\n ax1 = a[4],\n ay1 = a[5],\n az1 = a[6],\n aw1 = a[7],\n bx0 = b[0],\n by0 = b[1],\n bz0 = b[2],\n bw0 = b[3];\n out[0] = ax0 * bw0 + aw0 * bx0 + ay0 * bz0 - az0 * by0;\n out[1] = ay0 * bw0 + aw0 * by0 + az0 * bx0 - ax0 * bz0;\n out[2] = az0 * bw0 + aw0 * bz0 + ax0 * by0 - ay0 * bx0;\n out[3] = aw0 * bw0 - ax0 * bx0 - ay0 * by0 - az0 * bz0;\n out[4] = ax0 * bw1 + aw0 * bx1 + ay0 * bz1 - az0 * by1 + ax1 * bw0 + aw1 * bx0 + ay1 * bz0 - az1 * by0;\n out[5] = ay0 * bw1 + aw0 * by1 + az0 * bx1 - ax0 * bz1 + ay1 * bw0 + aw1 * by0 + az1 * bx0 - ax1 * bz0;\n out[6] = az0 * bw1 + aw0 * bz1 + ax0 * by1 - ay0 * bx1 + az1 * bw0 + aw1 * bz0 + ax1 * by0 - ay1 * bx0;\n out[7] = aw0 * bw1 - ax0 * bx1 - ay0 * by1 - az0 * bz1 + aw1 * bw0 - ax1 * bx0 - ay1 * by0 - az1 * bz0;\n return out;\n}\n/**\r\n * Alias for {@link quat2.multiply}\r\n * @function\r\n */\n\n\nvar mul = multiply;\n/**\r\n * Scales a dual quat by a scalar number\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {ReadonlyQuat2} a the dual quat to scale\r\n * @param {Number} b amount to scale the dual quat by\r\n * @returns {quat2} out\r\n * @function\r\n */\n\nexports.mul = mul;\n\nfunction scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n return out;\n}\n/**\r\n * Calculates the dot product of two dual quat's (The dot product of the real parts)\r\n *\r\n * @param {ReadonlyQuat2} a the first operand\r\n * @param {ReadonlyQuat2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n * @function\r\n */\n\n\nvar dot = quat.dot;\n/**\r\n * Performs a linear interpolation between two dual quats's\r\n * NOTE: The resulting dual quaternions won't always be normalized (The error is most noticeable when t = 0.5)\r\n *\r\n * @param {quat2} out the receiving dual quat\r\n * @param {ReadonlyQuat2} a the first operand\r\n * @param {ReadonlyQuat2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {quat2} out\r\n */\n\nexports.dot = dot;\n\nfunction lerp(out, a, b, t) {\n var mt = 1 - t;\n if (dot(a, b) < 0) t = -t;\n out[0] = a[0] * mt + b[0] * t;\n out[1] = a[1] * mt + b[1] * t;\n out[2] = a[2] * mt + b[2] * t;\n out[3] = a[3] * mt + b[3] * t;\n out[4] = a[4] * mt + b[4] * t;\n out[5] = a[5] * mt + b[5] * t;\n out[6] = a[6] * mt + b[6] * t;\n out[7] = a[7] * mt + b[7] * t;\n return out;\n}\n/**\r\n * Calculates the inverse of a dual quat. If they are normalized, conjugate is cheaper\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a dual quat to calculate inverse of\r\n * @returns {quat2} out\r\n */\n\n\nfunction invert(out, a) {\n var sqlen = squaredLength(a);\n out[0] = -a[0] / sqlen;\n out[1] = -a[1] / sqlen;\n out[2] = -a[2] / sqlen;\n out[3] = a[3] / sqlen;\n out[4] = -a[4] / sqlen;\n out[5] = -a[5] / sqlen;\n out[6] = -a[6] / sqlen;\n out[7] = a[7] / sqlen;\n return out;\n}\n/**\r\n * Calculates the conjugate of a dual quat\r\n * If the dual quaternion is normalized, this function is faster than quat2.inverse and produces the same result.\r\n *\r\n * @param {quat2} out the receiving quaternion\r\n * @param {ReadonlyQuat2} a quat to calculate conjugate of\r\n * @returns {quat2} out\r\n */\n\n\nfunction conjugate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n out[4] = -a[4];\n out[5] = -a[5];\n out[6] = -a[6];\n out[7] = a[7];\n return out;\n}\n/**\r\n * Calculates the length of a dual quat\r\n *\r\n * @param {ReadonlyQuat2} a dual quat to calculate length of\r\n * @returns {Number} length of a\r\n * @function\r\n */\n\n\nvar length = quat.length;\n/**\r\n * Alias for {@link quat2.length}\r\n * @function\r\n */\n\nexports.length = length;\nvar len = length;\n/**\r\n * Calculates the squared length of a dual quat\r\n *\r\n * @param {ReadonlyQuat2} a dual quat to calculate squared length of\r\n * @returns {Number} squared length of a\r\n * @function\r\n */\n\nexports.len = len;\nvar squaredLength = quat.squaredLength;\n/**\r\n * Alias for {@link quat2.squaredLength}\r\n * @function\r\n */\n\nexports.squaredLength = squaredLength;\nvar sqrLen = squaredLength;\n/**\r\n * Normalize a dual quat\r\n *\r\n * @param {quat2} out the receiving dual quaternion\r\n * @param {ReadonlyQuat2} a dual quaternion to normalize\r\n * @returns {quat2} out\r\n * @function\r\n */\n\nexports.sqrLen = sqrLen;\n\nfunction normalize(out, a) {\n var magnitude = squaredLength(a);\n\n if (magnitude > 0) {\n magnitude = Math.sqrt(magnitude);\n var a0 = a[0] / magnitude;\n var a1 = a[1] / magnitude;\n var a2 = a[2] / magnitude;\n var a3 = a[3] / magnitude;\n var b0 = a[4];\n var b1 = a[5];\n var b2 = a[6];\n var b3 = a[7];\n var a_dot_b = a0 * b0 + a1 * b1 + a2 * b2 + a3 * b3;\n out[0] = a0;\n out[1] = a1;\n out[2] = a2;\n out[3] = a3;\n out[4] = (b0 - a0 * a_dot_b) / magnitude;\n out[5] = (b1 - a1 * a_dot_b) / magnitude;\n out[6] = (b2 - a2 * a_dot_b) / magnitude;\n out[7] = (b3 - a3 * a_dot_b) / magnitude;\n }\n\n return out;\n}\n/**\r\n * Returns a string representation of a dual quatenion\r\n *\r\n * @param {ReadonlyQuat2} a dual quaternion to represent as a string\r\n * @returns {String} string representation of the dual quat\r\n */\n\n\nfunction str(a) {\n return \"quat2(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \")\";\n}\n/**\r\n * Returns whether or not the dual quaternions have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyQuat2} a the first dual quaternion.\r\n * @param {ReadonlyQuat2} b the second dual quaternion.\r\n * @returns {Boolean} true if the dual quaternions are equal, false otherwise.\r\n */\n\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7];\n}\n/**\r\n * Returns whether or not the dual quaternions have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyQuat2} a the first dual quat.\r\n * @param {ReadonlyQuat2} b the second dual quat.\r\n * @returns {Boolean} true if the dual quats are equal, false otherwise.\r\n */\n\n\nfunction equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7));\n}\n\n/***/ }),\n/* 708 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.leftTranslate = leftTranslate;\nexports.leftRotate = leftRotate;\nexports.leftScale = leftScale;\nexports.transform = transform;\nexports.direction = direction;\nexports.angleTo = angleTo;\nexports.vertical = vertical;\n\nvar _glMatrix = __webpack_require__(383);\n\n/**\n * @description 扩展方法,提供 gl-matrix 为提供的方法\n * */\nfunction leftTranslate(out, a, v) {\n var transMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n _glMatrix.mat3.fromTranslation(transMat, v);\n\n return _glMatrix.mat3.multiply(out, transMat, a);\n}\n\nfunction leftRotate(out, a, rad) {\n var rotateMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n _glMatrix.mat3.fromRotation(rotateMat, rad);\n\n return _glMatrix.mat3.multiply(out, rotateMat, a);\n}\n\nfunction leftScale(out, a, v) {\n var scaleMat = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n _glMatrix.mat3.fromScaling(scaleMat, v);\n\n return _glMatrix.mat3.multiply(out, scaleMat, a);\n}\n\nfunction leftMultiply(out, a, a1) {\n return _glMatrix.mat3.multiply(out, a1, a);\n}\n/**\n * 根据 actions 来做 transform\n * @param m\n * @param actions\n */\n\n\nfunction transform(m, actions) {\n var matrix = m ? [].concat(m) : [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n for (var i = 0, len = actions.length; i < len; i++) {\n var action = actions[i];\n\n switch (action[0]) {\n case 't':\n leftTranslate(matrix, matrix, [action[1], action[2]]);\n break;\n\n case 's':\n leftScale(matrix, matrix, [action[1], action[2]]);\n break;\n\n case 'r':\n leftRotate(matrix, matrix, action[1]);\n break;\n\n case 'm':\n leftMultiply(matrix, matrix, action[1]);\n break;\n\n default:\n break;\n }\n }\n\n return matrix;\n}\n/**\n * 向量 v1 到 向量 v2 夹角的方向\n * @param {Array} v1 向量\n * @param {Array} v2 向量\n * @return {Boolean} >= 0 顺时针 < 0 逆时针\n */\n\n\nfunction direction(v1, v2) {\n return v1[0] * v2[1] - v2[0] * v1[1];\n}\n/**\n * 二维向量 v1 到 v2 的夹角\n * @param v1\n * @param v2\n * @param direct\n */\n\n\nfunction angleTo(v1, v2, direct) {\n var ang = _glMatrix.vec2.angle(v1, v2);\n\n var angleLargeThanPI = direction(v1, v2) >= 0;\n\n if (direct) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - ang;\n }\n\n return ang;\n }\n\n if (angleLargeThanPI) {\n return ang;\n }\n\n return Math.PI * 2 - ang;\n}\n/**\n * 计算二维向量的垂直向量\n * @param out\n * @param v\n * @param flag\n */\n\n\nfunction vertical(out, v, flag) {\n if (flag) {\n out[0] = v[1];\n out[1] = -1 * v[0];\n } else {\n out[0] = -1 * v[1];\n out[1] = v[0];\n }\n\n return out;\n}\n\n/***/ }),\n/* 709 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar d3Timer = _interopRequireWildcard(__webpack_require__(710));\n\nvar d3Ease = _interopRequireWildcard(__webpack_require__(713));\n\nvar _d3Interpolate = __webpack_require__(724);\n\nvar PathUtil = _interopRequireWildcard(__webpack_require__(378));\n\nvar _color = __webpack_require__(740);\n\n// 目前整体动画只需要数值和数组的差值计算\nvar IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 使用 ratio 进行插值计算来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} ratio 比例\n * @return {boolean} 动画是否执行完成\n */\n\nfunction _update(shape, animation, ratio) {\n var cProps = {}; // 此刻属性\n\n var fromAttrs = animation.fromAttrs,\n toAttrs = animation.toAttrs;\n\n if (shape.destroyed) {\n return;\n }\n\n var interf; // 差值函数\n\n for (var k in toAttrs) {\n if (!(0, _util.isEqual)(fromAttrs[k], toAttrs[k])) {\n if (k === 'path') {\n var toPath = toAttrs[k];\n var fromPath = fromAttrs[k];\n\n if (toPath.length > fromPath.length) {\n toPath = PathUtil.parsePathString(toAttrs[k]); // 终点状态\n\n fromPath = PathUtil.parsePathString(fromAttrs[k]); // 起始状态\n\n fromPath = PathUtil.fillPathByDiff(fromPath, toPath);\n fromPath = PathUtil.formatPath(fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n } else if (!animation.pathFormatted) {\n toPath = PathUtil.parsePathString(toAttrs[k]);\n fromPath = PathUtil.parsePathString(fromAttrs[k]);\n fromPath = PathUtil.formatPath(fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n animation.pathFormatted = true;\n }\n\n cProps[k] = [];\n\n for (var i = 0; i < toPath.length; i++) {\n var toPathPoint = toPath[i];\n var fromPathPoint = fromPath[i];\n var cPathPoint = [];\n\n for (var j = 0; j < toPathPoint.length; j++) {\n if ((0, _util.isNumber)(toPathPoint[j]) && fromPathPoint && (0, _util.isNumber)(fromPathPoint[j])) {\n interf = (0, _d3Interpolate.interpolate)(fromPathPoint[j], toPathPoint[j]);\n cPathPoint.push(interf(ratio));\n } else {\n cPathPoint.push(toPathPoint[j]);\n }\n }\n\n cProps[k].push(cPathPoint);\n }\n } else if (k === 'matrix') {\n /*\n 对矩阵进行插值时,需要保证矩阵不为空,为空则使用单位矩阵\n TODO: 二维和三维场景下单位矩阵不同,之后 WebGL 版需要做进一步处理\n */\n var matrixFn = (0, _d3Interpolate.interpolateArray)(fromAttrs[k] || IDENTITY_MATRIX, toAttrs[k] || IDENTITY_MATRIX);\n var currentMatrix = matrixFn(ratio);\n cProps[k] = currentMatrix;\n } else if ((0, _color.isColorProp)(k) && (0, _color.isGradientColor)(toAttrs[k])) {\n cProps[k] = toAttrs[k];\n } else if (!(0, _util.isFunction)(toAttrs[k])) {\n // 非函数类型的值才能做插值\n interf = (0, _d3Interpolate.interpolate)(fromAttrs[k], toAttrs[k]);\n cProps[k] = interf(ratio);\n }\n }\n }\n\n shape.attr(cProps);\n}\n/**\n * 根据自定义帧动画函数 onFrame 来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} elapsed 动画执行时间(毫秒)\n * @return {boolean} 动画是否执行完成\n */\n\n\nfunction update(shape, animation, elapsed) {\n var startTime = animation.startTime,\n delay = animation.delay; // 如果还没有开始执行或暂停,先不更新\n\n if (elapsed < startTime + delay || animation._paused) {\n return false;\n }\n\n var ratio;\n var duration = animation.duration;\n var easing = animation.easing; // 已执行时间\n\n elapsed = elapsed - startTime - animation.delay;\n\n if (animation.repeat) {\n // 如果动画重复执行,则 elapsed > duration,计算 ratio 时需取模\n ratio = elapsed % duration / duration;\n ratio = d3Ease[easing](ratio);\n } else {\n ratio = elapsed / duration;\n\n if (ratio < 1) {\n // 动画未执行完\n ratio = d3Ease[easing](ratio);\n } else {\n // 动画已执行完\n if (animation.onFrame) {\n shape.attr(animation.onFrame(1));\n } else {\n shape.attr(animation.toAttrs);\n }\n\n return true;\n }\n }\n\n if (animation.onFrame) {\n var attrs = animation.onFrame(ratio);\n shape.attr(attrs);\n } else {\n _update(shape, animation, ratio);\n }\n\n return false;\n}\n\nvar Timeline =\n/** @class */\nfunction () {\n /**\n * 时间轴构造函数,依赖于画布\n * @param {}\n */\n function Timeline(canvas) {\n /**\n * 执行动画的元素列表\n * @type {IElement[]}\n */\n this.animators = [];\n /**\n * 当前时间\n * @type {number}\n */\n\n this.current = 0;\n /**\n * 定时器\n * @type {d3Timer.Timer}\n */\n\n this.timer = null;\n this.canvas = canvas;\n }\n /**\n * 初始化定时器\n */\n\n\n Timeline.prototype.initTimer = function () {\n var _this = this;\n\n var isFinished = false;\n var shape;\n var animations;\n var animation;\n this.timer = d3Timer.timer(function (elapsed) {\n _this.current = elapsed;\n\n if (_this.animators.length > 0) {\n for (var i = _this.animators.length - 1; i >= 0; i--) {\n shape = _this.animators[i];\n\n if (shape.destroyed) {\n // 如果已经被销毁,直接移出队列\n _this.removeAnimator(i);\n\n continue;\n }\n\n if (!shape.isAnimatePaused()) {\n animations = shape.get('animations');\n\n for (var j = animations.length - 1; j >= 0; j--) {\n animation = animations[j];\n isFinished = update(shape, animation, elapsed);\n\n if (isFinished) {\n animations.splice(j, 1);\n isFinished = false;\n\n if (animation.callback) {\n animation.callback();\n }\n }\n }\n }\n\n if (animations.length === 0) {\n _this.removeAnimator(i);\n }\n }\n\n var autoDraw = _this.canvas.get('autoDraw'); // 非自动渲染模式下,手动调用 canvas.draw() 重新渲染\n\n\n if (!autoDraw) {\n _this.canvas.draw();\n }\n }\n });\n };\n /**\n * 增加动画元素\n */\n\n\n Timeline.prototype.addAnimator = function (shape) {\n this.animators.push(shape);\n };\n /**\n * 移除动画元素\n */\n\n\n Timeline.prototype.removeAnimator = function (index) {\n this.animators.splice(index, 1);\n };\n /**\n * 是否有动画在执行\n */\n\n\n Timeline.prototype.isAnimating = function () {\n return !!this.animators.length;\n };\n /**\n * 停止定时器\n */\n\n\n Timeline.prototype.stop = function () {\n if (this.timer) {\n this.timer.stop();\n }\n };\n /**\n * 停止时间轴上所有元素的动画,并置空动画元素列表\n * @param {boolean} toEnd 是否到动画的最终状态,用来透传给动画元素的 stopAnimate 方法\n */\n\n\n Timeline.prototype.stopAllAnimations = function (toEnd) {\n if (toEnd === void 0) {\n toEnd = true;\n }\n\n this.animators.forEach(function (animator) {\n animator.stopAnimate(toEnd);\n });\n this.animators = [];\n this.canvas.draw();\n };\n /**\n * 获取当前时间\n */\n\n\n Timeline.prototype.getTime = function () {\n return this.current;\n };\n\n return Timeline;\n}();\n\nvar _default = Timeline;\nexports.default = _default;\n\n/***/ }),\n/* 710 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"now\", {\n enumerable: true,\n get: function get() {\n return _timer.now;\n }\n});\nObject.defineProperty(exports, \"timer\", {\n enumerable: true,\n get: function get() {\n return _timer.timer;\n }\n});\nObject.defineProperty(exports, \"timerFlush\", {\n enumerable: true,\n get: function get() {\n return _timer.timerFlush;\n }\n});\nObject.defineProperty(exports, \"timeout\", {\n enumerable: true,\n get: function get() {\n return _timeout.default;\n }\n});\nObject.defineProperty(exports, \"interval\", {\n enumerable: true,\n get: function get() {\n return _interval.default;\n }\n});\n\nvar _timer = __webpack_require__(242);\n\nvar _timeout = _interopRequireDefault(__webpack_require__(711));\n\nvar _interval = _interopRequireDefault(__webpack_require__(712));\n\n/***/ }),\n/* 711 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _timer = __webpack_require__(242);\n\nfunction _default(callback, delay, time) {\n var t = new _timer.Timer();\n delay = delay == null ? 0 : +delay;\n t.restart(function (elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n\n/***/ }),\n/* 712 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _timer = __webpack_require__(242);\n\nfunction _default(callback, delay, time) {\n var t = new _timer.Timer(),\n total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? (0, _timer.now)() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n\n/***/ }),\n/* 713 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"easeLinear\", {\n enumerable: true,\n get: function get() {\n return _linear.linear;\n }\n});\nObject.defineProperty(exports, \"easeQuad\", {\n enumerable: true,\n get: function get() {\n return _quad.quadInOut;\n }\n});\nObject.defineProperty(exports, \"easeQuadIn\", {\n enumerable: true,\n get: function get() {\n return _quad.quadIn;\n }\n});\nObject.defineProperty(exports, \"easeQuadOut\", {\n enumerable: true,\n get: function get() {\n return _quad.quadOut;\n }\n});\nObject.defineProperty(exports, \"easeQuadInOut\", {\n enumerable: true,\n get: function get() {\n return _quad.quadInOut;\n }\n});\nObject.defineProperty(exports, \"easeCubic\", {\n enumerable: true,\n get: function get() {\n return _cubic.cubicInOut;\n }\n});\nObject.defineProperty(exports, \"easeCubicIn\", {\n enumerable: true,\n get: function get() {\n return _cubic.cubicIn;\n }\n});\nObject.defineProperty(exports, \"easeCubicOut\", {\n enumerable: true,\n get: function get() {\n return _cubic.cubicOut;\n }\n});\nObject.defineProperty(exports, \"easeCubicInOut\", {\n enumerable: true,\n get: function get() {\n return _cubic.cubicInOut;\n }\n});\nObject.defineProperty(exports, \"easePoly\", {\n enumerable: true,\n get: function get() {\n return _poly.polyInOut;\n }\n});\nObject.defineProperty(exports, \"easePolyIn\", {\n enumerable: true,\n get: function get() {\n return _poly.polyIn;\n }\n});\nObject.defineProperty(exports, \"easePolyOut\", {\n enumerable: true,\n get: function get() {\n return _poly.polyOut;\n }\n});\nObject.defineProperty(exports, \"easePolyInOut\", {\n enumerable: true,\n get: function get() {\n return _poly.polyInOut;\n }\n});\nObject.defineProperty(exports, \"easeSin\", {\n enumerable: true,\n get: function get() {\n return _sin.sinInOut;\n }\n});\nObject.defineProperty(exports, \"easeSinIn\", {\n enumerable: true,\n get: function get() {\n return _sin.sinIn;\n }\n});\nObject.defineProperty(exports, \"easeSinOut\", {\n enumerable: true,\n get: function get() {\n return _sin.sinOut;\n }\n});\nObject.defineProperty(exports, \"easeSinInOut\", {\n enumerable: true,\n get: function get() {\n return _sin.sinInOut;\n }\n});\nObject.defineProperty(exports, \"easeExp\", {\n enumerable: true,\n get: function get() {\n return _exp.expInOut;\n }\n});\nObject.defineProperty(exports, \"easeExpIn\", {\n enumerable: true,\n get: function get() {\n return _exp.expIn;\n }\n});\nObject.defineProperty(exports, \"easeExpOut\", {\n enumerable: true,\n get: function get() {\n return _exp.expOut;\n }\n});\nObject.defineProperty(exports, \"easeExpInOut\", {\n enumerable: true,\n get: function get() {\n return _exp.expInOut;\n }\n});\nObject.defineProperty(exports, \"easeCircle\", {\n enumerable: true,\n get: function get() {\n return _circle.circleInOut;\n }\n});\nObject.defineProperty(exports, \"easeCircleIn\", {\n enumerable: true,\n get: function get() {\n return _circle.circleIn;\n }\n});\nObject.defineProperty(exports, \"easeCircleOut\", {\n enumerable: true,\n get: function get() {\n return _circle.circleOut;\n }\n});\nObject.defineProperty(exports, \"easeCircleInOut\", {\n enumerable: true,\n get: function get() {\n return _circle.circleInOut;\n }\n});\nObject.defineProperty(exports, \"easeBounce\", {\n enumerable: true,\n get: function get() {\n return _bounce.bounceOut;\n }\n});\nObject.defineProperty(exports, \"easeBounceIn\", {\n enumerable: true,\n get: function get() {\n return _bounce.bounceIn;\n }\n});\nObject.defineProperty(exports, \"easeBounceOut\", {\n enumerable: true,\n get: function get() {\n return _bounce.bounceOut;\n }\n});\nObject.defineProperty(exports, \"easeBounceInOut\", {\n enumerable: true,\n get: function get() {\n return _bounce.bounceInOut;\n }\n});\nObject.defineProperty(exports, \"easeBack\", {\n enumerable: true,\n get: function get() {\n return _back.backInOut;\n }\n});\nObject.defineProperty(exports, \"easeBackIn\", {\n enumerable: true,\n get: function get() {\n return _back.backIn;\n }\n});\nObject.defineProperty(exports, \"easeBackOut\", {\n enumerable: true,\n get: function get() {\n return _back.backOut;\n }\n});\nObject.defineProperty(exports, \"easeBackInOut\", {\n enumerable: true,\n get: function get() {\n return _back.backInOut;\n }\n});\nObject.defineProperty(exports, \"easeElastic\", {\n enumerable: true,\n get: function get() {\n return _elastic.elasticOut;\n }\n});\nObject.defineProperty(exports, \"easeElasticIn\", {\n enumerable: true,\n get: function get() {\n return _elastic.elasticIn;\n }\n});\nObject.defineProperty(exports, \"easeElasticOut\", {\n enumerable: true,\n get: function get() {\n return _elastic.elasticOut;\n }\n});\nObject.defineProperty(exports, \"easeElasticInOut\", {\n enumerable: true,\n get: function get() {\n return _elastic.elasticInOut;\n }\n});\n\nvar _linear = __webpack_require__(714);\n\nvar _quad = __webpack_require__(715);\n\nvar _cubic = __webpack_require__(716);\n\nvar _poly = __webpack_require__(717);\n\nvar _sin = __webpack_require__(718);\n\nvar _exp = __webpack_require__(719);\n\nvar _circle = __webpack_require__(720);\n\nvar _bounce = __webpack_require__(721);\n\nvar _back = __webpack_require__(722);\n\nvar _elastic = __webpack_require__(723);\n\n/***/ }),\n/* 714 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.linear = linear;\n\nfunction linear(t) {\n return +t;\n}\n\n/***/ }),\n/* 715 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.quadIn = quadIn;\nexports.quadOut = quadOut;\nexports.quadInOut = quadInOut;\n\nfunction quadIn(t) {\n return t * t;\n}\n\nfunction quadOut(t) {\n return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\n/***/ }),\n/* 716 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cubicIn = cubicIn;\nexports.cubicOut = cubicOut;\nexports.cubicInOut = cubicInOut;\n\nfunction cubicIn(t) {\n return t * t * t;\n}\n\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\n/***/ }),\n/* 717 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.polyInOut = exports.polyOut = exports.polyIn = void 0;\nvar exponent = 3;\n\nvar polyIn = function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n return polyIn;\n}(exponent);\n\nexports.polyIn = polyIn;\n\nvar polyOut = function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n return polyOut;\n}(exponent);\n\nexports.polyOut = polyOut;\n\nvar polyInOut = function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n return polyInOut;\n}(exponent);\n\nexports.polyInOut = polyInOut;\n\n/***/ }),\n/* 718 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.sinIn = sinIn;\nexports.sinOut = sinOut;\nexports.sinInOut = sinInOut;\nvar pi = Math.PI,\n halfPi = pi / 2;\n\nfunction sinIn(t) {\n return +t === 1 ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nfunction sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nfunction sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n\n/***/ }),\n/* 719 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.expIn = expIn;\nexports.expOut = expOut;\nexports.expInOut = expInOut;\n\nvar _math = __webpack_require__(389);\n\nfunction expIn(t) {\n return (0, _math.tpmt)(1 - +t);\n}\n\nfunction expOut(t) {\n return 1 - (0, _math.tpmt)(t);\n}\n\nfunction expInOut(t) {\n return ((t *= 2) <= 1 ? (0, _math.tpmt)(1 - t) : 2 - (0, _math.tpmt)(t - 1)) / 2;\n}\n\n/***/ }),\n/* 720 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.circleIn = circleIn;\nexports.circleOut = circleOut;\nexports.circleInOut = circleInOut;\n\nfunction circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\n/***/ }),\n/* 721 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bounceIn = bounceIn;\nexports.bounceOut = bounceOut;\nexports.bounceInOut = bounceInOut;\nvar b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\n/***/ }),\n/* 722 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.backInOut = exports.backOut = exports.backIn = void 0;\nvar overshoot = 1.70158;\n\nvar backIn = function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n return backIn;\n}(overshoot);\n\nexports.backIn = backIn;\n\nvar backOut = function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n return backOut;\n}(overshoot);\n\nexports.backOut = backOut;\n\nvar backInOut = function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n return backInOut;\n}(overshoot);\n\nexports.backInOut = backInOut;\n\n/***/ }),\n/* 723 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.elasticInOut = exports.elasticOut = exports.elasticIn = void 0;\n\nvar _math = __webpack_require__(389);\n\nvar tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nvar elasticIn = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * (0, _math.tpmt)(- --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function (a) {\n return custom(a, p * tau);\n };\n\n elasticIn.period = function (p) {\n return custom(a, p);\n };\n\n return elasticIn;\n}(amplitude, period);\n\nexports.elasticIn = elasticIn;\n\nvar elasticOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * (0, _math.tpmt)(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n\n elasticOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticOut;\n}(amplitude, period);\n\nexports.elasticOut = elasticOut;\n\nvar elasticInOut = function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0 ? a * (0, _math.tpmt)(-t) * Math.sin((s - t) / p) : 2 - a * (0, _math.tpmt)(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function (a) {\n return custom(a, p * tau);\n };\n\n elasticInOut.period = function (p) {\n return custom(a, p);\n };\n\n return elasticInOut;\n}(amplitude, period);\n\nexports.elasticInOut = elasticInOut;\n\n/***/ }),\n/* 724 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"interpolate\", {\n enumerable: true,\n get: function get() {\n return _value.default;\n }\n});\nObject.defineProperty(exports, \"interpolateArray\", {\n enumerable: true,\n get: function get() {\n return _array.default;\n }\n});\nObject.defineProperty(exports, \"interpolateBasis\", {\n enumerable: true,\n get: function get() {\n return _basis.default;\n }\n});\nObject.defineProperty(exports, \"interpolateBasisClosed\", {\n enumerable: true,\n get: function get() {\n return _basisClosed.default;\n }\n});\nObject.defineProperty(exports, \"interpolateDate\", {\n enumerable: true,\n get: function get() {\n return _date.default;\n }\n});\nObject.defineProperty(exports, \"interpolateDiscrete\", {\n enumerable: true,\n get: function get() {\n return _discrete.default;\n }\n});\nObject.defineProperty(exports, \"interpolateHue\", {\n enumerable: true,\n get: function get() {\n return _hue.default;\n }\n});\nObject.defineProperty(exports, \"interpolateNumber\", {\n enumerable: true,\n get: function get() {\n return _number.default;\n }\n});\nObject.defineProperty(exports, \"interpolateNumberArray\", {\n enumerable: true,\n get: function get() {\n return _numberArray.default;\n }\n});\nObject.defineProperty(exports, \"interpolateObject\", {\n enumerable: true,\n get: function get() {\n return _object.default;\n }\n});\nObject.defineProperty(exports, \"interpolateRound\", {\n enumerable: true,\n get: function get() {\n return _round.default;\n }\n});\nObject.defineProperty(exports, \"interpolateString\", {\n enumerable: true,\n get: function get() {\n return _string.default;\n }\n});\nObject.defineProperty(exports, \"interpolateTransformCss\", {\n enumerable: true,\n get: function get() {\n return _index.interpolateTransformCss;\n }\n});\nObject.defineProperty(exports, \"interpolateTransformSvg\", {\n enumerable: true,\n get: function get() {\n return _index.interpolateTransformSvg;\n }\n});\nObject.defineProperty(exports, \"interpolateZoom\", {\n enumerable: true,\n get: function get() {\n return _zoom.default;\n }\n});\nObject.defineProperty(exports, \"interpolateRgb\", {\n enumerable: true,\n get: function get() {\n return _rgb.default;\n }\n});\nObject.defineProperty(exports, \"interpolateRgbBasis\", {\n enumerable: true,\n get: function get() {\n return _rgb.rgbBasis;\n }\n});\nObject.defineProperty(exports, \"interpolateRgbBasisClosed\", {\n enumerable: true,\n get: function get() {\n return _rgb.rgbBasisClosed;\n }\n});\nObject.defineProperty(exports, \"interpolateHsl\", {\n enumerable: true,\n get: function get() {\n return _hsl.default;\n }\n});\nObject.defineProperty(exports, \"interpolateHslLong\", {\n enumerable: true,\n get: function get() {\n return _hsl.hslLong;\n }\n});\nObject.defineProperty(exports, \"interpolateLab\", {\n enumerable: true,\n get: function get() {\n return _lab.default;\n }\n});\nObject.defineProperty(exports, \"interpolateHcl\", {\n enumerable: true,\n get: function get() {\n return _hcl.default;\n }\n});\nObject.defineProperty(exports, \"interpolateHclLong\", {\n enumerable: true,\n get: function get() {\n return _hcl.hclLong;\n }\n});\nObject.defineProperty(exports, \"interpolateCubehelix\", {\n enumerable: true,\n get: function get() {\n return _cubehelix.default;\n }\n});\nObject.defineProperty(exports, \"interpolateCubehelixLong\", {\n enumerable: true,\n get: function get() {\n return _cubehelix.cubehelixLong;\n }\n});\nObject.defineProperty(exports, \"piecewise\", {\n enumerable: true,\n get: function get() {\n return _piecewise.default;\n }\n});\nObject.defineProperty(exports, \"quantize\", {\n enumerable: true,\n get: function get() {\n return _quantize.default;\n }\n});\n\nvar _value = _interopRequireDefault(__webpack_require__(243));\n\nvar _array = _interopRequireDefault(__webpack_require__(394));\n\nvar _basis = _interopRequireDefault(__webpack_require__(246));\n\nvar _basisClosed = _interopRequireDefault(__webpack_require__(392));\n\nvar _date = _interopRequireDefault(__webpack_require__(395));\n\nvar _discrete = _interopRequireDefault(__webpack_require__(727));\n\nvar _hue = _interopRequireDefault(__webpack_require__(728));\n\nvar _number = _interopRequireDefault(__webpack_require__(177));\n\nvar _numberArray = _interopRequireDefault(__webpack_require__(247));\n\nvar _object = _interopRequireDefault(__webpack_require__(396));\n\nvar _round = _interopRequireDefault(__webpack_require__(729));\n\nvar _string = _interopRequireDefault(__webpack_require__(397));\n\nvar _index = __webpack_require__(730);\n\nvar _zoom = _interopRequireDefault(__webpack_require__(733));\n\nvar _rgb = _interopRequireWildcard(__webpack_require__(391));\n\nvar _hsl = _interopRequireWildcard(__webpack_require__(734));\n\nvar _lab = _interopRequireDefault(__webpack_require__(735));\n\nvar _hcl = _interopRequireWildcard(__webpack_require__(736));\n\nvar _cubehelix = _interopRequireWildcard(__webpack_require__(737));\n\nvar _piecewise = _interopRequireDefault(__webpack_require__(738));\n\nvar _quantize = _interopRequireDefault(__webpack_require__(739));\n\n/***/ }),\n/* 725 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.gray = gray;\nexports.default = lab;\nexports.Lab = Lab;\nexports.lch = lch;\nexports.hcl = hcl;\nexports.Hcl = Hcl;\n\nvar _define = _interopRequireWildcard(__webpack_require__(245));\n\nvar _color = __webpack_require__(244);\n\nvar _math = __webpack_require__(390);\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof _color.Rgb)) o = (0, _color.rgbConvert)(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),\n x,\n z;\n if (r === g && g === b) x = z = y;else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\n(0, _define.default)(Lab, lab, (0, _define.extend)(_color.Color, {\n brighter: function brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new _color.Rgb(lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z), lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z), this.opacity);\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n\n var h = Math.atan2(o.b, o.a) * _math.rad2deg;\n\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * _math.deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\n(0, _define.default)(Hcl, hcl, (0, _define.extend)(_color.Color, {\n brighter: function brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n\n/***/ }),\n/* 726 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cubehelix;\nexports.Cubehelix = Cubehelix;\n\nvar _define = _interopRequireWildcard(__webpack_require__(245));\n\nvar _color = __webpack_require__(244);\n\nvar _math = __webpack_require__(390);\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof _color.Rgb)) o = (0, _color.rgbConvert)(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * _math.rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\n(0, _define.default)(Cubehelix, cubehelix, (0, _define.extend)(_color.Color, {\n brighter: function brighter(k) {\n k = k == null ? _color.brighter : Math.pow(_color.brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _color.darker : Math.pow(_color.darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * _math.deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new _color.Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n}));\n\n/***/ }),\n/* 727 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(range) {\n var n = range.length;\n return function (t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\n/***/ }),\n/* 728 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _color = __webpack_require__(110);\n\nfunction _default(a, b) {\n var i = (0, _color.hue)(+a, +b);\n return function (t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n\n/***/ }),\n/* 729 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(a, b) {\n return a = +a, b = +b, function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n\n/***/ }),\n/* 730 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interpolateTransformSvg = exports.interpolateTransformCss = void 0;\n\nvar _number = _interopRequireDefault(__webpack_require__(177));\n\nvar _parse = __webpack_require__(731);\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({\n i: i - 4,\n x: (0, _number.default)(xa, xb)\n }, {\n i: i - 2,\n x: (0, _number.default)(ya, yb)\n });\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path\n\n q.push({\n i: s.push(pop(s) + \"rotate(\", null, degParen) - 2,\n x: (0, _number.default)(a, b)\n });\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({\n i: s.push(pop(s) + \"skewX(\", null, degParen) - 2,\n x: (0, _number.default)(a, b)\n });\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: (0, _number.default)(xa, xb)\n }, {\n i: i - 2,\n x: (0, _number.default)(ya, yb)\n });\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function (a, b) {\n var s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n\n return function (t) {\n var i = -1,\n n = q.length,\n o;\n\n while (++i < n) {\n s[(o = q[i]).i] = o.x(t);\n }\n\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(_parse.parseCss, \"px, \", \"px)\", \"deg)\");\nexports.interpolateTransformCss = interpolateTransformCss;\nvar interpolateTransformSvg = interpolateTransform(_parse.parseSvg, \", \", \")\", \")\");\nexports.interpolateTransformSvg = interpolateTransformSvg;\n\n/***/ }),\n/* 731 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseCss = parseCss;\nexports.parseSvg = parseSvg;\n\nvar _decompose = _interopRequireWildcard(__webpack_require__(732));\n\nvar cssNode, cssRoot, cssView, svgNode;\n\nfunction parseCss(value) {\n if (value === \"none\") return _decompose.identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return (0, _decompose.default)(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n if (value == null) return _decompose.identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose.identity;\n value = value.matrix;\n return (0, _decompose.default)(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\n/***/ }),\n/* 732 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.identity = void 0;\nvar degrees = 180 / Math.PI;\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\nexports.identity = identity;\n\nfunction _default(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\n/***/ }),\n/* 733 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nvar rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n} // p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\n\n\nfunction _default(p0, p1) {\n var ux0 = p0[0],\n uy0 = p0[1],\n w0 = p0[2],\n ux1 = p1[0],\n uy1 = p1[1],\n w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S; // Special case for u0 ≅ u1.\n\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n\n i = function i(t) {\n return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];\n };\n } // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n\n i = function i(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];\n };\n }\n\n i.duration = S * 1000;\n return i;\n}\n\n/***/ }),\n/* 734 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hslLong = exports.default = void 0;\n\nvar _d3Color = __webpack_require__(61);\n\nvar _color = _interopRequireWildcard(__webpack_require__(110));\n\nfunction hsl(hue) {\n return function (start, end) {\n var h = hue((start = (0, _d3Color.hsl)(start)).h, (end = (0, _d3Color.hsl)(end)).h),\n s = (0, _color.default)(start.s, end.s),\n l = (0, _color.default)(start.l, end.l),\n opacity = (0, _color.default)(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n}\n\nvar _default = hsl(_color.hue);\n\nexports.default = _default;\nvar hslLong = hsl(_color.default);\nexports.hslLong = hslLong;\n\n/***/ }),\n/* 735 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = lab;\n\nvar _d3Color = __webpack_require__(61);\n\nvar _color = _interopRequireDefault(__webpack_require__(110));\n\nfunction lab(start, end) {\n var l = (0, _color.default)((start = (0, _d3Color.lab)(start)).l, (end = (0, _d3Color.lab)(end)).l),\n a = (0, _color.default)(start.a, end.a),\n b = (0, _color.default)(start.b, end.b),\n opacity = (0, _color.default)(start.opacity, end.opacity);\n return function (t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\n/***/ }),\n/* 736 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hclLong = exports.default = void 0;\n\nvar _d3Color = __webpack_require__(61);\n\nvar _color = _interopRequireWildcard(__webpack_require__(110));\n\nfunction hcl(hue) {\n return function (start, end) {\n var h = hue((start = (0, _d3Color.hcl)(start)).h, (end = (0, _d3Color.hcl)(end)).h),\n c = (0, _color.default)(start.c, end.c),\n l = (0, _color.default)(start.l, end.l),\n opacity = (0, _color.default)(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n };\n}\n\nvar _default = hcl(_color.hue);\n\nexports.default = _default;\nvar hclLong = hcl(_color.default);\nexports.hclLong = hclLong;\n\n/***/ }),\n/* 737 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cubehelixLong = exports.default = void 0;\n\nvar _d3Color = __webpack_require__(61);\n\nvar _color = _interopRequireWildcard(__webpack_require__(110));\n\nfunction cubehelix(hue) {\n return function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = (0, _d3Color.cubehelix)(start)).h, (end = (0, _d3Color.cubehelix)(end)).h),\n s = (0, _color.default)(start.s, end.s),\n l = (0, _color.default)(start.l, end.l),\n opacity = (0, _color.default)(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n return cubehelix;\n }(1);\n}\n\nvar _default = cubehelix(_color.hue);\n\nexports.default = _default;\nvar cubehelixLong = cubehelix(_color.default);\nexports.cubehelixLong = cubehelixLong;\n\n/***/ }),\n/* 738 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = piecewise;\n\nfunction piecewise(interpolate, values) {\n var i = 0,\n n = values.length - 1,\n v = values[0],\n I = new Array(n < 0 ? 0 : n);\n\n while (i < n) {\n I[i] = interpolate(v, v = values[++i]);\n }\n\n return function (t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n\n/***/ }),\n/* 739 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(interpolator, n) {\n var samples = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n samples[i] = interpolator(i / (n - 1));\n }\n\n return samples;\n}\n\n/***/ }),\n/* 740 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isGradientColor = exports.isColorProp = void 0;\n\nvar isColorProp = function isColorProp(prop) {\n return ['fill', 'stroke', 'fillStyle', 'strokeStyle'].includes(prop);\n};\n\nexports.isColorProp = isColorProp;\n\nvar isGradientColor = function isGradientColor(val) {\n return /^[r,R,L,l]{1}[\\s]*\\(/.test(val);\n};\n\nexports.isGradientColor = isGradientColor;\n\n/***/ }),\n/* 741 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _graphEvent = _interopRequireDefault(__webpack_require__(379));\n\nvar _util = __webpack_require__(103);\n\n/**\n * @fileoverview 事件处理器\n * @author dxq613@gmail.com\n */\nvar CLICK_OFFSET = 40;\nvar LEFT_BTN_CODE = 0;\nvar DELEGATION_SPLIT = ':';\nvar EVENTS = ['mousedown', 'mouseup', 'dblclick', 'mouseout', 'mouseover', 'mousemove', 'mouseleave', 'mouseenter', 'touchstart', 'touchmove', 'touchend', 'dragenter', 'dragover', 'dragleave', 'drop', 'contextmenu', 'mousewheel']; // 是否有委托事件监听\n\nfunction hasDelegation(events, type) {\n for (var key in events) {\n if (events.hasOwnProperty(key) && key.indexOf(DELEGATION_SPLIT + type) >= 0) {\n return true;\n }\n }\n\n return false;\n} // 触发目标事件,目标只能是 shape 或 canvas\n\n\nfunction emitTargetEvent(target, type, eventObj) {\n eventObj.name = type;\n eventObj.target = target;\n eventObj.currentTarget = target;\n eventObj.delegateTarget = target;\n target.emit(type, eventObj);\n} // 事件冒泡, enter 和 leave 需要对 fromShape 和 toShape 进行判同\n\n\nfunction bubbleEvent(container, type, eventObj) {\n if (eventObj.bubbles) {\n var relativeShape = void 0;\n var isOverEvent = false;\n\n if (type === 'mouseenter') {\n relativeShape = eventObj.fromShape;\n isOverEvent = true;\n } else if (type === 'mouseleave') {\n isOverEvent = true;\n relativeShape = eventObj.toShape;\n } // canvas 上的 mouseenter, mouseleave 事件,仅当进入或者移出 canvas 时触发\n\n\n if (container.isCanvas() && isOverEvent) {\n return;\n } // 如果相关图形同当前图形在同一个容器内,不触发事件\n\n\n if (relativeShape && (0, _util.isParent)(container, relativeShape)) {\n // 阻止继续向上冒泡\n eventObj.bubbles = false;\n return;\n } // 事件名称可能在委托过程中被修改,因此事件冒泡时需要重新设置事件名称\n\n\n eventObj.name = type;\n eventObj.currentTarget = container;\n eventObj.delegateTarget = container;\n container.emit(type, eventObj);\n }\n}\n\nvar EventController =\n/** @class */\nfunction () {\n function EventController(cfg) {\n var _this = this; // 正在被拖拽的图形\n\n\n this.draggingShape = null;\n this.dragging = false; // 当前鼠标/touch所在位置的图形\n\n this.currentShape = null;\n this.mousedownShape = null;\n this.mousedownPoint = null; // 统一处理所有的回调\n\n this._eventCallback = function (ev) {\n var type = ev.type;\n\n _this._triggerEvent(type, ev);\n }; // 在 document 处理拖拽到画布外的事件,处理从图形上移除画布未被捕捉的问题\n\n\n this._onDocumentMove = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging || _this.currentShape) {\n var pointInfo = _this._getPointInfo(ev); // 还在拖拽过程中\n\n\n if (_this.dragging) {\n _this._emitEvent('drag', ev, pointInfo, _this.draggingShape);\n } // 说明从某个图形直接移动到了画布外面,\n // 修复了 mouseleave 的 bug 后不再出现这种情况\n // if (this.currentShape) {\n // this._emitEvent('mouseleave', ev, pointInfo, this.currentShape, this.currentShape, null);\n // this.currentShape = null;\n // }\n\n }\n }\n }; // 在 document 上处理拖拽到外面,释放鼠标时触发 dragend\n\n\n this._onDocumentMouseUp = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging) {\n var pointInfo = _this._getPointInfo(ev);\n\n if (_this.draggingShape) {\n // 如果存在拖拽的图形,则也触发 drop 事件\n _this._emitEvent('drop', ev, pointInfo, null);\n }\n\n _this._emitEvent('dragend', ev, pointInfo, _this.draggingShape);\n\n _this._afterDrag(_this.draggingShape, pointInfo, ev);\n }\n }\n };\n\n this.canvas = cfg.canvas;\n }\n\n EventController.prototype.init = function () {\n this._bindEvents();\n }; // 注册事件\n\n\n EventController.prototype._bindEvents = function () {\n var _this = this;\n\n var el = this.canvas.get('el');\n (0, _util.each)(EVENTS, function (eventName) {\n el.addEventListener(eventName, _this._eventCallback);\n });\n\n if (document) {\n // 处理移动到外面没有触发 shape mouse leave 的事件\n // 处理拖拽到外部的问题\n document.addEventListener('mousemove', this._onDocumentMove); // 处理拖拽过程中在外部释放鼠标的问题\n\n document.addEventListener('mouseup', this._onDocumentMouseUp);\n }\n }; // 清理事件\n\n\n EventController.prototype._clearEvents = function () {\n var _this = this;\n\n var el = this.canvas.get('el');\n (0, _util.each)(EVENTS, function (eventName) {\n el.removeEventListener(eventName, _this._eventCallback);\n });\n\n if (document) {\n document.removeEventListener('mousemove', this._onDocumentMove);\n document.removeEventListener('mouseup', this._onDocumentMouseUp);\n }\n };\n\n EventController.prototype._getEventObj = function (type, event, point, target, fromShape, toShape) {\n var eventObj = new _graphEvent.default(type, event);\n eventObj.fromShape = fromShape;\n eventObj.toShape = toShape;\n eventObj.x = point.x;\n eventObj.y = point.y;\n eventObj.clientX = point.clientX;\n eventObj.clientY = point.clientY;\n eventObj.propagationPath.push(target); // 事件的x,y应该是基于画布左上角的,与canvas的matrix无关\n\n return eventObj;\n }; // 根据点获取图形,提取成独立方法,便于后续优化\n\n\n EventController.prototype._getShape = function (point, ev) {\n return this.canvas.getShape(point.x, point.y, ev);\n }; // 获取事件的当前点的信息\n\n\n EventController.prototype._getPointInfo = function (ev) {\n var canvas = this.canvas;\n var clientPoint = canvas.getClientByEvent(ev);\n var point = canvas.getPointByEvent(ev);\n return {\n x: point.x,\n y: point.y,\n clientX: clientPoint.x,\n clientY: clientPoint.y\n };\n }; // 触发事件\n\n\n EventController.prototype._triggerEvent = function (type, ev) {\n var pointInfo = this._getPointInfo(ev); // 每次都获取图形有一定成本,后期可以考虑进行缓存策略\n\n\n var shape = this._getShape(pointInfo, ev);\n\n var method = this[\"_on\" + type];\n var leaveCanvas = false;\n\n if (method) {\n method.call(this, pointInfo, shape, ev);\n } else {\n var preShape = this.currentShape; // 如果进入、移出画布时存在图形,则要分别触发事件\n\n if (type === 'mouseenter' || type === 'dragenter' || type === 'mouseover') {\n this._emitEvent(type, ev, pointInfo, null, null, shape); // 先进入画布\n\n\n if (shape) {\n this._emitEvent(type, ev, pointInfo, shape, null, shape); // 再触发图形的事件\n\n }\n\n if (type === 'mouseenter' && this.draggingShape) {\n // 如果正在拖拽图形, 则触发 dragleave\n this._emitEvent('dragenter', ev, pointInfo, null);\n }\n } else if (type === 'mouseleave' || type === 'dragleave' || type === 'mouseout') {\n leaveCanvas = true;\n\n if (preShape) {\n this._emitEvent(type, ev, pointInfo, preShape, preShape, null); // 先触发图形的事件\n\n }\n\n this._emitEvent(type, ev, pointInfo, null, preShape, null); // 再触发离开画布事件\n\n\n if (type === 'mouseleave' && this.draggingShape) {\n this._emitEvent('dragleave', ev, pointInfo, null);\n }\n } else {\n this._emitEvent(type, ev, pointInfo, shape, null, null); // 一般事件中不需要考虑 from, to\n\n }\n }\n\n if (!leaveCanvas) {\n this.currentShape = shape;\n } // 当鼠标从画布移动到 shape 或者从 preShape 移动到 shape 时,应用 shape 上的鼠标样式\n\n\n if (shape && !shape.get('destroyed')) {\n var canvas = this.canvas;\n var el = canvas.get('el');\n el.style.cursor = shape.attr('cursor') || canvas.get('cursor');\n }\n }; // 记录下点击的位置、图形,便于拖拽事件、click 事件的判定\n\n\n EventController.prototype._onmousedown = function (pointInfo, shape, event) {\n // 只有鼠标左键的 mousedown 事件才会设置 mousedownShape 等属性,避免鼠标右键的 mousedown 事件引起其他事件发生\n if (event.button === LEFT_BTN_CODE) {\n this.mousedownShape = shape;\n this.mousedownPoint = pointInfo;\n this.mousedownTimeStamp = event.timeStamp;\n }\n\n this._emitEvent('mousedown', event, pointInfo, shape, null, null); // mousedown 不考虑fromShape, toShape\n\n }; // mouseleave 和 mouseenter 都是成对存在的\n // mouseenter 和 mouseover 同时触发\n\n\n EventController.prototype._emitMouseoverEvents = function (event, pointInfo, fromShape, toShape) {\n var el = this.canvas.get('el');\n\n if (fromShape !== toShape) {\n if (fromShape) {\n this._emitEvent('mouseout', event, pointInfo, fromShape, fromShape, toShape);\n\n this._emitEvent('mouseleave', event, pointInfo, fromShape, fromShape, toShape); // 当鼠标从 fromShape 移动到画布上时,重置鼠标样式\n\n\n if (!toShape || toShape.get('destroyed')) {\n el.style.cursor = this.canvas.get('cursor');\n }\n }\n\n if (toShape) {\n this._emitEvent('mouseover', event, pointInfo, toShape, fromShape, toShape);\n\n this._emitEvent('mouseenter', event, pointInfo, toShape, fromShape, toShape);\n }\n }\n }; // dragover 不等同于 mouseover,而等同于 mousemove\n\n\n EventController.prototype._emitDragoverEvents = function (event, pointInfo, fromShape, toShape, isCanvasEmit) {\n if (toShape) {\n if (toShape !== fromShape) {\n if (fromShape) {\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n\n this._emitEvent('dragenter', event, pointInfo, toShape, fromShape, toShape);\n }\n\n if (!isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n } else if (fromShape) {\n // TODO: 此处判断有问题,当 drag 图形时,也会触发一次 dragleave 事件,因为此时 toShape 为 null,这不是所期望的\n // 经过空白区域\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n\n if (isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n }; // drag 完成后,需要做一些清理工作\n\n\n EventController.prototype._afterDrag = function (draggingShape, pointInfo, event) {\n if (draggingShape) {\n draggingShape.set('capture', true); // 恢复可以拾取\n\n this.draggingShape = null;\n }\n\n this.dragging = false; // drag 完成后,有可能 draggingShape 已经移动到了当前位置,所以不能直接取当前图形\n\n var shape = this._getShape(pointInfo, event); // 拖拽完成后,进行 enter,leave 的判定\n\n\n if (shape !== draggingShape) {\n this._emitMouseoverEvents(event, pointInfo, draggingShape, shape);\n }\n\n this.currentShape = shape; // 更新当前 shape,如果不处理当前图形的 mouseleave 事件可能会出问题\n }; // 按键抬起时,会终止拖拽、触发点击\n\n\n EventController.prototype._onmouseup = function (pointInfo, shape, event) {\n // eevent.button === 0 表示鼠标左键事件,此处加上判断主要是为了避免右键鼠标会触发 mouseup 和 click 事件\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button === LEFT_BTN_CODE) {\n var draggingShape = this.draggingShape;\n\n if (this.dragging) {\n // 存在可以拖拽的图形,同时拖拽到其他图形上时触发 drag 事件\n if (draggingShape) {\n this._emitEvent('drop', event, pointInfo, shape);\n }\n\n this._emitEvent('dragend', event, pointInfo, draggingShape);\n\n this._afterDrag(draggingShape, pointInfo, event);\n } else {\n this._emitEvent('mouseup', event, pointInfo, shape); // 先触发 mouseup 再触发 click\n\n\n if (shape === this.mousedownShape) {\n this._emitEvent('click', event, pointInfo, shape);\n }\n\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n }\n }; // 当触发浏览器的 dragover 事件时,不会再触发 mousemove ,所以这时候的 dragenter, dragleave 事件需要重新处理\n\n\n EventController.prototype._ondragover = function (pointInfo, shape, event) {\n event.preventDefault(); // 如果不对 dragover 进行 preventDefault,则不会在 canvas 上触发 drop 事件\n\n var preShape = this.currentShape;\n\n this._emitDragoverEvents(event, pointInfo, preShape, shape, true);\n }; // 大量的图形事件,都通过 mousemove 模拟\n\n\n EventController.prototype._onmousemove = function (pointInfo, shape, event) {\n var canvas = this.canvas;\n var preShape = this.currentShape;\n var draggingShape = this.draggingShape; // 正在拖拽时\n\n if (this.dragging) {\n // 正在拖拽中\n if (draggingShape) {\n // 如果拖拽了 shape 会触发 dragenter, dragleave, dragover 和 drag 事件\n this._emitDragoverEvents(event, pointInfo, preShape, shape, false);\n } // 如果存在 draggingShape 则会在 draggingShape 上触发 drag 事件,冒泡到 canvas 上\n // 否则在 canvas 上触发 drag 事件\n\n\n this._emitEvent('drag', event, pointInfo, draggingShape);\n } else {\n var mousedownPoint = this.mousedownPoint;\n\n if (mousedownPoint) {\n // 当鼠标点击下去,同时移动时,进行 drag 判定\n var mousedownShape = this.mousedownShape;\n var now = event.timeStamp;\n var timeWindow = now - this.mousedownTimeStamp;\n var dx = mousedownPoint.clientX - pointInfo.clientX;\n var dy = mousedownPoint.clientY - pointInfo.clientY;\n var dist = dx * dx + dy * dy;\n\n if (timeWindow > 120 || dist > CLICK_OFFSET) {\n if (mousedownShape && mousedownShape.get('draggable')) {\n // 设置了 draggable 的 shape 才能触发 drag 相关的事件\n draggingShape = this.mousedownShape; // 拖动鼠标点下时的 shape\n\n draggingShape.set('capture', false); // 禁止继续拾取,否则无法进行 dragover,dragenter,dragleave,drop的判定\n\n this.draggingShape = draggingShape;\n this.dragging = true;\n\n this._emitEvent('dragstart', event, pointInfo, draggingShape); // 清理按下鼠标时缓存的值\n\n\n this.mousedownShape = null;\n this.mousedownPoint = null;\n } else if (!mousedownShape && canvas.get('draggable')) {\n // 设置了 draggable 的 canvas 才能触发 drag 相关的事件\n this.dragging = true;\n\n this._emitEvent('dragstart', event, pointInfo, null); // 清理按下鼠标时缓存的值\n\n\n this.mousedownShape = null;\n this.mousedownPoint = null;\n } else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n } else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n } else {\n // 没有按键按下时,则直接触发 mouse over 相关的各种事件\n this._emitMouseoverEvents(event, pointInfo, preShape, shape); // 始终触发移动\n\n\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n }; // 触发事件\n\n\n EventController.prototype._emitEvent = function (type, event, pointInfo, shape, fromShape, toShape) {\n var eventObj = this._getEventObj(type, event, pointInfo, shape, fromShape, toShape); // 存在 shape 触发,则进行冒泡处理\n\n\n if (shape) {\n eventObj.shape = shape; // 触发 shape 上的事件\n\n emitTargetEvent(shape, type, eventObj);\n var parent_1 = shape.getParent(); // 执行冒泡\n\n while (parent_1) {\n // 委托事件要先触发\n parent_1.emitDelegation(type, eventObj); // 事件冒泡停止,不能妨碍委托事件\n\n if (!eventObj.propagationStopped) {\n bubbleEvent(parent_1, type, eventObj);\n }\n\n eventObj.propagationPath.push(parent_1);\n parent_1 = parent_1.getParent();\n }\n } else {\n // 如果没有 shape 直接在 canvas 上触发\n var canvas = this.canvas; // 直接触发 canvas 上的事件\n\n emitTargetEvent(canvas, type, eventObj);\n }\n };\n\n EventController.prototype.destroy = function () {\n // 清理事件\n this._clearEvents(); // 清理缓存的对象\n\n\n this.canvas = null;\n this.currentShape = null;\n this.draggingShape = null;\n this.mousedownPoint = null;\n this.mousedownShape = null;\n this.mousedownTimeStamp = null;\n };\n\n return EventController;\n}();\n\nvar _default = EventController;\nexports.default = _default;\n\n/***/ }),\n/* 742 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _container = _interopRequireDefault(__webpack_require__(381));\n\nvar AbstractGroup =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(AbstractGroup, _super);\n\n function AbstractGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n AbstractGroup.prototype.isGroup = function () {\n return true;\n };\n\n AbstractGroup.prototype.isEntityGroup = function () {\n return false;\n };\n\n AbstractGroup.prototype.clone = function () {\n var clone = _super.prototype.clone.call(this); // 获取构造函数\n\n\n var children = this.getChildren();\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n clone.add(child.clone());\n }\n\n return clone;\n };\n\n return AbstractGroup;\n}(_container.default);\n\nvar _default = AbstractGroup;\nexports.default = _default;\n\n/***/ }),\n/* 743 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _element = _interopRequireDefault(__webpack_require__(382));\n\nvar _matrix = __webpack_require__(241);\n\nvar AbstractShape =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(AbstractShape, _super);\n\n function AbstractShape(cfg) {\n return _super.call(this, cfg) || this;\n } // 是否在包围盒内\n\n\n AbstractShape.prototype._isInBBox = function (refX, refY) {\n var bbox = this.getBBox();\n return bbox.minX <= refX && bbox.maxX >= refX && bbox.minY <= refY && bbox.maxY >= refY;\n };\n /**\n * 属性更改后需要做的事情\n * @protected\n * @param {ShapeAttrs} targetAttrs 渲染的图像属性\n */\n\n\n AbstractShape.prototype.afterAttrsChange = function (targetAttrs) {\n _super.prototype.afterAttrsChange.call(this, targetAttrs);\n\n this.clearCacheBBox();\n }; // 计算包围盒时,需要缓存,这是一个高频的操作\n\n\n AbstractShape.prototype.getBBox = function () {\n var bbox = this.cfg.bbox;\n\n if (!bbox) {\n bbox = this.calculateBBox();\n this.set('bbox', bbox);\n }\n\n return bbox;\n }; // 计算相对于画布的包围盒\n\n\n AbstractShape.prototype.getCanvasBBox = function () {\n var canvasBBox = this.cfg.canvasBBox;\n\n if (!canvasBBox) {\n canvasBBox = this.calculateCanvasBBox();\n this.set('canvasBBox', canvasBBox);\n }\n\n return canvasBBox;\n };\n\n AbstractShape.prototype.applyMatrix = function (matrix) {\n _super.prototype.applyMatrix.call(this, matrix); // 清理掉缓存的包围盒\n\n\n this.set('canvasBBox', null);\n };\n /**\n * 计算相对于画布的包围盒,默认等同于 bbox\n * @return {BBox} 包围盒\n */\n\n\n AbstractShape.prototype.calculateCanvasBBox = function () {\n var bbox = this.getBBox();\n var totalMatrix = this.getTotalMatrix();\n var minX = bbox.minX,\n minY = bbox.minY,\n maxX = bbox.maxX,\n maxY = bbox.maxY;\n\n if (totalMatrix) {\n var topLeft = (0, _matrix.multiplyVec2)(totalMatrix, [bbox.minX, bbox.minY]);\n var topRight = (0, _matrix.multiplyVec2)(totalMatrix, [bbox.maxX, bbox.minY]);\n var bottomLeft = (0, _matrix.multiplyVec2)(totalMatrix, [bbox.minX, bbox.maxY]);\n var bottomRight = (0, _matrix.multiplyVec2)(totalMatrix, [bbox.maxX, bbox.maxY]);\n minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n }\n\n var attrs = this.attrs; // 如果存在 shadow 则计算 shadow\n\n if (attrs.shadowColor) {\n var _a = attrs.shadowBlur,\n shadowBlur = _a === void 0 ? 0 : _a,\n _b = attrs.shadowOffsetX,\n shadowOffsetX = _b === void 0 ? 0 : _b,\n _c = attrs.shadowOffsetY,\n shadowOffsetY = _c === void 0 ? 0 : _c;\n var shadowLeft = minX - shadowBlur + shadowOffsetX;\n var shadowRight = maxX + shadowBlur + shadowOffsetX;\n var shadowTop = minY - shadowBlur + shadowOffsetY;\n var shadowBottom = maxY + shadowBlur + shadowOffsetY;\n minX = Math.min(minX, shadowLeft);\n maxX = Math.max(maxX, shadowRight);\n minY = Math.min(minY, shadowTop);\n maxY = Math.max(maxY, shadowBottom);\n }\n\n return {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY\n };\n };\n /**\n * @protected\n * 清理缓存的 bbox\n */\n\n\n AbstractShape.prototype.clearCacheBBox = function () {\n this.set('bbox', null);\n this.set('canvasBBox', null);\n }; // 实现接口\n\n\n AbstractShape.prototype.isClipShape = function () {\n return this.get('isClipShape');\n };\n /**\n * @protected\n * 不同的图形自己实现是否在图形内部的逻辑,要判断边和填充区域\n * @param {number} refX 相对于图形的坐标 x\n * @param {number} refY 相对于图形的坐标 Y\n * @return {boolean} 点是否在图形内部\n */\n\n\n AbstractShape.prototype.isInShape = function (refX, refY) {\n return false;\n };\n /**\n * 是否仅仅使用 BBox 检测就可以判定拾取到图形\n * 默认是 false,但是有些图形例如 image、marker 等都可直接使用 BBox 的检测而不需要使用图形拾取\n * @return {Boolean} 仅仅使用 BBox 进行拾取\n */\n\n\n AbstractShape.prototype.isOnlyHitBox = function () {\n return false;\n }; // 不同的 Shape 各自实现\n\n\n AbstractShape.prototype.isHit = function (x, y) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n var vec = [x, y, 1];\n vec = this.invertFromMatrix(vec);\n var refX = vec[0],\n refY = vec[1];\n\n var inBBox = this._isInBBox(refX, refY); // 跳过图形的拾取,在某些图形中可以省略一倍的检测成本\n\n\n if (this.isOnlyHitBox()) {\n return inBBox;\n } // 被裁减掉的和不在包围盒内的不进行计算\n\n\n if (inBBox && !this.isClipped(refX, refY)) {\n // 对图形进行拾取判断\n if (this.isInShape(refX, refY)) {\n return true;\n } // 对起始箭头进行拾取判断\n\n\n if (startArrowShape && startArrowShape.isHit(refX, refY)) {\n return true;\n } // 对结束箭头进行拾取判断\n\n\n if (endArrowShape && endArrowShape.isHit(refX, refY)) {\n return true;\n }\n }\n\n return false;\n };\n\n return AbstractShape;\n}(_element.default);\n\nvar _default = AbstractShape;\nexports.default = _default;\n\n/***/ }),\n/* 744 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"getBBoxMethod\", {\n enumerable: true,\n get: function get() {\n return _register.getMethod;\n }\n});\n\nvar _register = __webpack_require__(745);\n\nvar _rect = _interopRequireDefault(__webpack_require__(746));\n\nvar _circle = _interopRequireDefault(__webpack_require__(747));\n\nvar _polyline = _interopRequireDefault(__webpack_require__(748));\n\nvar _polygon = _interopRequireDefault(__webpack_require__(754));\n\nvar _text = _interopRequireDefault(__webpack_require__(755));\n\nvar _path = _interopRequireDefault(__webpack_require__(756));\n\nvar _line = _interopRequireDefault(__webpack_require__(765));\n\nvar _ellipse = _interopRequireDefault(__webpack_require__(766));\n\n(0, _register.register)('rect', _rect.default);\n(0, _register.register)('image', _rect.default); // image 使用 rect 的包围盒计算\n\n(0, _register.register)('circle', _circle.default);\n(0, _register.register)('marker', _circle.default); // marker 使用 circle 的计算方案\n\n(0, _register.register)('polyline', _polyline.default);\n(0, _register.register)('polygon', _polygon.default);\n(0, _register.register)('text', _text.default);\n(0, _register.register)('path', _path.default);\n(0, _register.register)('line', _line.default);\n(0, _register.register)('ellipse', _ellipse.default);\n\n/***/ }),\n/* 745 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.register = register;\nexports.getMethod = getMethod;\nvar cache = new Map();\n/**\n * 注册计算包围盒的算法\n * @param type 方法名\n * @param method 方法\n */\n\nfunction register(type, method) {\n cache.set(type, method);\n}\n/**\n * 获取计算包围盒的算法\n * @param type 方法名\n */\n\n\nfunction getMethod(type) {\n return cache.get(type);\n}\n\n/***/ }),\n/* 746 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var x = attrs.x,\n y = attrs.y,\n width = attrs.width,\n height = attrs.height;\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n\n/***/ }),\n/* 747 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(shape) {\n var _a = shape.attr(),\n x = _a.x,\n y = _a.y,\n r = _a.r;\n\n return {\n x: x - r,\n y: y - r,\n width: r * 2,\n height: r * 2\n };\n}\n\n/***/ }),\n/* 748 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _gMath = __webpack_require__(35);\n\nvar _util = __webpack_require__(248);\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n\n var _a = _gMath.Util.getBBoxByArray(xArr, yArr),\n x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height;\n\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height\n };\n bbox = (0, _util.mergeArrowBBox)(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY\n };\n}\n\n/***/ }),\n/* 749 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _line = _interopRequireDefault(__webpack_require__(178));\n\nvar _util = __webpack_require__(86);\n\nvar _bezier = __webpack_require__(398);\n\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n} // 求极值\n\n\nfunction extrema(p0, p1, p2) {\n var a = p0 + p2 - 2 * p1;\n\n if ((0, _util.isNumberEqual)(a, 0)) {\n return [0.5];\n }\n\n var rst = (p0 - p1) / a;\n\n if (rst <= 1 && rst >= 0) {\n return [rst];\n }\n\n return [];\n}\n\nfunction derivativeAt(p0, p1, p2, t) {\n return 2 * (1 - t) * (p1 - p0) + 2 * t * (p2 - p1);\n} // 分割贝塞尔曲线\n\n\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n // 划分点\n var xt = quadraticAt(x1, x2, x3, t);\n var yt = quadraticAt(y1, y2, y3, t); // 分割的第一条曲线的控制点\n\n var controlPoint1 = _line.default.pointAt(x1, y1, x2, y2, t); // 分割的第二条曲线的控制点\n\n\n var controlPoint2 = _line.default.pointAt(x2, y2, x3, y3, t);\n\n return [[x1, y1, controlPoint1.x, controlPoint1.y, xt, yt], [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3]];\n} // 使用迭代法取贝塞尔曲线的长度\n\n\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n if (iterationCount === 0) {\n return ((0, _util.distance)(x1, y1, x2, y2) + (0, _util.distance)(x2, y2, x3, y3) + (0, _util.distance)(x1, y1, x3, y3)) / 2;\n }\n\n var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n var left = quadratics[0];\n var right = quadratics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return quadraticLength.apply(null, left) + quadraticLength.apply(null, right);\n}\n\nvar _default = {\n box: function box(x1, y1, x2, y2, x3, y3) {\n var xExtrema = extrema(x1, x2, x3)[0];\n var yExtrema = extrema(y1, y2, y3)[0]; // 控制点不加入 box 的计算\n\n var xArr = [x1, x3];\n var yArr = [y1, y3];\n\n if (xExtrema !== undefined) {\n xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n }\n\n if (yExtrema !== undefined) {\n yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n }\n\n return (0, _util.getBBoxByArray)(xArr, yArr);\n },\n length: function length(x1, y1, x2, y2, x3, y3) {\n return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n },\n nearestPoint: function nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0) {\n return (0, _bezier.nearestPoint)([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n },\n pointDistance: function pointDistance(x1, y1, x2, y2, x3, y3, x0, y0) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n return (0, _util.distance)(point.x, point.y, x0, y0);\n },\n interpolationAt: quadraticAt,\n pointAt: function pointAt(x1, y1, x2, y2, x3, y3, t) {\n return {\n x: quadraticAt(x1, x2, x3, t),\n y: quadraticAt(y1, y2, y3, t)\n };\n },\n divide: function divide(x1, y1, x2, y2, x3, y3, t) {\n return divideQuadratic(x1, y1, x2, y2, x3, y3, t);\n },\n tangentAngle: function tangentAngle(x1, y1, x2, y2, x3, y3, t) {\n var dx = derivativeAt(x1, x2, x3, t);\n var dy = derivativeAt(y1, y2, y3, t);\n var angle = Math.atan2(dy, dx);\n return (0, _util.piMod)(angle);\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 750 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(86);\n\nvar _line = _interopRequireDefault(__webpack_require__(178));\n\nvar _bezier = __webpack_require__(398);\n\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n\n return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\n\nfunction derivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\n\nfunction extrema(p0, p1, p2, p3) {\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var c = 3 * p1 - 3 * p0;\n var extremas = [];\n var t1;\n var t2;\n var discSqrt;\n\n if ((0, _util.isNumberEqual)(a, 0)) {\n if (!(0, _util.isNumberEqual)(b, 0)) {\n t1 = -c / b;\n\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n }\n } else {\n var disc = b * b - 4 * a * c;\n\n if ((0, _util.isNumberEqual)(disc, 0)) {\n extremas.push(-b / (2 * a));\n } else if (disc > 0) {\n discSqrt = Math.sqrt(disc);\n t1 = (-b + discSqrt) / (2 * a);\n t2 = (-b - discSqrt) / (2 * a);\n\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n\n if (t2 >= 0 && t2 <= 1) {\n extremas.push(t2);\n }\n }\n }\n\n return extremas;\n} // 分割贝塞尔曲线\n\n\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n // 划分点\n var xt = cubicAt(x1, x2, x3, x4, t);\n var yt = cubicAt(y1, y2, y3, y4, t); // 计算两点之间的差值点\n\n var c1 = _line.default.pointAt(x1, y1, x2, y2, t);\n\n var c2 = _line.default.pointAt(x2, y2, x3, y3, t);\n\n var c3 = _line.default.pointAt(x3, y3, x4, y4, t);\n\n var c12 = _line.default.pointAt(c1.x, c1.y, c2.x, c2.y, t);\n\n var c23 = _line.default.pointAt(c2.x, c2.y, c3.x, c3.y, t);\n\n return [[x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt], [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4]];\n} // 使用迭代法取贝塞尔曲线的长度,二阶和三阶分开写,更清晰和便于调试\n\n\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n if (iterationCount === 0) {\n return (0, _bezier.snapLength)([x1, x2, x3, x4], [y1, y2, y3, y4]);\n }\n\n var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n var left = cubics[0];\n var right = cubics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return cubicLength.apply(null, left) + cubicLength.apply(null, right);\n}\n\nvar _default = {\n extrema: extrema,\n box: function box(x1, y1, x2, y2, x3, y3, x4, y4) {\n var xArr = [x1, x4];\n var yArr = [y1, y4];\n var xExtrema = extrema(x1, x2, x3, x4);\n var yExtrema = extrema(y1, y2, y3, y4);\n\n for (var i = 0; i < xExtrema.length; i++) {\n xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n }\n\n for (var i = 0; i < yExtrema.length; i++) {\n yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[i]));\n }\n\n return (0, _util.getBBoxByArray)(xArr, yArr);\n },\n length: function length(x1, y1, x2, y2, x3, y3, x4, y4) {\n // 迭代三次,划分成 8 段求长度\n return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n },\n nearestPoint: function nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n return (0, _bezier.nearestPoint)([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n },\n pointDistance: function pointDistance(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n return (0, _util.distance)(point.x, point.y, x0, y0);\n },\n interpolationAt: cubicAt,\n pointAt: function pointAt(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return {\n x: cubicAt(x1, x2, x3, x4, t),\n y: cubicAt(y1, y2, y3, y4, t)\n };\n },\n divide: function divide(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t);\n },\n tangentAngle: function tangentAngle(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n var dx = derivativeAt(x1, x2, x3, x4, t);\n var dy = derivativeAt(y1, y2, y3, y4, t);\n return (0, _util.piMod)(Math.atan2(dy, dx));\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 751 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(86);\n\nvar _ellipse = _interopRequireDefault(__webpack_require__(752));\n\n// 偏导数 x\nfunction derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.cos(xRotation) * Math.sin(angle) - ry * Math.sin(xRotation) * Math.cos(angle);\n} // 偏导数 y\n\n\nfunction derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.sin(xRotation) * Math.sin(angle) + ry * Math.cos(xRotation) * Math.cos(angle);\n} // x 的极值\n\n\nfunction xExtrema(rx, ry, xRotation) {\n return Math.atan(-ry / rx * Math.tan(xRotation));\n} // y 的极值\n\n\nfunction yExtrema(rx, ry, xRotation) {\n return Math.atan(ry / (rx * Math.tan(xRotation)));\n} // 根据角度求 x 坐标\n\n\nfunction xAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.cos(xRotation) * Math.cos(angle) - ry * Math.sin(xRotation) * Math.sin(angle) + cx;\n} // 根据角度求 y 坐标\n\n\nfunction yAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.sin(xRotation) * Math.cos(angle) + ry * Math.cos(xRotation) * Math.sin(angle) + cy;\n} // 获取点在椭圆上的角度\n\n\nfunction getAngle(rx, ry, x0, y0) {\n var angle = Math.atan2(y0 * rx, x0 * ry); // 转换到 0 - 2PI 内\n\n return (angle + Math.PI * 2) % (Math.PI * 2);\n} // 根据角度获取,x,y\n\n\nfunction getPoint(rx, ry, angle) {\n return {\n x: rx * Math.cos(angle),\n y: ry * Math.sin(angle)\n };\n} // 旋转\n\n\nfunction rotate(x, y, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return [x * cos - y * sin, x * sin + y * cos];\n}\n\nvar _default = {\n /**\n * 计算包围盒\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @return {object} 包围盒对象\n */\n box: function box(cx, cy, rx, ry, xRotation, startAngle, endAngle) {\n var xDim = xExtrema(rx, ry, xRotation);\n var minX = Infinity;\n var maxX = -Infinity;\n var xs = [startAngle, endAngle];\n\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var xAngle = xDim + i;\n\n if (startAngle < endAngle) {\n if (startAngle < xAngle && xAngle < endAngle) {\n xs.push(xAngle);\n }\n } else {\n if (endAngle < xAngle && xAngle < startAngle) {\n xs.push(xAngle);\n }\n }\n }\n\n for (var i = 0; i < xs.length; i++) {\n var x = xAt(cx, cy, rx, ry, xRotation, xs[i]);\n\n if (x < minX) {\n minX = x;\n }\n\n if (x > maxX) {\n maxX = x;\n }\n }\n\n var yDim = yExtrema(rx, ry, xRotation);\n var minY = Infinity;\n var maxY = -Infinity;\n var ys = [startAngle, endAngle];\n\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var yAngle = yDim + i;\n\n if (startAngle < endAngle) {\n if (startAngle < yAngle && yAngle < endAngle) {\n ys.push(yAngle);\n }\n } else {\n if (endAngle < yAngle && yAngle < startAngle) {\n ys.push(yAngle);\n }\n }\n }\n\n for (var i = 0; i < ys.length; i++) {\n var y = yAt(cx, cy, rx, ry, xRotation, ys[i]);\n\n if (y < minY) {\n minY = y;\n }\n\n if (y > maxY) {\n maxY = y;\n }\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n },\n\n /**\n * 获取圆弧的长度,计算圆弧长度时不考虑旋转角度,\n * 仅跟 rx, ry, startAngle, endAngle 相关\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n */\n length: function length(cx, cy, rx, ry, xRotation, startAngle, endAngle) {},\n\n /**\n * 获取指定点到圆弧的最近距离的点\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @param {number} x0 指定点的 x\n * @param {number} y0 指定点的 y\n * @return {object} 到指定点最近距离的点\n */\n nearestPoint: function nearestPoint(cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n // 将最近距离问题转换成到椭圆中心 0,0 没有旋转的椭圆问题\n var relativeVector = rotate(x0 - cx, y0 - cy, -xRotation);\n var x1 = relativeVector[0],\n y1 = relativeVector[1]; // 计算点到椭圆的最近的点\n\n var relativePoint = _ellipse.default.nearestPoint(0, 0, rx, ry, x1, y1); // 获取点在椭圆上的角度\n\n\n var angle = getAngle(rx, ry, relativePoint.x, relativePoint.y); // 点没有在圆弧上\n\n if (angle < startAngle) {\n // 小于起始圆弧\n relativePoint = getPoint(rx, ry, startAngle);\n } else if (angle > endAngle) {\n // 大于结束圆弧\n relativePoint = getPoint(rx, ry, endAngle);\n } // 旋转到 xRotation 的角度\n\n\n var vector = rotate(relativePoint.x, relativePoint.y, xRotation);\n return {\n x: vector[0] + cx,\n y: vector[1] + cy\n };\n },\n pointDistance: function pointDistance(cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n var nearestPoint = this.nearestPoint(cx, cy, rx, ry, x0, y0);\n return (0, _util.distance)(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n pointAt: function pointAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n return {\n x: xAt(cx, cy, rx, ry, xRotation, angle),\n y: yAt(cx, cy, rx, ry, xRotation, angle)\n };\n },\n tangentAngle: function tangentAngle(cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n return (0, _util.piMod)(Math.atan2(dy, dx));\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 752 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(86);\n\n/**\n * @fileoverview 椭圆的一些计算,\n * - 周长计算参考:https://www.mathsisfun.com/geometry/ellipse-perimeter.html\n * - 距离计算参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\n * @author dxq613@gmail.com\n */\nfunction copysign(v1, v2) {\n var absv = Math.abs(v1);\n return v2 > 0 ? absv : absv * -1;\n}\n\nvar _default = {\n /**\n * 包围盒计算\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {object} 包围盒\n */\n box: function box(x, y, rx, ry) {\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2\n };\n },\n\n /**\n * 计算周长,使用近似法\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {number} 椭圆周长\n */\n length: function length(x, y, rx, ry) {\n return Math.PI * (3 * (rx + ry) - Math.sqrt((3 * rx + ry) * (rx + 3 * ry)));\n },\n\n /**\n * 距离椭圆最近的点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {object} 椭圆上距离指定点最近的点\n */\n nearestPoint: function nearestPoint(x, y, rx, ry, x0, y0) {\n var a = rx;\n var b = ry; // 假如椭圆半径为0则返回圆心\n\n if (a === 0 || b === 0) {\n return {\n x: x,\n y: y\n };\n } // 转换成 0, 0 为中心的椭圆计算\n\n\n var relativeX = x0 - x;\n var relativeY = y0 - y;\n var px = Math.abs(relativeX);\n var py = Math.abs(relativeY);\n var squareA = a * a;\n var squareB = b * b; // const angle0 = Math.atan2(relativeY, relativeX);\n\n var t = Math.PI / 4;\n var nearestX; // 椭圆上的任一点\n\n var nearestY; // 迭代 4 次\n\n for (var i = 0; i < 4; i++) {\n nearestX = a * Math.cos(t);\n nearestY = b * Math.sin(t);\n var ex = (squareA - squareB) * Math.pow(Math.cos(t), 3) / a;\n var ey = (squareB - squareA) * Math.pow(Math.sin(t), 3) / b;\n var rx1 = nearestX - ex;\n var ry1 = nearestY - ey;\n var qx = px - ex;\n var qy = py - ey;\n var r = Math.hypot(ry1, rx1);\n var q = Math.hypot(qy, qx);\n var delta_c = r * Math.asin((rx1 * qy - ry1 * qx) / (r * q));\n var delta_t = delta_c / Math.sqrt(squareA + squareB - nearestX * nearestX - nearestY * nearestY);\n t += delta_t;\n t = Math.min(Math.PI / 2, Math.max(0, t));\n }\n\n return {\n x: x + copysign(nearestX, relativeX),\n y: y + copysign(nearestY, relativeY)\n };\n },\n\n /**\n * 点到椭圆最近的距离\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {number} 点到椭圆的距离\n */\n pointDistance: function pointDistance(x, y, rx, ry, x0, y0) {\n var nearestPoint = this.nearestPoint(x, y, rx, ry, x0, y0);\n return (0, _util.distance)(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n\n /**\n * 根据比例获取点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例,x轴方向为 0\n * @return {object} 点\n */\n pointAt: function pointAt(x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n\n return {\n x: x + rx * Math.cos(angle),\n y: y + ry * Math.sin(angle)\n };\n },\n\n /**\n * 根据比例计算切线角度\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例 0 - 1 之间,x轴方向为 0。在 0-1 范围之外是循环还是返回 null,还需要调整\n * @return {number} 角度,在 0 - 2PI 之间\n */\n tangentAngle: function tangentAngle(x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n // 直接使用 x,y 的导数计算, x' = -rx * sin(t); y' = ry * cos(t);\n\n var tangentAngle = Math.atan2(ry * Math.cos(angle), -rx * Math.sin(angle)); // 也可以使用指定点的切线方程计算,成本有些高\n // const point = this.pointAt(0, 0, rx, ry, t); // 椭圆的切线同椭圆的中心不相关\n // let tangentAngle = -1 * Math.atan((ry * ry * point.x) / (rx * rx * point.y));\n // if (angle >= 0 && angle <= Math.PI) {\n // tangentAngle += Math.PI;\n // }\n\n return (0, _util.piMod)(tangentAngle);\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 753 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _segments = __webpack_require__(399);\n\nvar _polyline = _interopRequireDefault(__webpack_require__(400));\n\nfunction getAllPoints(points) {\n var tmp = points.slice(0);\n\n if (points.length) {\n tmp.push(points[0]);\n }\n\n return tmp;\n}\n\nvar _default = {\n /**\n * 计算多边形的包围盒\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 包围盒\n */\n box: function box(points) {\n return _polyline.default.box(points);\n },\n\n /**\n * 计算多边形的长度\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 多边形边的长度\n */\n length: function length(points) {\n return (0, _segments.lengthOfSegment)(getAllPoints(points));\n },\n\n /**\n * 根据比例获取多边形的点\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的点\n */\n pointAt: function pointAt(points, t) {\n return (0, _segments.pointAtSegments)(getAllPoints(points), t);\n },\n\n /**\n * 指定点到多边形的距离\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} x 指定点的 x\n * @param {number} y 指定点的 y\n * @return {number} 点到多边形的距离\n */\n pointDistance: function pointDistance(points, x, y) {\n return (0, _segments.distanceAtSegment)(getAllPoints(points), x, y);\n },\n\n /**\n * 根据比例获取多边形的切线角度\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的角度\n */\n tangentAngle: function tangentAngle(points, t) {\n return (0, _segments.angleAtSegments)(getAllPoints(points), t);\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 754 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _gMath = __webpack_require__(35);\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n\n return _gMath.Util.getBBoxByArray(xArr, yArr);\n}\n\n/***/ }),\n/* 755 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _text = __webpack_require__(401);\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var x = attrs.x,\n y = attrs.y,\n text = attrs.text,\n fontSize = attrs.fontSize,\n lineHeight = attrs.lineHeight;\n var font = attrs.font;\n\n if (!font) {\n // 如果未组装 font\n font = (0, _text.assembleFont)(attrs);\n }\n\n var width = (0, _text.getTextWidth)(text, font);\n var bbox;\n\n if (!width) {\n // 如果width不存在,四点共其实点\n bbox = {\n x: x,\n y: y,\n width: 0,\n height: 0\n };\n } else {\n var textAlign = attrs.textAlign,\n textBaseline = attrs.textBaseline;\n var height = (0, _text.getTextHeight)(text, fontSize, lineHeight); // attrs.height\n // 默认左右对齐:left, 默认上下对齐 bottom\n\n var point = {\n x: x,\n y: y - height\n };\n\n if (textAlign) {\n if (textAlign === 'end' || textAlign === 'right') {\n point.x -= width;\n } else if (textAlign === 'center') {\n point.x -= width / 2;\n }\n }\n\n if (textBaseline) {\n if (textBaseline === 'top') {\n point.y += height;\n } else if (textBaseline === 'middle') {\n point.y += height / 2;\n }\n }\n\n bbox = {\n x: point.x,\n y: point.y,\n width: width,\n height: height\n };\n }\n\n return bbox;\n}\n\n/***/ }),\n/* 756 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _gMath = __webpack_require__(35);\n\nvar _pathUtil = __webpack_require__(95);\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = __webpack_require__(248);\n\nfunction getPathBox(segments, lineWidth) {\n var xArr = [];\n var yArr = [];\n var segmentsWithAngle = [];\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint,\n params = segment.params,\n prePoint = segment.prePoint;\n var box = void 0;\n\n switch (segment.command) {\n case 'Q':\n box = _gMath.Quad.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]);\n break;\n\n case 'C':\n box = _gMath.Cubic.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]);\n break;\n\n case 'A':\n var arcParams = segment.arcParams;\n box = _gMath.Arc.box(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle);\n break;\n\n default:\n xArr.push(currentPoint[0]);\n yArr.push(currentPoint[1]);\n break;\n }\n\n if (box) {\n segment.box = box;\n xArr.push(box.x, box.x + box.width);\n yArr.push(box.y, box.y + box.height);\n }\n\n if (lineWidth && (segment.command === 'L' || segment.command === 'M') && segment.prePoint && segment.nextPoint) {\n segmentsWithAngle.push(segment);\n }\n } // bbox calculation should ignore NaN for path attribute\n // ref: https://github.com/antvis/g/issues/210\n\n\n xArr = xArr.filter(function (item) {\n return !Number.isNaN(item);\n });\n yArr = yArr.filter(function (item) {\n return !Number.isNaN(item);\n });\n var minX = Math.min.apply(null, xArr);\n var minY = Math.min.apply(null, yArr);\n var maxX = Math.max.apply(null, xArr);\n var maxY = Math.max.apply(null, yArr);\n\n if (segmentsWithAngle.length === 0) {\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n\n for (var i = 0; i < segmentsWithAngle.length; i++) {\n var segment = segmentsWithAngle[i];\n var currentPoint = segment.currentPoint;\n var extra = void 0;\n\n if (currentPoint[0] === minX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minX = minX - extra.xExtra;\n } else if (currentPoint[0] === maxX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxX = maxX + extra.xExtra;\n }\n\n if (currentPoint[1] === minY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minY = minY - extra.yExtra;\n } else if (currentPoint[1] === maxY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxY = maxY + extra.yExtra;\n }\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\n\nfunction getExtraFromSegmentWithAngle(segment, lineWidth) {\n var prePoint = segment.prePoint,\n currentPoint = segment.currentPoint,\n nextPoint = segment.nextPoint;\n var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2);\n var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2);\n var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2); // 以 currentPoint 为顶点的夹角\n\n var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext))); // 夹角为空、 0 或 PI 时,不需要计算夹角处的额外宽度\n // 注意: 由于计算精度问题,夹角为 0 的情况计算出来的角度可能是一个很小的值,还需要判断其与 0 是否近似相等\n\n if (!currentAngle || Math.sin(currentAngle) === 0 || (0, _util.isNumberEqual)(currentAngle, 0)) {\n return {\n xExtra: 0,\n yExtra: 0\n };\n }\n\n var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0]));\n var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1])); // 将夹角转为锐角\n\n xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle;\n yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle; // 这里不考虑在水平和垂直方向的投影,直接使用最大差值\n // 由于上层统一加减了二分之一线宽,这里需要进行弥补\n\n var extra = {\n // 水平方向投影\n xExtra: Math.cos(currentAngle / 2 - xAngle) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n // 垂直方向投影\n yExtra: Math.cos(yAngle - currentAngle / 2) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0\n };\n return extra;\n}\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var path = attrs.path,\n stroke = attrs.stroke;\n var lineWidth = stroke ? attrs.lineWidth : 0; // 只有有 stroke 时,lineWidth 才生效\n\n var segments = shape.get('segments') || (0, _pathUtil.path2Segments)(path);\n\n var _a = getPathBox(segments, lineWidth),\n x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height;\n\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height\n };\n bbox = (0, _util2.mergeArrowBBox)(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY\n };\n}\n\n/***/ }),\n/* 757 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = catmullRom2Bezier;\n\n// http://schepers.cc/getting-to-the-point\nfunction catmullRom2Bezier(crp, z) {\n var d = []; // @ts-ignore\n\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [{\n x: +crp[i - 2],\n y: +crp[i - 1]\n }, {\n x: +crp[i],\n y: +crp[i + 1]\n }, {\n x: +crp[i + 2],\n y: +crp[i + 3]\n }, {\n x: +crp[i + 4],\n y: +crp[i + 5]\n }];\n\n if (z) {\n if (!i) {\n p[0] = {\n x: +crp[iLen - 2],\n y: +crp[iLen - 1]\n };\n } else if (iLen - 4 === i) {\n p[3] = {\n x: +crp[0],\n y: +crp[1]\n };\n } else if (iLen - 2 === i) {\n p[2] = {\n x: +crp[0],\n y: +crp[1]\n };\n p[3] = {\n x: +crp[2],\n y: +crp[3]\n };\n }\n } else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {\n x: +crp[i],\n y: +crp[i + 1]\n };\n }\n }\n\n d.push(['C', (-p[0].x + 6 * p[1].x + p[2].x) / 6, (-p[0].y + 6 * p[1].y + p[2].y) / 6, (p[1].x + 6 * p[2].x - p[3].x) / 6, (p[1].y + 6 * p[2].y - p[3].y) / 6, p[2].x, p[2].y]);\n }\n\n return d;\n}\n\n/***/ }),\n/* 758 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = fillPath;\n\nfunction decasteljau(points, t) {\n var left = [];\n var right = [];\n\n function recurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n } else {\n var middlePoints = [];\n\n for (var i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n\n if (i === points.length - 2) {\n right.push(points[i + 1]);\n }\n\n middlePoints[i] = [(1 - t) * points[i][0] + t * points[i + 1][0], (1 - t) * points[i][1] + t * points[i + 1][1]];\n }\n\n recurse(middlePoints, t);\n }\n }\n\n if (points.length) {\n recurse(points, t);\n }\n\n return {\n left: left,\n right: right.reverse()\n };\n}\n\nfunction splitCurve(start, end, count) {\n var points = [[start[1], start[2]]];\n count = count || 2;\n var segments = [];\n\n if (end[0] === 'A') {\n points.push(end[6]);\n points.push(end[7]);\n } else if (end[0] === 'C') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n points.push([end[5], end[6]]);\n } else if (end[0] === 'S' || end[0] === 'Q') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n } else {\n points.push([end[1], end[2]]);\n }\n\n var leftSegments = points;\n var t = 1 / count;\n\n for (var i = 0; i < count - 1; i++) {\n var rt = t / (1 - t * i);\n var split = decasteljau(leftSegments, rt);\n segments.push(split.left);\n leftSegments = split.right;\n }\n\n segments.push(leftSegments);\n var result = segments.map(function (segment) {\n var cmd = [];\n\n if (segment.length === 4) {\n cmd.push('C');\n cmd = cmd.concat(segment[2]);\n }\n\n if (segment.length >= 3) {\n if (segment.length === 3) {\n cmd.push('Q');\n }\n\n cmd = cmd.concat(segment[1]);\n }\n\n if (segment.length === 2) {\n cmd.push('L');\n }\n\n cmd = cmd.concat(segment[segment.length - 1]);\n return cmd;\n });\n return result;\n}\n\nfunction splitSegment(start, end, count) {\n if (count === 1) {\n return [[].concat(start)];\n }\n\n var segments = [];\n\n if (end[0] === 'L' || end[0] === 'C' || end[0] === 'Q') {\n segments = segments.concat(splitCurve(start, end, count));\n } else {\n var temp = [].concat(start);\n\n if (temp[0] === 'M') {\n temp[0] = 'L';\n }\n\n for (var i = 0; i <= count - 1; i++) {\n segments.push(temp);\n }\n }\n\n return segments;\n}\n\nfunction fillPath(source, target) {\n if (source.length === 1) {\n return source;\n }\n\n var sourceLen = source.length - 1;\n var targetLen = target.length - 1;\n var ratio = sourceLen / targetLen;\n var segmentsToFill = [];\n\n if (source.length === 1 && source[0][0] === 'M') {\n for (var i = 0; i < targetLen - sourceLen; i++) {\n source.push(source[0]);\n }\n\n return source;\n }\n\n for (var i = 0; i < targetLen; i++) {\n var index = Math.floor(ratio * i);\n segmentsToFill[index] = (segmentsToFill[index] || 0) + 1;\n }\n\n var filled = segmentsToFill.reduce(function (filled, count, i) {\n if (i === sourceLen) {\n return filled.concat(source[sourceLen]);\n }\n\n return filled.concat(splitSegment(source[i], source[i + 1], count));\n }, []);\n filled.unshift(source[0]);\n\n if (target[targetLen] === 'Z' || target[targetLen] === 'z') {\n filled.push('Z');\n }\n\n return filled;\n}\n\n/***/ }),\n/* 759 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = fillPathByDiff;\n\nvar _util = __webpack_require__(0);\n\nfunction getMinDiff(del, add, modify) {\n var type = null;\n var min = modify;\n\n if (add < min) {\n min = add;\n type = 'add';\n }\n\n if (del < min) {\n min = del;\n type = 'del';\n }\n\n return {\n type: type,\n min: min\n };\n}\n/*\n * https://en.wikipedia.org/wiki/Levenshtein_distance\n * 计算两条path的编辑距离\n */\n\n\nvar levenshteinDistance = function levenshteinDistance(source, target) {\n var sourceLen = source.length;\n var targetLen = target.length;\n var sourceSegment, targetSegment;\n var temp = 0;\n\n if (sourceLen === 0 || targetLen === 0) {\n return null;\n }\n\n var dist = [];\n\n for (var i = 0; i <= sourceLen; i++) {\n dist[i] = [];\n dist[i][0] = {\n min: i\n };\n }\n\n for (var j = 0; j <= targetLen; j++) {\n dist[0][j] = {\n min: j\n };\n }\n\n for (var i = 1; i <= sourceLen; i++) {\n sourceSegment = source[i - 1];\n\n for (var j = 1; j <= targetLen; j++) {\n targetSegment = target[j - 1];\n\n if ((0, _util.isEqual)(sourceSegment, targetSegment)) {\n temp = 0;\n } else {\n temp = 1;\n }\n\n var del = dist[i - 1][j].min + 1;\n var add = dist[i][j - 1].min + 1;\n var modify = dist[i - 1][j - 1].min + temp;\n dist[i][j] = getMinDiff(del, add, modify);\n }\n }\n\n return dist;\n};\n\nfunction fillPathByDiff(source, target) {\n var diffMatrix = levenshteinDistance(source, target);\n var sourceLen = source.length;\n var targetLen = target.length;\n var changes = [];\n var index = 1;\n var minPos = 1; // 如果source和target不是完全不相等\n // @ts-ignore\n\n if (diffMatrix[sourceLen][targetLen] !== sourceLen) {\n // 获取从source到target所需改动\n for (var i = 1; i <= sourceLen; i++) {\n var min = diffMatrix[i][i].min;\n minPos = i;\n\n for (var j = index; j <= targetLen; j++) {\n if (diffMatrix[i][j].min < min) {\n min = diffMatrix[i][j].min;\n minPos = j;\n }\n }\n\n index = minPos;\n\n if (diffMatrix[i][index].type) {\n changes.push({\n index: i - 1,\n type: diffMatrix[i][index].type\n });\n }\n } // 对source进行增删path\n\n\n for (var i = changes.length - 1; i >= 0; i--) {\n index = changes[i].index;\n\n if (changes[i].type === 'add') {\n // @ts-ignore\n source.splice(index, 0, [].concat(source[index]));\n } else {\n // @ts-ignore\n source.splice(index, 1);\n }\n }\n } // source尾部补齐\n\n\n sourceLen = source.length;\n\n if (sourceLen < targetLen) {\n for (var i = 0; i < targetLen - sourceLen; i++) {\n if (source[sourceLen - 1][0] === 'z' || source[sourceLen - 1][0] === 'Z') {\n // @ts-ignore\n source.splice(sourceLen - 2, 0, source[sourceLen - 2]);\n } else {\n // @ts-ignore\n source.push(source[sourceLen - 1]);\n }\n }\n }\n\n return source;\n}\n\n/***/ }),\n/* 760 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = formatPath;\n\n/*\n * 抽取pathSegment中的关键点\n * M,L,A,Q,H,V一个端点\n * Q, S抽取一个端点,一个控制点\n * C抽取一个端点,两个控制点\n */\nfunction _getSegmentPoints(segment) {\n var points = [];\n\n switch (segment[0]) {\n case 'M':\n points.push([segment[1], segment[2]]);\n break;\n\n case 'L':\n points.push([segment[1], segment[2]]);\n break;\n\n case 'A':\n points.push([segment[6], segment[7]]);\n break;\n\n case 'Q':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n\n case 'T':\n points.push([segment[1], segment[2]]);\n break;\n\n case 'C':\n points.push([segment[5], segment[6]]);\n points.push([segment[1], segment[2]]);\n points.push([segment[3], segment[4]]);\n break;\n\n case 'S':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n\n case 'H':\n points.push([segment[1], segment[1]]);\n break;\n\n case 'V':\n points.push([segment[1], segment[1]]);\n break;\n\n default:\n }\n\n return points;\n} // 将两个点均分成count个点\n\n\nfunction _splitPoints(points, former, count) {\n var result = [].concat(points);\n var index;\n var t = 1 / (count + 1);\n\n var formerEnd = _getSegmentPoints(former)[0];\n\n for (var i = 1; i <= count; i++) {\n t *= i;\n index = Math.floor(points.length * t);\n\n if (index === 0) {\n result.unshift([formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n } else {\n result.splice(index, 0, [formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n }\n }\n\n return result;\n}\n\nfunction formatPath(fromPath, toPath) {\n if (fromPath.length <= 1) {\n return fromPath;\n }\n\n var points;\n\n for (var i = 0; i < toPath.length; i++) {\n if (fromPath[i][0] !== toPath[i][0]) {\n // 获取fromPath的pathSegment的端点,根据toPath的指令对其改造\n points = _getSegmentPoints(fromPath[i]);\n\n switch (toPath[i][0]) {\n case 'M':\n fromPath[i] = ['M'].concat(points[0]);\n break;\n\n case 'L':\n fromPath[i] = ['L'].concat(points[0]);\n break;\n\n case 'A':\n fromPath[i] = [].concat(toPath[i]);\n fromPath[i][6] = points[0][0];\n fromPath[i][7] = points[0][1];\n break;\n\n case 'Q':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n } else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n\n fromPath[i] = ['Q'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n\n case 'T':\n fromPath[i] = ['T'].concat(points[0]);\n break;\n\n case 'C':\n if (points.length < 3) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 2);\n } else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n\n fromPath[i] = ['C'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n\n case 'S':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n } else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n\n fromPath[i] = ['S'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n\n default:\n fromPath[i] = toPath[i];\n }\n }\n }\n\n return fromPath;\n}\n\n/***/ }),\n/* 761 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = pathIntersection;\n\nvar _util = __webpack_require__(0);\n\nvar _rectPath = _interopRequireDefault(__webpack_require__(404));\n\nvar _path2Curve = _interopRequireDefault(__webpack_require__(405));\n\nvar base3 = function base3(t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n};\n\nvar bezlen = function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z === null) {\n z = 1;\n }\n\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [-0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n\n return z2 * sum;\n};\n\nvar curveDim = function curveDim(x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [];\n var bounds = [[], []];\n var a;\n var b;\n var c;\n var t;\n\n for (var i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n\n t = -c / b;\n\n if (t > 0 && t < 1) {\n tvalues.push(t);\n }\n\n continue;\n }\n\n var b2ac = b * b - 4 * c * a;\n var sqrtb2ac = Math.sqrt(b2ac);\n\n if (b2ac < 0) {\n continue;\n }\n\n var t1 = (-b + sqrtb2ac) / (2 * a);\n\n if (t1 > 0 && t1 < 1) {\n tvalues.push(t1);\n }\n\n var t2 = (-b - sqrtb2ac) / (2 * a);\n\n if (t2 > 0 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var j = tvalues.length;\n var jlen = j;\n var mt;\n\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n return {\n min: {\n x: Math.min.apply(0, bounds[0]),\n y: Math.min.apply(0, bounds[1])\n },\n max: {\n x: Math.max.apply(0, bounds[0]),\n y: Math.max.apply(0, bounds[1])\n }\n };\n};\n\nvar intersect = function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n if (Math.max(x1, x2) < Math.min(x3, x4) || Math.min(x1, x2) > Math.max(x3, x4) || Math.max(y1, y2) < Math.min(y3, y4) || Math.min(y1, y2) > Math.max(y3, y4)) {\n return;\n }\n\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n if (!denominator) {\n return;\n }\n\n var px = nx / denominator;\n var py = ny / denominator;\n var px2 = +px.toFixed(2);\n var py2 = +py.toFixed(2);\n\n if (px2 < +Math.min(x1, x2).toFixed(2) || px2 > +Math.max(x1, x2).toFixed(2) || px2 < +Math.min(x3, x4).toFixed(2) || px2 > +Math.max(x3, x4).toFixed(2) || py2 < +Math.min(y1, y2).toFixed(2) || py2 > +Math.max(y1, y2).toFixed(2) || py2 < +Math.min(y3, y4).toFixed(2) || py2 > +Math.max(y3, y4).toFixed(2)) {\n return;\n }\n\n return {\n x: px,\n y: py\n };\n};\n\nvar isPointInsideBBox = function isPointInsideBBox(bbox, x, y) {\n return x >= bbox.x && x <= bbox.x + bbox.width && y >= bbox.y && y <= bbox.y + bbox.height;\n};\n\nvar box = function box(x, y, width, height) {\n if (x === null) {\n x = y = width = height = 0;\n }\n\n if (y === null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: Math.min(width, height) / 2,\n r2: Math.max(width, height) / 2,\n r0: Math.sqrt(width * width + height * height) / 2,\n path: (0, _rectPath.default)(x, y, width, height),\n vb: [x, y, width, height].join(' ')\n };\n};\n\nvar isBBoxIntersect = function isBBoxIntersect(bbox1, bbox2) {\n // @ts-ignore\n bbox1 = box(bbox1); // @ts-ignore\n\n bbox2 = box(bbox2);\n return isPointInsideBBox(bbox2, bbox1.x, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x) && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n};\n\nvar bezierBBox = function bezierBBox(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!(0, _util.isArray)(p1x)) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n\n var bbox = curveDim.apply(null, p1x);\n return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\n\nvar findDotsAtSegment = function findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n var t13 = Math.pow(t1, 3);\n var t12 = Math.pow(t1, 2);\n var t2 = t * t;\n var t3 = t2 * t;\n var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n var ax = t1 * p1x + t * c1x;\n var ay = t1 * p1y + t * c1y;\n var cx = t1 * c2x + t * p2x;\n var cy = t1 * c2y + t * p2y;\n var alpha = 90 - Math.atan2(mx - nx, my - ny) * 180 / Math.PI; // (mx > nx || my < ny) && (alpha += 180);\n\n return {\n x: x,\n y: y,\n m: {\n x: mx,\n y: my\n },\n n: {\n x: nx,\n y: ny\n },\n start: {\n x: ax,\n y: ay\n },\n end: {\n x: cx,\n y: cy\n },\n alpha: alpha\n };\n};\n\nvar interHelper = function interHelper(bez1, bez2, justCount) {\n // @ts-ignore\n var bbox1 = bezierBBox(bez1); // @ts-ignore\n\n var bbox2 = bezierBBox(bez2);\n\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n\n var l1 = bezlen.apply(0, bez1);\n var l2 = bezlen.apply(0, bez2);\n var n1 = ~~(l1 / 8);\n var n2 = ~~(l2 / 8);\n var dots1 = [];\n var dots2 = [];\n var xy = {};\n var res = justCount ? 0 : [];\n\n for (var i = 0; i < n1 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({\n x: d.x,\n y: d.y,\n t: i / n1\n });\n }\n\n for (var i = 0; i < n2 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({\n x: d.x,\n y: d.y,\n t: i / n2\n });\n }\n\n for (var i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i];\n var di1 = dots1[i + 1];\n var dj = dots2[j];\n var dj1 = dots2[j + 1];\n var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n\n if (is) {\n if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n continue;\n }\n\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n // @ts-ignore\n res++;\n } else {\n // @ts-ignore\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2\n });\n }\n }\n }\n }\n }\n\n return res;\n};\n\nvar interPathHelper = function interPathHelper(path1, path2, justCount) {\n // @ts-ignore\n path1 = (0, _path2Curve.default)(path1); // @ts-ignore\n\n path2 = (0, _path2Curve.default)(path2);\n var x1;\n var y1;\n var x2;\n var y2;\n var x1m;\n var y1m;\n var x2m;\n var y2m;\n var bez1;\n var bez2;\n var res = justCount ? 0 : [];\n\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n\n if (pi[0] === 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n } else {\n if (pi[0] === 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n } else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n\n if (pj[0] === 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n } else {\n if (pj[0] === 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n } else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n\n var intr = interHelper(bez1, bez2, justCount);\n\n if (justCount) {\n // @ts-ignore\n res += intr;\n } else {\n // @ts-ignore\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n } // @ts-ignore\n\n\n res = res.concat(intr);\n }\n }\n }\n }\n }\n\n return res;\n};\n\nfunction pathIntersection(path1, path2) {\n // @ts-ignore\n return interPathHelper(path1, path2);\n}\n\n/***/ }),\n/* 762 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = parsePathArray;\nvar p2s = /,?([a-z]),?/gi;\n\nfunction parsePathArray(path) {\n return path.join(',').replace(p2s, '$1');\n}\n\n/***/ }),\n/* 763 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getSegments;\n\nvar _getArcParams = _interopRequireWildcard(__webpack_require__(408));\n\nvar _parsePath = _interopRequireDefault(__webpack_require__(403));\n\n// 点对称\nfunction toSymmetry(point, center) {\n return [center[0] + (center[0] - point[0]), center[1] + (center[1] - point[1])];\n}\n\nfunction getSegments(path) {\n path = (0, _parsePath.default)(path);\n var segments = [];\n var currentPoint = null; // 当前图形\n\n var nextParams = null; // 下一节点的 path 参数\n\n var startMovePoint = null; // 开始 M 的点,可能会有多个\n\n var lastStartMovePointIndex = 0; // 最近一个开始点 M 的索引\n\n var count = path.length;\n\n for (var i = 0; i < count; i++) {\n var params = path[i];\n nextParams = path[i + 1];\n var command = params[0]; // 数学定义上的参数,便于后面的计算\n\n var segment = {\n command: command,\n prePoint: currentPoint,\n params: params,\n startTangent: null,\n endTangent: null\n };\n\n switch (command) {\n case 'M':\n startMovePoint = [params[1], params[2]];\n lastStartMovePointIndex = i;\n break;\n\n case 'A':\n var arcParams = (0, _getArcParams.default)(currentPoint, params);\n segment['arcParams'] = arcParams;\n break;\n\n default:\n break;\n }\n\n if (command === 'Z') {\n // 有了 Z 后,当前节点从开始 M 的点开始\n currentPoint = startMovePoint; // 如果当前点的命令为 Z,相当于当前点为最近一个 M 点,则下一个点直接指向最近一个 M 点的下一个点\n\n nextParams = path[lastStartMovePointIndex + 1];\n } else {\n var len = params.length;\n currentPoint = [params[len - 2], params[len - 1]];\n }\n\n if (nextParams && nextParams[0] === 'Z') {\n // 如果下一个点的命令为 Z,则下一个点直接指向最近一个 M 点\n nextParams = path[lastStartMovePointIndex];\n\n if (segments[lastStartMovePointIndex]) {\n // 如果下一个点的命令为 Z,则最近一个 M 点的前一个点为当前点\n segments[lastStartMovePointIndex].prePoint = currentPoint;\n }\n }\n\n segment['currentPoint'] = currentPoint; // 如果当前点与最近一个 M 点相同,则最近一个 M 点的前一个点为当前点的前一个点\n\n if (segments[lastStartMovePointIndex] && (0, _getArcParams.isSamePoint)(currentPoint, segments[lastStartMovePointIndex].currentPoint)) {\n segments[lastStartMovePointIndex].prePoint = segment.prePoint;\n }\n\n var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null;\n segment['nextPoint'] = nextPoint; // Add startTangent and endTangent\n\n var prePoint = segment.prePoint;\n\n if (['L', 'H', 'V'].includes(command)) {\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n } else if (command === 'Q') {\n // 二次贝塞尔曲线只有一个控制点\n var cp = [params[1], params[2]]; // 二次贝塞尔曲线的终点为 currentPoint\n\n segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n } else if (command === 'T') {\n var preSegment = segments[i - 1];\n var cp = toSymmetry(preSegment.currentPoint, prePoint);\n\n if (preSegment.command === 'Q') {\n segment.command = 'Q';\n segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n } else {\n segment.command = 'TL';\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n }\n } else if (command === 'C') {\n // 三次贝塞尔曲线有两个控制点\n var cp1 = [params[1], params[2]];\n var cp2 = [params[3], params[4]];\n segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n } else if (command === 'S') {\n var preSegment = segments[i - 1];\n var cp1 = toSymmetry(preSegment.currentPoint, prePoint);\n var cp2 = [params[1], params[2]];\n\n if (preSegment.command === 'C') {\n segment.command = 'C'; // 将 S 命令变换为 C 命令\n\n segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n } else {\n segment.command = 'SQ'; // 将 S 命令变换为 SQ 命令\n\n segment.startTangent = [prePoint[0] - cp2[0], prePoint[1] - cp2[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n }\n } else if (command === 'A') {\n var d = 0.001;\n\n var _a = segment['arcParams'] || {},\n _b = _a.cx,\n cx = _b === void 0 ? 0 : _b,\n _c = _a.cy,\n cy = _c === void 0 ? 0 : _c,\n _d = _a.rx,\n rx = _d === void 0 ? 0 : _d,\n _e = _a.ry,\n ry = _e === void 0 ? 0 : _e,\n _f = _a.sweepFlag,\n sweepFlag = _f === void 0 ? 0 : _f,\n _g = _a.startAngle,\n startAngle = _g === void 0 ? 0 : _g,\n _h = _a.endAngle,\n endAngle = _h === void 0 ? 0 : _h;\n\n if (sweepFlag === 0) {\n d *= -1;\n }\n\n var dx1 = rx * Math.cos(startAngle - d) + cx;\n var dy1 = ry * Math.sin(startAngle - d) + cy;\n segment.startTangent = [dx1 - startMovePoint[0], dy1 - startMovePoint[1]];\n var dx2 = rx * Math.cos(startAngle + endAngle + d) + cx;\n var dy2 = ry * Math.sin(startAngle + endAngle - d) + cy;\n segment.endTangent = [prePoint[0] - dx2, prePoint[1] - dy2];\n }\n\n segments.push(segment);\n }\n\n return segments;\n}\n\n/***/ }),\n/* 764 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isPolygonsIntersect;\n\nvar _pointInPolygon = _interopRequireDefault(__webpack_require__(410));\n\nvar _getLineIntersect = _interopRequireDefault(__webpack_require__(409));\n\nvar _util = __webpack_require__(0);\n\nfunction parseToLines(points) {\n var lines = [];\n var count = points.length;\n\n for (var i = 0; i < count - 1; i++) {\n var point = points[i];\n var next = points[i + 1];\n lines.push({\n from: {\n x: point[0],\n y: point[1]\n },\n to: {\n x: next[0],\n y: next[1]\n }\n });\n }\n\n if (lines.length > 1) {\n var first = points[0];\n var last = points[count - 1];\n lines.push({\n from: {\n x: last[0],\n y: last[1]\n },\n to: {\n x: first[0],\n y: first[1]\n }\n });\n }\n\n return lines;\n}\n\nfunction lineIntersectPolygon(lines, line) {\n var isIntersect = false;\n (0, _util.each)(lines, function (l) {\n if ((0, _getLineIntersect.default)(l.from, l.to, line.from, line.to)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n}\n\nfunction getBBox(points) {\n var xArr = points.map(function (p) {\n return p[0];\n });\n var yArr = points.map(function (p) {\n return p[1];\n });\n return {\n minX: Math.min.apply(null, xArr),\n maxX: Math.max.apply(null, xArr),\n minY: Math.min.apply(null, yArr),\n maxY: Math.max.apply(null, yArr)\n };\n}\n\nfunction intersectBBox(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\n\nfunction isPolygonsIntersect(points1, points2) {\n // 空数组,或者一个点返回 false\n if (points1.length < 2 || points2.length < 2) {\n return false;\n }\n\n var bbox1 = getBBox(points1);\n var bbox2 = getBBox(points2); // 判定包围盒是否相交,比判定点是否在多边形内要快的多,可以筛选掉大多数情况\n\n if (!intersectBBox(bbox1, bbox2)) {\n return false;\n }\n\n var isIn = false; // 判定点是否在多边形内部,一旦有一个点在另一个多边形内,则返回\n\n (0, _util.each)(points2, function (point) {\n if ((0, _pointInPolygon.default)(points1, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n\n if (isIn) {\n return true;\n } // 两个多边形都需要判定\n\n\n (0, _util.each)(points1, function (point) {\n if ((0, _pointInPolygon.default)(points2, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n\n if (isIn) {\n return true;\n }\n\n var lines1 = parseToLines(points1);\n var lines2 = parseToLines(points2);\n var isIntersect = false;\n (0, _util.each)(lines2, function (line) {\n if (lineIntersectPolygon(lines1, line)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n}\n\n/***/ }),\n/* 765 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _util = __webpack_require__(248);\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var bbox = {\n minX: minX,\n maxX: maxX,\n minY: minY,\n maxY: maxY\n };\n bbox = (0, _util.mergeArrowBBox)(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY\n };\n}\n\n/***/ }),\n/* 766 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(shape) {\n var attrs = shape.attr();\n var x = attrs.x,\n y = attrs.y,\n rx = attrs.rx,\n ry = attrs.ry;\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2\n };\n}\n\n/***/ }),\n/* 767 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _exportNames = {\n getAdjust: true,\n registerAdjust: true,\n Adjust: true\n};\nObject.defineProperty(exports, \"Adjust\", {\n enumerable: true,\n get: function get() {\n return _adjust.default;\n }\n});\nexports.registerAdjust = exports.getAdjust = void 0;\n\nvar _adjust = _interopRequireDefault(__webpack_require__(111));\n\nvar _interface = __webpack_require__(412);\n\nObject.keys(_interface).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _interface[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _interface[key];\n }\n });\n});\nvar ADJUST_MAP = {};\n/**\n * 根据类型获取 Adjust 类\n * @param type\n */\n\nvar getAdjust = function getAdjust(type) {\n return ADJUST_MAP[type.toLowerCase()];\n};\n/**\n * 注册自定义 Adjust\n * @param type\n * @param ctor\n */\n\n\nexports.getAdjust = getAdjust;\n\nvar registerAdjust = function registerAdjust(type, ctor) {\n // 注册的时候,需要校验 type 重名,不区分大小写\n if (getAdjust(type)) {\n throw new Error(\"Adjust type '\" + type + \"' existed.\");\n } // 存储到 map 中\n\n\n ADJUST_MAP[type.toLowerCase()] = ctor;\n};\n\nexports.registerAdjust = registerAdjust;\n\n/***/ }),\n/* 768 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _ = _interopRequireWildcard(__webpack_require__(0));\n\nvar _constant = __webpack_require__(249);\n\nvar _adjust = _interopRequireDefault(__webpack_require__(111));\n\nvar Dodge =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Dodge, _super);\n\n function Dodge(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.cacheMap = {};\n _this.adjustDataArray = [];\n _this.mergeData = [];\n var _a = cfg.marginRatio,\n marginRatio = _a === void 0 ? _constant.MARGIN_RATIO : _a,\n _b = cfg.dodgeRatio,\n dodgeRatio = _b === void 0 ? _constant.DODGE_RATIO : _b,\n dodgeBy = cfg.dodgeBy,\n intervalPadding = cfg.intervalPadding,\n dodgePadding = cfg.dodgePadding,\n xDimensionLength = cfg.xDimensionLength,\n groupNum = cfg.groupNum,\n defaultSize = cfg.defaultSize,\n maxColumnWidth = cfg.maxColumnWidth,\n minColumnWidth = cfg.minColumnWidth,\n columnWidthRatio = cfg.columnWidthRatio;\n _this.marginRatio = marginRatio;\n _this.dodgeRatio = dodgeRatio;\n _this.dodgeBy = dodgeBy;\n _this.intervalPadding = intervalPadding;\n _this.dodgePadding = dodgePadding;\n _this.xDimensionLegenth = xDimensionLength;\n _this.groupNum = groupNum;\n _this.defaultSize = defaultSize;\n _this.maxColumnWidth = maxColumnWidth;\n _this.minColumnWidth = minColumnWidth;\n _this.columnWidthRatio = columnWidthRatio;\n return _this;\n }\n\n Dodge.prototype.process = function (groupDataArray) {\n var groupedDataArray = _.clone(groupDataArray); // 将数据数组展开一层\n\n\n var mergeData = _.flatten(groupedDataArray);\n\n var dodgeBy = this.dodgeBy; // 如果指定了分组 dim 的字段\n\n var adjustDataArray = dodgeBy ? _.group(mergeData, dodgeBy) : groupedDataArray;\n this.cacheMap = {};\n this.adjustDataArray = adjustDataArray;\n this.mergeData = mergeData;\n this.adjustData(adjustDataArray, mergeData);\n this.adjustDataArray = [];\n this.mergeData = [];\n return groupedDataArray;\n };\n\n Dodge.prototype.adjustDim = function (dim, values, data, frameIndex) {\n var _this = this;\n\n var map = this.getDistribution(dim);\n var groupData = this.groupData(data, dim); // 根据值分组\n\n _.each(groupData, function (group, key) {\n var range; // xField 中只有一个值,不需要做 dodge\n\n if (values.length === 1) {\n range = {\n pre: values[0] - 1,\n next: values[0] + 1\n };\n } else {\n // 如果有多个,则需要获取调整的范围\n range = _this.getAdjustRange(dim, parseFloat(key), values);\n }\n\n _.each(group, function (d) {\n var value = d[dim];\n var valueArr = map[value];\n var valIndex = valueArr.indexOf(frameIndex);\n d[dim] = _this.getDodgeOffset(range, valIndex, valueArr.length);\n });\n });\n\n return [];\n };\n\n Dodge.prototype.getDodgeOffset = function (range, idx, len) {\n var _a = this,\n dodgeRatio = _a.dodgeRatio,\n marginRatio = _a.marginRatio,\n intervalPadding = _a.intervalPadding,\n dodgePadding = _a.dodgePadding;\n\n var pre = range.pre,\n next = range.next;\n var tickLength = next - pre;\n var position; // 分多种输入情况\n\n if (!_.isNil(intervalPadding) && _.isNil(dodgePadding) && intervalPadding >= 0) {\n // 仅配置intervalPadding\n var offset = this.getIntervalOnlyOffset(len, idx);\n position = pre + offset;\n } else if (!_.isNil(dodgePadding) && _.isNil(intervalPadding) && dodgePadding >= 0) {\n // 仅配置dodgePadding\n var offset = this.getDodgeOnlyOffset(len, idx);\n position = pre + offset;\n } else if (!_.isNil(intervalPadding) && !_.isNil(dodgePadding) && intervalPadding >= 0 && dodgePadding >= 0) {\n // 同时配置intervalPadding和dodgePadding\n var offset = this.getIntervalAndDodgeOffset(len, idx);\n position = pre + offset;\n } else {\n // 默认情况\n var width = tickLength * dodgeRatio / len;\n var margin = marginRatio * width;\n var offset = 1 / 2 * (tickLength - len * width - (len - 1) * margin) + ((idx + 1) * width + idx * margin) - 1 / 2 * width - 1 / 2 * tickLength;\n position = (pre + next) / 2 + offset;\n }\n\n return position;\n };\n\n Dodge.prototype.getIntervalOnlyOffset = function (len, idx) {\n var _a = this,\n defaultSize = _a.defaultSize,\n intervalPadding = _a.intervalPadding,\n xDimensionLegenth = _a.xDimensionLegenth,\n groupNum = _a.groupNum,\n dodgeRatio = _a.dodgeRatio,\n maxColumnWidth = _a.maxColumnWidth,\n minColumnWidth = _a.minColumnWidth,\n columnWidthRatio = _a.columnWidthRatio;\n\n var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n var normalizedDodgePadding = (1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum * dodgeRatio / (len - 1);\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len; // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n\n geomWidth = !_.isNil(columnWidthRatio) ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n\n if (!_.isNil(maxColumnWidth)) {\n var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n }\n\n if (!_.isNil(minColumnWidth)) {\n var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n geomWidth = Math.max(geomWidth, normalizedMinWidht);\n }\n\n geomWidth = defaultSize ? defaultSize / xDimensionLegenth : geomWidth; // 调整组内间隔\n\n normalizedDodgePadding = ((1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum - len * geomWidth) / (len - 1);\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2;\n return offset;\n };\n\n Dodge.prototype.getDodgeOnlyOffset = function (len, idx) {\n var _a = this,\n defaultSize = _a.defaultSize,\n dodgePadding = _a.dodgePadding,\n xDimensionLegenth = _a.xDimensionLegenth,\n groupNum = _a.groupNum,\n marginRatio = _a.marginRatio,\n maxColumnWidth = _a.maxColumnWidth,\n minColumnWidth = _a.minColumnWidth,\n columnWidthRatio = _a.columnWidthRatio;\n\n var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n var normalizedIntervalPadding = 1 * marginRatio / (groupNum - 1);\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len; // 根据columnWidthRatio/defaultSize/maxColumnWidth/minColumnWidth调整宽度\n\n geomWidth = columnWidthRatio ? 1 / groupNum / len * columnWidthRatio : geomWidth;\n\n if (!_.isNil(maxColumnWidth)) {\n var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth;\n geomWidth = Math.min(geomWidth, normalizedMaxWidht);\n }\n\n if (!_.isNil(minColumnWidth)) {\n var normalizedMinWidht = minColumnWidth / xDimensionLegenth;\n geomWidth = Math.max(geomWidth, normalizedMinWidht);\n }\n\n geomWidth = defaultSize ? defaultSize / xDimensionLegenth : geomWidth; // 调整组间距\n\n normalizedIntervalPadding = (1 - (geomWidth * len + normalizedDodgePadding * (len - 1)) * groupNum) / (groupNum - 1);\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2;\n return offset;\n };\n\n Dodge.prototype.getIntervalAndDodgeOffset = function (len, idx) {\n var _a = this,\n intervalPadding = _a.intervalPadding,\n dodgePadding = _a.dodgePadding,\n xDimensionLegenth = _a.xDimensionLegenth,\n groupNum = _a.groupNum;\n\n var normalizedIntervalPadding = intervalPadding / xDimensionLegenth;\n var normalizedDodgePadding = dodgePadding / xDimensionLegenth;\n var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len - 1)) / len;\n var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2;\n return offset;\n };\n\n Dodge.prototype.getDistribution = function (dim) {\n var groupedDataArray = this.adjustDataArray;\n var cacheMap = this.cacheMap;\n var map = cacheMap[dim];\n\n if (!map) {\n map = {};\n\n _.each(groupedDataArray, function (data, index) {\n var values = _.valuesOfKey(data, dim);\n\n if (!values.length) {\n values.push(0);\n }\n\n _.each(values, function (val) {\n if (!map[val]) {\n map[val] = [];\n }\n\n map[val].push(index);\n });\n });\n\n cacheMap[dim] = map;\n }\n\n return map;\n };\n\n return Dodge;\n}(_adjust.default);\n\nvar _default = Dodge;\nexports.default = _default;\n\n/***/ }),\n/* 769 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _ = _interopRequireWildcard(__webpack_require__(0));\n\nvar _constant = __webpack_require__(249);\n\nvar _adjust = _interopRequireDefault(__webpack_require__(111));\n\nfunction randomNumber(min, max) {\n return (max - min) * Math.random() + min;\n}\n\nvar Jitter =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Jitter, _super);\n\n function Jitter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Jitter.prototype.process = function (groupDataArray) {\n var groupedDataArray = _.clone(groupDataArray); // 之前分组之后的数据,然后有合并回去(和分组前可以理解成是一样的)\n\n\n var mergeData = _.flatten(groupedDataArray); // 返回值\n\n\n this.adjustData(groupedDataArray, mergeData);\n return groupedDataArray;\n };\n /**\n * 当前数据分组(index)中,按照维度 dim 进行 jitter 调整\n * @param dim\n * @param values\n * @param dataArray\n */\n\n\n Jitter.prototype.adjustDim = function (dim, values, dataArray) {\n var _this = this; // 在每一个分组中,将数据再按照 dim 分组,用于散列\n\n\n var groupDataArray = this.groupData(dataArray, dim);\n return _.each(groupDataArray, function (data, dimValue) {\n return _this.adjustGroup(data, dim, parseFloat(dimValue), values);\n });\n }; // 随机出来的字段值\n\n\n Jitter.prototype.getAdjustOffset = function (range) {\n var pre = range.pre,\n next = range.next; // 随机的范围\n\n var margin = (next - pre) * _constant.GAP;\n return randomNumber(pre + margin, next - margin);\n }; // adjust group data\n\n\n Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {\n var _this = this; // 调整范围\n\n\n var range = this.getAdjustRange(dim, dimValue, values);\n\n _.each(group, function (data) {\n data[dim] = _this.getAdjustOffset(range); // 获取调整的位置\n });\n\n return group;\n };\n\n return Jitter;\n}(_adjust.default);\n\nvar _default = Jitter;\nexports.default = _default;\n\n/***/ }),\n/* 770 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _ = _interopRequireWildcard(__webpack_require__(0));\n\nvar _adjust = _interopRequireDefault(__webpack_require__(111));\n\nvar Cache = _.Cache;\n\nvar Stack =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Stack, _super);\n\n function Stack(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n var _a = cfg.adjustNames,\n adjustNames = _a === void 0 ? ['y'] : _a,\n _b = cfg.height,\n height = _b === void 0 ? NaN : _b,\n _c = cfg.size,\n size = _c === void 0 ? 10 : _c,\n _d = cfg.reverseOrder,\n reverseOrder = _d === void 0 ? false : _d;\n _this.adjustNames = adjustNames;\n _this.height = height;\n _this.size = size;\n _this.reverseOrder = reverseOrder;\n return _this;\n }\n /**\n * 方法入参是经过数据分组、数据数字化之后的二维数组\n * @param groupDataArray 分组之后的数据\n */\n\n\n Stack.prototype.process = function (groupDataArray) {\n var _a = this,\n yField = _a.yField,\n reverseOrder = _a.reverseOrder; // 如果有指定 y 字段,那么按照 y 字段来 stack\n // 否则,按照高度均分\n\n\n var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);\n return reverseOrder ? this.reverse(d) : d;\n };\n\n Stack.prototype.reverse = function (groupedDataArray) {\n return groupedDataArray.slice(0).reverse();\n };\n\n Stack.prototype.processStack = function (groupDataArray) {\n var _a = this,\n xField = _a.xField,\n yField = _a.yField,\n reverseOrder = _a.reverseOrder; // 层叠顺序翻转\n\n\n var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray; // 用来缓存,正数和负数的堆叠问题\n\n var positive = new Cache();\n var negative = new Cache();\n return groupedDataArray.map(function (dataArray) {\n return dataArray.map(function (data) {\n var _a;\n\n var x = _.get(data, xField, 0);\n\n var y = _.get(data, [yField]);\n\n var xKey = x.toString(); // todo 是否应该取 _origin?因为 y 可能取到的值不正确,比如先 symmetric,再 stack!\n\n y = _.isArray(y) ? y[1] : y;\n\n if (!_.isNil(y)) {\n var cache = y >= 0 ? positive : negative;\n\n if (!cache.has(xKey)) {\n cache.set(xKey, 0);\n }\n\n var xValue = cache.get(xKey);\n var newXValue = y + xValue; // 存起来\n\n cache.set(xKey, newXValue);\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));\n } // 没有修改,则直接返回\n\n\n return data;\n });\n });\n };\n\n Stack.prototype.processOneDimStack = function (groupDataArray) {\n var _this = this;\n\n var _a = this,\n xField = _a.xField,\n height = _a.height,\n reverseOrder = _a.reverseOrder;\n\n var yField = 'y'; // 如果层叠的顺序翻转\n\n var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray; // 缓存累加数据\n\n var cache = new Cache();\n return groupedDataArray.map(function (dataArray) {\n return dataArray.map(function (data) {\n var _a;\n\n var size = _this.size;\n var xValue = data[xField]; // todo 没有看到这个 stack 计算原理\n\n var stackHeight = size * 2 / height;\n\n if (!cache.has(xValue)) {\n cache.set(xValue, stackHeight / 2); // 初始值大小\n }\n\n var stackValue = cache.get(xValue); // 增加一层 stackHeight\n\n cache.set(xValue, stackValue + stackHeight);\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, data), (_a = {}, _a[yField] = stackValue, _a));\n });\n });\n };\n\n return Stack;\n}(_adjust.default);\n\nvar _default = Stack;\nexports.default = _default;\n\n/***/ }),\n/* 771 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _ = _interopRequireWildcard(__webpack_require__(0));\n\nvar _adjust = _interopRequireDefault(__webpack_require__(111));\n\nvar Symmetric =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Symmetric, _super);\n\n function Symmetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Symmetric.prototype.process = function (groupDataArray) {\n var mergeData = _.flatten(groupDataArray);\n\n var _a = this,\n xField = _a.xField,\n yField = _a.yField; // 每个 x 值对应的 最大值\n\n\n var cache = this.getXValuesMaxMap(mergeData); // 所有数据的最大的值\n\n var max = Math.max.apply(Math, Object.keys(cache).map(function (key) {\n return cache[key];\n }));\n return _.map(groupDataArray, function (dataArray) {\n return _.map(dataArray, function (data) {\n var _a, _b;\n\n var yValue = data[yField];\n var xValue = data[xField]; // 数组处理逻辑\n\n if (_.isArray(yValue)) {\n var off_1 = (max - cache[xValue]) / 2;\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) {\n return off_1 + y;\n }), _a));\n } // 非数组处理逻辑\n\n\n var offset = (max - yValue) / 2;\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));\n });\n });\n }; // 获取每个 x 对应的最大的值\n\n\n Symmetric.prototype.getXValuesMaxMap = function (mergeData) {\n var _this = this;\n\n var _a = this,\n xField = _a.xField,\n yField = _a.yField; // 根据 xField 的值进行分组\n\n\n var groupDataArray = _.groupBy(mergeData, function (data) {\n return data[xField];\n }); // 获取每个 xField 值中的最大值\n\n\n return _.mapValues(groupDataArray, function (dataArray) {\n return _this.getDimMaxValue(dataArray, yField);\n });\n };\n\n Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {\n // 所有的 value 值\n var dimValues = _.map(mergeData, function (data) {\n return _.get(data, dim, []);\n }); // 将数组打平(dim value 有可能是数组,比如 stack 之后的)\n\n\n var flattenValues = _.flatten(dimValues); // 求出数组的最大值\n\n\n return Math.max.apply(Math, flattenValues);\n };\n\n return Symmetric;\n}(_adjust.default);\n\nvar _default = Symmetric;\nexports.default = _default;\n\n/***/ }),\n/* 772 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _colorUtil = _interopRequireDefault(__webpack_require__(179));\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar Color =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Color, _super);\n\n function Color(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.type = 'color';\n _this.names = ['color'];\n\n if ((0, _util.isString)(_this.values)) {\n _this.linear = true;\n }\n\n _this.gradient = _colorUtil.default.gradient(_this.values);\n return _this;\n }\n /**\n * @override\n */\n\n\n Color.prototype.getLinearValue = function (percent) {\n return this.gradient(percent);\n };\n\n return Color;\n}(_base.default);\n\nvar _default = Color;\nexports.default = _default;\n\n/***/ }),\n/* 773 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar Opacity =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Opacity, _super);\n\n function Opacity(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.type = 'opacity';\n _this.names = ['opacity'];\n return _this;\n }\n\n return Opacity;\n}(_base.default);\n\nvar _default = Opacity;\nexports.default = _default;\n\n/***/ }),\n/* 774 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar Position =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Position, _super);\n\n function Position(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.names = ['x', 'y'];\n _this.type = 'position';\n return _this;\n }\n\n Position.prototype.mapping = function (x, y) {\n var _a = this.scales,\n scaleX = _a[0],\n scaleY = _a[1];\n\n if ((0, _util.isNil)(x) || (0, _util.isNil)(y)) {\n return [];\n }\n\n return [(0, _util.isArray)(x) ? x.map(function (xi) {\n return scaleX.scale(xi);\n }) : scaleX.scale(x), (0, _util.isArray)(y) ? y.map(function (yi) {\n return scaleY.scale(yi);\n }) : scaleY.scale(y)];\n };\n\n return Position;\n}(_base.default);\n\nvar _default = Position;\nexports.default = _default;\n\n/***/ }),\n/* 775 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar Shape =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Shape, _super);\n\n function Shape(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.type = 'shape';\n _this.names = ['shape'];\n return _this;\n }\n /**\n * @override\n */\n\n\n Shape.prototype.getLinearValue = function (percent) {\n var idx = Math.round((this.values.length - 1) * percent);\n return this.values[idx];\n };\n\n return Shape;\n}(_base.default);\n\nvar _default = Shape;\nexports.default = _default;\n\n/***/ }),\n/* 776 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar Size =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Size, _super);\n\n function Size(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.type = 'size';\n _this.names = ['size'];\n return _this;\n }\n\n return Size;\n}(_base.default);\n\nvar _default = Size;\nexports.default = _default;\n\n/***/ }),\n/* 777 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _exportNames = {\n getAttribute: true,\n registerAttribute: true,\n Attribute: true\n};\nObject.defineProperty(exports, \"Attribute\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\nexports.registerAttribute = exports.getAttribute = void 0;\n\nvar _base = _interopRequireDefault(__webpack_require__(104));\n\nvar _interface = __webpack_require__(413);\n\nObject.keys(_interface).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _interface[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _interface[key];\n }\n });\n});\n// 所有的 attribute map\nvar ATTRIBUTE_MAP = {};\n/**\n * 通过类型获得 Attribute 类\n * @param type\n */\n\nvar getAttribute = function getAttribute(type) {\n return ATTRIBUTE_MAP[type.toLowerCase()];\n};\n\nexports.getAttribute = getAttribute;\n\nvar registerAttribute = function registerAttribute(type, ctor) {\n // 注册的时候,需要校验 type 重名,不区分大小写\n if (getAttribute(type)) {\n throw new Error(\"Attribute type '\" + type + \"' existed.\");\n } // 存储到 map 中\n\n\n ATTRIBUTE_MAP[type.toLowerCase()] = ctor;\n};\n\nexports.registerAttribute = registerAttribute;\n\n/***/ }),\n/* 778 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _time = __webpack_require__(180);\n\nvar _base = _interopRequireDefault(__webpack_require__(415));\n\n/**\n * 时间分类度量\n * @class\n */\nvar TimeCat =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TimeCat, _super);\n\n function TimeCat() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'timeCat';\n return _this;\n }\n /**\n * @override\n */\n\n\n TimeCat.prototype.translate = function (value) {\n value = (0, _time.toTimeStamp)(value);\n var index = this.values.indexOf(value);\n\n if (index === -1) {\n if ((0, _util.isNumber)(value) && value < this.values.length) {\n index = value;\n } else {\n index = NaN;\n }\n }\n\n return index;\n };\n /**\n * 由于时间类型数据需要转换一下,所以复写 getText\n * @override\n */\n\n\n TimeCat.prototype.getText = function (value, tickIndex) {\n var index = this.translate(value);\n\n if (index > -1) {\n var result = this.values[index];\n var formatter = this.formatter;\n result = formatter ? formatter(result, tickIndex) : (0, _time.timeFormat)(result, this.mask);\n return result;\n }\n\n return value;\n };\n\n TimeCat.prototype.initCfg = function () {\n this.tickMethod = 'time-cat';\n this.mask = 'YYYY-MM-DD';\n this.tickCount = 7; // 一般时间数据会显示 7, 14, 30 天的数字\n };\n\n TimeCat.prototype.setDomain = function () {\n var values = this.values; // 针对时间分类类型,会将时间统一转换为时间戳\n\n (0, _util.each)(values, function (v, i) {\n values[i] = (0, _time.toTimeStamp)(v);\n });\n values.sort(function (v1, v2) {\n return v1 - v2;\n });\n\n _super.prototype.setDomain.call(this);\n };\n\n return TimeCat;\n}(_base.default);\n\nvar _default = TimeCat;\nexports.default = _default;\n\n/***/ }),\n/* 779 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.assign = assign;\nexports.parse = parse;\nexports.setGlobalDateMasks = exports.setGlobalDateI18n = exports.defaultI18n = exports.format = exports.default = void 0;\nvar token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigitsOptional = \"[1-9]\\\\d?\";\nvar twoDigits = \"\\\\d\\\\d\";\nvar threeDigits = \"\\\\d{3}\";\nvar fourDigits = \"\\\\d{4}\";\nvar word = \"[^\\\\s]+\";\nvar literal = /\\[([^]*?)\\]/gm;\n\nfunction shorten(arr, sLen) {\n var newArr = [];\n\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n\n return newArr;\n}\n\nvar monthUpdate = function monthUpdate(arrName) {\n return function (v, i18n) {\n var lowerCaseArr = i18n[arrName].map(function (v) {\n return v.toLowerCase();\n });\n var index = lowerCaseArr.indexOf(v.toLowerCase());\n\n if (index > -1) {\n return index;\n }\n\n return null;\n };\n};\n\nfunction assign(origObj) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var obj = args_1[_a];\n\n for (var key in obj) {\n // @ts-ignore ex\n origObj[key] = obj[key];\n }\n }\n\n return origObj;\n}\n\nvar dayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\nvar monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nvar defaultI18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: [\"am\", \"pm\"],\n DoFn: function DoFn(dayOfMonth) {\n return dayOfMonth + [\"th\", \"st\", \"nd\", \"rd\"][dayOfMonth % 10 > 3 ? 0 : (dayOfMonth - dayOfMonth % 10 !== 10 ? 1 : 0) * dayOfMonth % 10];\n }\n};\nexports.defaultI18n = defaultI18n;\nvar globalI18n = assign({}, defaultI18n);\n\nvar setGlobalDateI18n = function setGlobalDateI18n(i18n) {\n return globalI18n = assign(globalI18n, i18n);\n};\n\nexports.setGlobalDateI18n = setGlobalDateI18n;\n\nvar regexEscape = function regexEscape(str) {\n return str.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n};\n\nvar pad = function pad(val, len) {\n if (len === void 0) {\n len = 2;\n }\n\n val = String(val);\n\n while (val.length < len) {\n val = \"0\" + val;\n }\n\n return val;\n};\n\nvar formatFlags = {\n D: function D(dateObj) {\n return String(dateObj.getDate());\n },\n DD: function DD(dateObj) {\n return pad(dateObj.getDate());\n },\n Do: function Do(dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function d(dateObj) {\n return String(dateObj.getDay());\n },\n dd: function dd(dateObj) {\n return pad(dateObj.getDay());\n },\n ddd: function ddd(dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function dddd(dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function M(dateObj) {\n return String(dateObj.getMonth() + 1);\n },\n MM: function MM(dateObj) {\n return pad(dateObj.getMonth() + 1);\n },\n MMM: function MMM(dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function MMMM(dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n YY: function YY(dateObj) {\n return pad(String(dateObj.getFullYear()), 4).substr(2);\n },\n YYYY: function YYYY(dateObj) {\n return pad(dateObj.getFullYear(), 4);\n },\n h: function h(dateObj) {\n return String(dateObj.getHours() % 12 || 12);\n },\n hh: function hh(dateObj) {\n return pad(dateObj.getHours() % 12 || 12);\n },\n H: function H(dateObj) {\n return String(dateObj.getHours());\n },\n HH: function HH(dateObj) {\n return pad(dateObj.getHours());\n },\n m: function m(dateObj) {\n return String(dateObj.getMinutes());\n },\n mm: function mm(dateObj) {\n return pad(dateObj.getMinutes());\n },\n s: function s(dateObj) {\n return String(dateObj.getSeconds());\n },\n ss: function ss(dateObj) {\n return pad(dateObj.getSeconds());\n },\n S: function S(dateObj) {\n return String(Math.round(dateObj.getMilliseconds() / 100));\n },\n SS: function SS(dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function SSS(dateObj) {\n return pad(dateObj.getMilliseconds(), 3);\n },\n a: function a(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function A(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n },\n ZZ: function ZZ(dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return (offset > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(offset) / 60) * 100 + Math.abs(offset) % 60, 4);\n },\n Z: function Z(dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return (offset > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(offset) / 60), 2) + \":\" + pad(Math.abs(offset) % 60, 2);\n }\n};\n\nvar monthParse = function monthParse(v) {\n return +v - 1;\n};\n\nvar emptyDigits = [null, twoDigitsOptional];\nvar emptyWord = [null, word];\nvar amPm = [\"isPm\", word, function (v, i18n) {\n var val = v.toLowerCase();\n\n if (val === i18n.amPm[0]) {\n return 0;\n } else if (val === i18n.amPm[1]) {\n return 1;\n }\n\n return null;\n}];\nvar timezoneOffset = [\"timezoneOffset\", \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\", function (v) {\n var parts = (v + \"\").match(/([+-]|\\d\\d)/gi);\n\n if (parts) {\n var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n return parts[0] === \"+\" ? minutes : -minutes;\n }\n\n return 0;\n}];\nvar parseFlags = {\n D: [\"day\", twoDigitsOptional],\n DD: [\"day\", twoDigits],\n Do: [\"day\", twoDigitsOptional + word, function (v) {\n return parseInt(v, 10);\n }],\n M: [\"month\", twoDigitsOptional, monthParse],\n MM: [\"month\", twoDigits, monthParse],\n YY: [\"year\", twoDigits, function (v) {\n var now = new Date();\n var cent = +(\"\" + now.getFullYear()).substr(0, 2);\n return +(\"\" + (+v > 68 ? cent - 1 : cent) + v);\n }],\n h: [\"hour\", twoDigitsOptional, undefined, \"isPm\"],\n hh: [\"hour\", twoDigits, undefined, \"isPm\"],\n H: [\"hour\", twoDigitsOptional],\n HH: [\"hour\", twoDigits],\n m: [\"minute\", twoDigitsOptional],\n mm: [\"minute\", twoDigits],\n s: [\"second\", twoDigitsOptional],\n ss: [\"second\", twoDigits],\n YYYY: [\"year\", fourDigits],\n S: [\"millisecond\", \"\\\\d\", function (v) {\n return +v * 100;\n }],\n SS: [\"millisecond\", twoDigits, function (v) {\n return +v * 10;\n }],\n SSS: [\"millisecond\", threeDigits],\n d: emptyDigits,\n dd: emptyDigits,\n ddd: emptyWord,\n dddd: emptyWord,\n MMM: [\"month\", word, monthUpdate(\"monthNamesShort\")],\n MMMM: [\"month\", word, monthUpdate(\"monthNames\")],\n a: amPm,\n A: amPm,\n ZZ: timezoneOffset,\n Z: timezoneOffset\n}; // Some common format strings\n\nvar globalMasks = {\n default: \"ddd MMM DD YYYY HH:mm:ss\",\n shortDate: \"M/D/YY\",\n mediumDate: \"MMM D, YYYY\",\n longDate: \"MMMM D, YYYY\",\n fullDate: \"dddd, MMMM D, YYYY\",\n isoDate: \"YYYY-MM-DD\",\n isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n shortTime: \"HH:mm\",\n mediumTime: \"HH:mm:ss\",\n longTime: \"HH:mm:ss.SSS\"\n};\n\nvar setGlobalDateMasks = function setGlobalDateMasks(masks) {\n return assign(globalMasks, masks);\n};\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\n\n\nexports.setGlobalDateMasks = setGlobalDateMasks;\n\nvar format = function format(dateObj, mask, i18n) {\n if (mask === void 0) {\n mask = globalMasks[\"default\"];\n }\n\n if (i18n === void 0) {\n i18n = {};\n }\n\n if (typeof dateObj === \"number\") {\n dateObj = new Date(dateObj);\n }\n\n if (Object.prototype.toString.call(dateObj) !== \"[object Date]\" || isNaN(dateObj.getTime())) {\n throw new Error(\"Invalid Date pass to format\");\n }\n\n mask = globalMasks[mask] || mask;\n var literals = []; // Make literals inactive by replacing them with @@@\n\n mask = mask.replace(literal, function ($0, $1) {\n literals.push($1);\n return \"@@@\";\n });\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n); // Apply formatting rules\n\n mask = mask.replace(token, function ($0) {\n return formatFlags[$0](dateObj, combinedI18nSettings);\n }); // Inline literal values back into the formatted value\n\n return mask.replace(/@@@/g, function () {\n return literals.shift();\n });\n};\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\n\n\nexports.format = format;\n\nfunction parse(dateStr, format, i18n) {\n if (i18n === void 0) {\n i18n = {};\n }\n\n if (typeof format !== \"string\") {\n throw new Error(\"Invalid format in fecha parse\");\n } // Check to see if the format is actually a mask\n\n\n format = globalMasks[format] || format; // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n\n if (dateStr.length > 1000) {\n return null;\n } // Default to the beginning of the year.\n\n\n var today = new Date();\n var dateInfo = {\n year: today.getFullYear(),\n month: 0,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n isPm: null,\n timezoneOffset: null\n };\n var parseInfo = [];\n var literals = []; // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n\n var newFormat = format.replace(literal, function ($0, $1) {\n literals.push(regexEscape($1));\n return \"@@@\";\n });\n var specifiedFields = {};\n var requiredFields = {}; // Change every token that we find into the correct regex\n\n newFormat = regexEscape(newFormat).replace(token, function ($0) {\n var info = parseFlags[$0];\n var field = info[0],\n regex = info[1],\n requiredField = info[3]; // Check if the person has specified the same field twice. This will lead to confusing results.\n\n if (specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\n }\n\n specifiedFields[field] = true; // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n\n if (requiredField) {\n requiredFields[requiredField] = true;\n }\n\n parseInfo.push(info);\n return \"(\" + regex + \")\";\n }); // Check all the required fields are present\n\n Object.keys(requiredFields).forEach(function (field) {\n if (!specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\n }\n }); // Add back all the literals after\n\n newFormat = newFormat.replace(/@@@/g, function () {\n return literals.shift();\n }); // Check if the date string matches the format. If it doesn't return null\n\n var matches = dateStr.match(new RegExp(newFormat, \"i\"));\n\n if (!matches) {\n return null;\n }\n\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n); // For each match, call the parser function for that date part\n\n for (var i = 1; i < matches.length; i++) {\n var _a = parseInfo[i - 1],\n field = _a[0],\n parser = _a[2];\n var value = parser ? parser(matches[i], combinedI18nSettings) : +matches[i]; // If the parser can't make sense of the value, return null\n\n if (value == null) {\n return null;\n }\n\n dateInfo[field] = value;\n }\n\n if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n var dateWithoutTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n var validateFields = [[\"month\", \"getMonth\"], [\"day\", \"getDate\"], [\"hour\", \"getHours\"], [\"minute\", \"getMinutes\"], [\"second\", \"getSeconds\"]];\n\n for (var i = 0, len = validateFields.length; i < len; i++) {\n // Check to make sure the date field is within the allowed range. Javascript dates allows values\n // outside the allowed range. If the values don't match the value was invalid\n if (specifiedFields[validateFields[i][0]] && dateInfo[validateFields[i][0]] !== dateWithoutTZ[validateFields[i][1]]()) {\n return null;\n }\n }\n\n if (dateInfo.timezoneOffset == null) {\n return dateWithoutTZ;\n }\n\n return new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\n}\n\nvar fecha = {\n format: format,\n parse: parse,\n defaultI18n: defaultI18n,\n setGlobalDateI18n: setGlobalDateI18n,\n setGlobalDateMasks: setGlobalDateMasks\n};\nvar _default = fecha;\nexports.default = _default;\n\n/***/ }),\n/* 780 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _util = __webpack_require__(0);\n\n/**\n * 二分右侧查找\n * https://github.com/d3/d3-array/blob/master/src/bisector.js\n */\nfunction _default(getter) {\n /**\n * x: 目标值\n * lo: 起始位置\n * hi: 结束位置\n */\n return function (a, x, _lo, _hi) {\n var lo = (0, _util.isNil)(_lo) ? 0 : _lo;\n var hi = (0, _util.isNil)(_hi) ? a.length : _hi;\n\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (getter(a[mid]) > x) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n\n return lo;\n };\n}\n\n/***/ }),\n/* 781 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _math = __webpack_require__(182);\n\nvar _base = _interopRequireDefault(__webpack_require__(181));\n\n/**\n * Log 度量,处理非均匀分布\n */\nvar Log =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Log, _super);\n\n function Log() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'log';\n return _this;\n }\n /**\n * @override\n */\n\n\n Log.prototype.invert = function (value) {\n var base = this.base;\n var max = (0, _math.log)(base, this.max);\n var rangeMin = this.rangeMin();\n var range = this.rangeMax() - rangeMin;\n var min;\n var positiveMin = this.positiveMin;\n\n if (positiveMin) {\n if (value === 0) {\n return 0;\n }\n\n min = (0, _math.log)(base, positiveMin / base);\n var appendPercent = 1 / (max - min) * range; // 0 到 positiveMin的占比\n\n if (value < appendPercent) {\n // 落到 0 - positiveMin 之间\n return value / appendPercent * positiveMin;\n }\n } else {\n min = (0, _math.log)(base, this.min);\n }\n\n var percent = (value - rangeMin) / range;\n var tmp = percent * (max - min) + min;\n return Math.pow(base, tmp);\n };\n\n Log.prototype.initCfg = function () {\n this.tickMethod = 'log';\n this.base = 10;\n this.tickCount = 6;\n this.nice = true;\n }; // 设置\n\n\n Log.prototype.setDomain = function () {\n _super.prototype.setDomain.call(this);\n\n var min = this.min;\n\n if (min < 0) {\n throw new Error('When you use log scale, the minimum value must be greater than zero!');\n }\n\n if (min === 0) {\n this.positiveMin = (0, _math.getLogPositiveMin)(this.values, this.base, this.max);\n }\n }; // 根据当前值获取占比\n\n\n Log.prototype.getScalePercent = function (value) {\n var max = this.max;\n var min = this.min;\n\n if (max === min) {\n return 0;\n } // 如果值小于等于0,则按照0处理\n\n\n if (value <= 0) {\n return 0;\n }\n\n var base = this.base;\n var positiveMin = this.positiveMin; // 如果min == 0, 则根据比0大的最小值,计算比例关系。这个最小值作为坐标轴上的第二个tick,第一个是0但是不显示\n\n if (positiveMin) {\n min = positiveMin * 1 / base;\n }\n\n var percent; // 如果数值小于次小值,那么就计算 value / 次小值 占整体的比例\n\n if (value < positiveMin) {\n percent = value / positiveMin / ((0, _math.log)(base, max) - (0, _math.log)(base, min));\n } else {\n percent = ((0, _math.log)(base, value) - (0, _math.log)(base, min)) / ((0, _math.log)(base, max) - (0, _math.log)(base, min));\n }\n\n return percent;\n };\n\n return Log;\n}(_base.default);\n\nvar _default = Log;\nexports.default = _default;\n\n/***/ }),\n/* 782 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _math = __webpack_require__(182);\n\nvar _base = _interopRequireDefault(__webpack_require__(181));\n\n/**\n * Pow 度量,处理非均匀分布\n */\nvar Pow =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Pow, _super);\n\n function Pow() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'pow';\n return _this;\n }\n /**\n * @override\n */\n\n\n Pow.prototype.invert = function (value) {\n var percent = this.getInvertPercent(value);\n var exponent = this.exponent;\n var max = (0, _math.calBase)(exponent, this.max);\n var min = (0, _math.calBase)(exponent, this.min);\n var tmp = percent * (max - min) + min;\n var factor = tmp >= 0 ? 1 : -1;\n return Math.pow(tmp, exponent) * factor;\n };\n\n Pow.prototype.initCfg = function () {\n this.tickMethod = 'pow';\n this.exponent = 2;\n this.tickCount = 5;\n this.nice = true;\n }; // 获取度量计算时,value占的定义域百分比\n\n\n Pow.prototype.getScalePercent = function (value) {\n var max = this.max;\n var min = this.min;\n\n if (max === min) {\n return 0;\n }\n\n var exponent = this.exponent;\n var percent = ((0, _math.calBase)(exponent, value) - (0, _math.calBase)(exponent, min)) / ((0, _math.calBase)(exponent, max) - (0, _math.calBase)(exponent, min));\n return percent;\n };\n\n return Pow;\n}(_base.default);\n\nvar _default = Pow;\nexports.default = _default;\n\n/***/ }),\n/* 783 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _time = __webpack_require__(180);\n\nvar _linear = _interopRequireDefault(__webpack_require__(416));\n\n/**\n * 时间度量\n * @class\n */\nvar Time =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Time, _super);\n\n function Time() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'time';\n return _this;\n }\n /**\n * @override\n */\n\n\n Time.prototype.getText = function (value, index) {\n var numberValue = this.translate(value);\n var formatter = this.formatter;\n return formatter ? formatter(numberValue, index) : (0, _time.timeFormat)(numberValue, this.mask);\n };\n /**\n * @override\n */\n\n\n Time.prototype.scale = function (value) {\n var v = value;\n\n if ((0, _util.isString)(v) || (0, _util.isDate)(v)) {\n v = this.translate(v);\n }\n\n return _super.prototype.scale.call(this, v);\n };\n /**\n * 将时间转换成数字\n * @override\n */\n\n\n Time.prototype.translate = function (v) {\n return (0, _time.toTimeStamp)(v);\n };\n\n Time.prototype.initCfg = function () {\n this.tickMethod = 'time-pretty';\n this.mask = 'YYYY-MM-DD';\n this.tickCount = 7;\n this.nice = false;\n };\n\n Time.prototype.setDomain = function () {\n var values = this.values; // 是否设置了 min, max,而不是直接取 this.min, this.max\n\n var minConfig = this.getConfig('min');\n var maxConfig = this.getConfig('max'); // 如果设置了 min,max 则转换成时间戳\n\n if (!(0, _util.isNil)(minConfig) || !(0, _util.isNumber)(minConfig)) {\n this.min = this.translate(this.min);\n }\n\n if (!(0, _util.isNil)(maxConfig) || !(0, _util.isNumber)(maxConfig)) {\n this.max = this.translate(this.max);\n } // 没有设置 min, max 时\n\n\n if (values && values.length) {\n // 重新计算最大最小值\n var timeStamps_1 = [];\n var min_1 = Infinity; // 最小值\n\n var secondMin_1 = min_1; // 次小值\n\n var max_1 = 0; // 使用一个循环,计算min,max,secondMin\n\n (0, _util.each)(values, function (v) {\n var timeStamp = (0, _time.toTimeStamp)(v);\n\n if (isNaN(timeStamp)) {\n throw new TypeError(\"Invalid Time: \" + v + \" in time scale!\");\n }\n\n if (min_1 > timeStamp) {\n secondMin_1 = min_1;\n min_1 = timeStamp;\n } else if (secondMin_1 > timeStamp) {\n secondMin_1 = timeStamp;\n }\n\n if (max_1 < timeStamp) {\n max_1 = timeStamp;\n }\n\n timeStamps_1.push(timeStamp);\n }); // 存在多个值时,设置最小间距\n\n if (values.length > 1) {\n this.minTickInterval = secondMin_1 - min_1;\n }\n\n if ((0, _util.isNil)(minConfig)) {\n this.min = min_1;\n }\n\n if ((0, _util.isNil)(maxConfig)) {\n this.max = max_1;\n }\n }\n };\n\n return Time;\n}(_linear.default);\n\nvar _default = Time;\nexports.default = _default;\n\n/***/ }),\n/* 784 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _quantize = _interopRequireDefault(__webpack_require__(417));\n\nvar Quantile =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Quantile, _super);\n\n function Quantile() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'quantile';\n return _this;\n }\n\n Quantile.prototype.initCfg = function () {\n this.tickMethod = 'quantile';\n this.tickCount = 5;\n this.nice = true;\n };\n\n return Quantile;\n}(_quantize.default);\n\nvar _default = Quantile;\nexports.default = _default;\n\n/***/ }),\n/* 785 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getScale = getClass;\nexports.registerScale = registerClass;\nObject.defineProperty(exports, \"Scale\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\n\nvar _base = _interopRequireDefault(__webpack_require__(139));\n\nvar map = {};\n\nfunction getClass(key) {\n return map[key];\n}\n\nfunction registerClass(key, cls) {\n if (getClass(key)) {\n throw new Error(\"type '\" + key + \"' existed.\");\n }\n\n map[key] = cls;\n}\n\n/***/ }),\n/* 786 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(139));\n\n/**\n * identity scale原则上是定义域和值域一致,scale/invert方法也是一致的\n * 参考R的实现:https://github.com/r-lib/scales/blob/master/R/pal-identity.r\n * 参考d3的实现(做了下转型):https://github.com/d3/d3-scale/blob/master/src/identity.js\n */\nvar Identity =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Identity, _super);\n\n function Identity() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'identity';\n _this.isIdentity = true;\n return _this;\n }\n\n Identity.prototype.calculateTicks = function () {\n return this.values;\n };\n\n Identity.prototype.scale = function (value) {\n // 如果传入的值不等于 identity 的值,则直接返回,用于一维图时的 dodge\n if (this.values[0] !== value && (0, _util.isNumber)(value)) {\n return value;\n }\n\n return this.range[0];\n };\n\n Identity.prototype.invert = function (value) {\n var range = this.range;\n\n if (value < range[0] || value > range[1]) {\n return NaN;\n }\n\n return this.values[0];\n };\n\n return Identity;\n}(_base.default);\n\nvar _default = Identity;\nexports.default = _default;\n\n/***/ }),\n/* 787 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"getTickMethod\", {\n enumerable: true,\n get: function get() {\n return _register.getTickMethod;\n }\n});\nObject.defineProperty(exports, \"registerTickMethod\", {\n enumerable: true,\n get: function get() {\n return _register.registerTickMethod;\n }\n});\n\nvar _cat = _interopRequireDefault(__webpack_require__(418));\n\nvar _d3Linear = _interopRequireDefault(__webpack_require__(788));\n\nvar _linear = _interopRequireDefault(__webpack_require__(790));\n\nvar _log = _interopRequireDefault(__webpack_require__(791));\n\nvar _pow = _interopRequireDefault(__webpack_require__(792));\n\nvar _quantile = _interopRequireDefault(__webpack_require__(793));\n\nvar _rPrettry = _interopRequireDefault(__webpack_require__(794));\n\nvar _register = __webpack_require__(414);\n\nvar _time = _interopRequireDefault(__webpack_require__(795));\n\nvar _timeCat = _interopRequireDefault(__webpack_require__(796));\n\nvar _timePretty = _interopRequireDefault(__webpack_require__(797));\n\n(0, _register.registerTickMethod)('cat', _cat.default);\n(0, _register.registerTickMethod)('time-cat', _timeCat.default);\n(0, _register.registerTickMethod)('wilkinson-extended', _linear.default);\n(0, _register.registerTickMethod)('r-pretty', _rPrettry.default);\n(0, _register.registerTickMethod)('time', _time.default);\n(0, _register.registerTickMethod)('time-pretty', _timePretty.default);\n(0, _register.registerTickMethod)('log', _log.default);\n(0, _register.registerTickMethod)('pow', _pow.default);\n(0, _register.registerTickMethod)('quantile', _quantile.default);\n(0, _register.registerTickMethod)('d3-linear', _d3Linear.default);\n\n/***/ }),\n/* 788 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = d3LinearTickMethod;\n\nvar _util = __webpack_require__(0);\n\nvar _d3Linear = _interopRequireDefault(__webpack_require__(789));\n\nvar _interval = _interopRequireDefault(__webpack_require__(251));\n\nvar _strictLimit = _interopRequireDefault(__webpack_require__(252));\n\nfunction d3LinearTickMethod(cfg) {\n var min = cfg.min,\n max = cfg.max,\n tickInterval = cfg.tickInterval,\n minLimit = cfg.minLimit,\n maxLimit = cfg.maxLimit;\n var ticks = (0, _d3Linear.default)(cfg);\n\n if (!(0, _util.isNil)(minLimit) || !(0, _util.isNil)(maxLimit)) {\n return (0, _strictLimit.default)(cfg, (0, _util.head)(ticks), (0, _util.last)(ticks));\n }\n\n if (tickInterval) {\n return (0, _interval.default)(min, max, tickInterval).ticks;\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 789 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = d3Linear;\nexports.D3Linear = void 0;\n\nfunction d3Linear(cfg) {\n var min = cfg.min,\n max = cfg.max,\n nice = cfg.nice,\n tickCount = cfg.tickCount;\n var linear = new D3Linear();\n linear.domain([min, max]);\n\n if (nice) {\n linear.nice(tickCount);\n }\n\n return linear.ticks(tickCount);\n}\n\nvar DEFAULT_COUNT = 5;\nvar e10 = Math.sqrt(50);\nvar e5 = Math.sqrt(10);\nvar e2 = Math.sqrt(2); // https://github.com/d3/d3-scale\n\nvar D3Linear =\n/** @class */\nfunction () {\n function D3Linear() {\n this._domain = [0, 1];\n }\n\n D3Linear.prototype.domain = function (domain) {\n if (domain) {\n this._domain = Array.from(domain, Number);\n return this;\n }\n\n return this._domain.slice();\n };\n\n D3Linear.prototype.nice = function (count) {\n var _a, _b;\n\n if (count === void 0) {\n count = DEFAULT_COUNT;\n }\n\n var d = this._domain.slice();\n\n var i0 = 0;\n var i1 = this._domain.length - 1;\n var start = this._domain[i0];\n var stop = this._domain[i1];\n var step;\n\n if (stop < start) {\n _a = [stop, start], start = _a[0], stop = _a[1];\n _b = [i1, i0], i0 = _b[0], i1 = _b[1];\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n this.domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n this.domain(d);\n }\n\n return this;\n };\n\n D3Linear.prototype.ticks = function (count) {\n if (count === void 0) {\n count = DEFAULT_COUNT;\n }\n\n return d3ArrayTicks(this._domain[0], this._domain[this._domain.length - 1], count || DEFAULT_COUNT);\n };\n\n return D3Linear;\n}();\n\nexports.D3Linear = D3Linear;\n\nfunction d3ArrayTicks(start, stop, count) {\n var reverse;\n var i = -1;\n var n;\n var ticks;\n var step;\n stop = +stop, start = +start, count = +count;\n\n if (start === stop && count > 0) {\n return [start];\n } // tslint:disable-next-line\n\n\n if (reverse = stop < start) {\n n = start, start = stop, stop = n;\n } // tslint:disable-next-line\n\n\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) {\n return [];\n }\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n\n while (++i < n) {\n ticks[i] = (start + i) * step;\n }\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n\n while (++i < n) {\n ticks[i] = (start - i) / step;\n }\n }\n\n if (reverse) {\n ticks.reverse();\n }\n\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count);\n var power = Math.floor(Math.log(step) / Math.LN10);\n var error = step / Math.pow(10, power);\n return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\n/***/ }),\n/* 790 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = linear;\n\nvar _util = __webpack_require__(0);\n\nvar _extended = _interopRequireDefault(__webpack_require__(419));\n\nvar _interval = _interopRequireDefault(__webpack_require__(251));\n\nvar _strictLimit = _interopRequireDefault(__webpack_require__(252));\n\n/**\n * 计算线性的 ticks,使用 wilkinson extended 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nfunction linear(cfg) {\n var min = cfg.min,\n max = cfg.max,\n tickCount = cfg.tickCount,\n nice = cfg.nice,\n tickInterval = cfg.tickInterval,\n minLimit = cfg.minLimit,\n maxLimit = cfg.maxLimit;\n var ticks = (0, _extended.default)(min, max, tickCount, nice).ticks;\n\n if (!(0, _util.isNil)(minLimit) || !(0, _util.isNil)(maxLimit)) {\n return (0, _strictLimit.default)(cfg, (0, _util.head)(ticks), (0, _util.last)(ticks));\n }\n\n if (tickInterval) {\n return (0, _interval.default)(min, max, tickInterval).ticks;\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 791 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calculateLogTicks;\n\nvar _math = __webpack_require__(182);\n\n/**\n * 计算 log 的 ticks,考虑 min = 0 的场景\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nfunction calculateLogTicks(cfg) {\n var base = cfg.base,\n tickCount = cfg.tickCount,\n min = cfg.min,\n max = cfg.max,\n values = cfg.values;\n var minTick;\n var maxTick = (0, _math.log)(base, max);\n\n if (min > 0) {\n minTick = Math.floor((0, _math.log)(base, min));\n } else {\n var positiveMin = (0, _math.getLogPositiveMin)(values, base, max);\n minTick = Math.floor((0, _math.log)(base, positiveMin));\n }\n\n var count = maxTick - minTick;\n var avg = Math.ceil(count / tickCount);\n var ticks = [];\n\n for (var i = minTick; i < maxTick + avg; i = i + avg) {\n ticks.push(Math.pow(base, i));\n }\n\n if (min <= 0) {\n // 最小值 <= 0 时显示 0\n ticks.unshift(0);\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 792 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calculatePowTicks;\n\nvar _math = __webpack_require__(182);\n\nvar _pretty = _interopRequireDefault(__webpack_require__(420));\n\n/**\n * 计算 Pow 的 ticks\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nfunction calculatePowTicks(cfg) {\n var exponent = cfg.exponent,\n tickCount = cfg.tickCount;\n var max = Math.ceil((0, _math.calBase)(exponent, cfg.max));\n var min = Math.floor((0, _math.calBase)(exponent, cfg.min));\n var ticks = (0, _pretty.default)(min, max, tickCount).ticks;\n return ticks.map(function (tick) {\n var factor = tick >= 0 ? 1 : -1;\n return Math.pow(tick, exponent) * factor;\n });\n}\n\n/***/ }),\n/* 793 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calculateTicks;\n\n/**\n * 计算几分位 https://github.com/simple-statistics/simple-statistics/blob/master/src/quantile_sorted.js\n * @param x 数组\n * @param p 百分比\n */\nfunction quantileSorted(x, p) {\n var idx = x.length * p;\n /*if (x.length === 0) { // 当前场景这些条件不可能命中\n throw new Error('quantile requires at least one value.');\n } else if (p < 0 || p > 1) {\n throw new Error('quantiles must be between 0 and 1');\n } else */\n\n if (p === 1) {\n // If p is 1, directly return the last element\n return x[x.length - 1];\n } else if (p === 0) {\n // If p is 0, directly return the first element\n return x[0];\n } else if (idx % 1 !== 0) {\n // If p is not integer, return the next element in array\n return x[Math.ceil(idx) - 1];\n } else if (x.length % 2 === 0) {\n // If the list has even-length, we'll take the average of this number\n // and the next value, if there is one\n return (x[idx - 1] + x[idx]) / 2;\n } else {\n // Finally, in the simple case of an integer value\n // with an odd-length list, return the x value at the index.\n return x[idx];\n }\n}\n\nfunction calculateTicks(cfg) {\n var tickCount = cfg.tickCount,\n values = cfg.values;\n\n if (!values || !values.length) {\n return [];\n }\n\n var sorted = values.slice().sort(function (a, b) {\n return a - b;\n });\n var ticks = [];\n\n for (var i = 0; i < tickCount; i++) {\n var p = i / (tickCount - 1);\n ticks.push(quantileSorted(sorted, p));\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 794 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = linearPretty;\n\nvar _util = __webpack_require__(0);\n\nvar _interval = _interopRequireDefault(__webpack_require__(251));\n\nvar _pretty = _interopRequireDefault(__webpack_require__(420));\n\nvar _strictLimit = _interopRequireDefault(__webpack_require__(252));\n\n/**\n * 计算线性的 ticks,使用 R's pretty 方法\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nfunction linearPretty(cfg) {\n var min = cfg.min,\n max = cfg.max,\n tickCount = cfg.tickCount,\n tickInterval = cfg.tickInterval,\n minLimit = cfg.minLimit,\n maxLimit = cfg.maxLimit;\n var ticks = (0, _pretty.default)(min, max, tickCount).ticks;\n\n if (!(0, _util.isNil)(minLimit) || !(0, _util.isNil)(maxLimit)) {\n return (0, _strictLimit.default)(cfg, (0, _util.head)(ticks), (0, _util.last)(ticks));\n }\n\n if (tickInterval) {\n return (0, _interval.default)(min, max, tickInterval).ticks;\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 795 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calculateTimeTicks;\n\nvar _time = __webpack_require__(180);\n\nfunction calculateTimeTicks(cfg) {\n var min = cfg.min,\n max = cfg.max,\n minTickInterval = cfg.minTickInterval;\n var tickInterval = cfg.tickInterval;\n var tickCount = cfg.tickCount; // 指定 tickInterval 后 tickCount 不生效,需要重新计算\n\n if (tickInterval) {\n tickCount = Math.ceil((max - min) / tickInterval);\n } else {\n tickInterval = (0, _time.getTickInterval)(min, max, tickCount)[1];\n var count = (max - min) / tickInterval;\n var ratio = count / tickCount;\n\n if (ratio > 1) {\n tickInterval = tickInterval * Math.ceil(ratio);\n } // 如果设置了最小间距,则使用最小间距\n\n\n if (minTickInterval && tickInterval < minTickInterval) {\n tickInterval = minTickInterval;\n }\n }\n\n var ticks = [];\n\n for (var i = min; i < max + tickInterval; i += tickInterval) {\n ticks.push(i);\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 796 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = calculateTimeCatTicks;\n\nvar _util = __webpack_require__(0);\n\nvar _cat = _interopRequireDefault(__webpack_require__(418));\n\n/**\n * 计算时间分类的 ticks, 保头,保尾\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\nfunction calculateTimeCatTicks(cfg) {\n var ticks = (0, _cat.default)(cfg);\n var lastValue = (0, _util.last)(cfg.values);\n\n if (lastValue !== (0, _util.last)(ticks)) {\n ticks.push(lastValue);\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 797 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = timePretty;\n\nvar _time = __webpack_require__(180);\n\nfunction getYear(date) {\n return new Date(date).getFullYear();\n}\n\nfunction createYear(year) {\n return new Date(year, 0, 1).getTime();\n}\n\nfunction getMonth(date) {\n return new Date(date).getMonth();\n}\n\nfunction diffMonth(min, max) {\n var minYear = getYear(min);\n var maxYear = getYear(max);\n var minMonth = getMonth(min);\n var maxMonth = getMonth(max);\n return (maxYear - minYear) * 12 + (maxMonth - minMonth) % 12;\n}\n\nfunction creatMonth(year, month) {\n return new Date(year, month, 1).getTime();\n}\n\nfunction diffDay(min, max) {\n return Math.ceil((max - min) / _time.DAY);\n}\n\nfunction diffHour(min, max) {\n return Math.ceil((max - min) / _time.HOUR);\n}\n\nfunction diffMinus(min, max) {\n return Math.ceil((max - min) / (60 * 1000));\n}\n/**\n * 计算 time 的 ticks,对 month, year 进行 pretty 处理\n * @param cfg 度量的配置项\n * @returns 计算后的 ticks\n */\n\n\nfunction timePretty(cfg) {\n var min = cfg.min,\n max = cfg.max,\n minTickInterval = cfg.minTickInterval,\n tickCount = cfg.tickCount;\n var tickInterval = cfg.tickInterval;\n var ticks = []; // 指定 tickInterval 后 tickCount 不生效,需要重新计算\n\n if (!tickInterval) {\n tickInterval = (max - min) / tickCount; // 如果设置了最小间距,则使用最小间距\n\n if (minTickInterval && tickInterval < minTickInterval) {\n tickInterval = minTickInterval;\n }\n }\n\n var minYear = getYear(min); // 如果间距大于 1 年,则将开始日期从整年开始\n\n if (tickInterval > _time.YEAR) {\n var maxYear = getYear(max);\n var yearInterval = Math.ceil(tickInterval / _time.YEAR);\n\n for (var i = minYear; i <= maxYear + yearInterval; i = i + yearInterval) {\n ticks.push(createYear(i));\n }\n } else if (tickInterval > _time.MONTH) {\n // 大于月时\n var monthInterval = Math.ceil(tickInterval / _time.MONTH);\n var mmMoth = getMonth(min);\n var dMonths = diffMonth(min, max);\n\n for (var i = 0; i <= dMonths + monthInterval; i = i + monthInterval) {\n ticks.push(creatMonth(minYear, i + mmMoth));\n }\n } else if (tickInterval > _time.DAY) {\n // 大于天\n var date = new Date(min);\n var year = date.getFullYear();\n var month = date.getMonth();\n var mday = date.getDate();\n var day = Math.ceil(tickInterval / _time.DAY);\n var ddays = diffDay(min, max);\n\n for (var i = 0; i < ddays + day; i = i + day) {\n ticks.push(new Date(year, month, mday + i).getTime());\n }\n } else if (tickInterval > _time.HOUR) {\n // 大于小时\n var date = new Date(min);\n var year = date.getFullYear();\n var month = date.getMonth();\n var day = date.getDate();\n var hour = date.getHours();\n var hours = Math.ceil(tickInterval / _time.HOUR);\n var dHours = diffHour(min, max);\n\n for (var i = 0; i <= dHours + hours; i = i + hours) {\n ticks.push(new Date(year, month, day, hour + i).getTime());\n }\n } else if (tickInterval > _time.MINUTE) {\n // 大于分钟\n var dMinus = diffMinus(min, max);\n var minutes = Math.ceil(tickInterval / _time.MINUTE);\n\n for (var i = 0; i <= dMinus + minutes; i = i + minutes) {\n ticks.push(min + i * _time.MINUTE);\n }\n } else {\n // 小于分钟\n var interval = tickInterval;\n\n if (interval < _time.SECOND) {\n interval = _time.SECOND;\n }\n\n var minSecond = Math.floor(min / _time.SECOND) * _time.SECOND;\n\n var dSeconds = Math.ceil((max - min) / _time.SECOND);\n var seconds = Math.ceil(interval / _time.SECOND);\n\n for (var i = 0; i < dSeconds + seconds; i = i + seconds) {\n ticks.push(minSecond + i * _time.SECOND);\n }\n } // 最好是能从算法能解决这个问题,但是如果指定了 tickInterval,计算 ticks,也只能这么算,所以\n // 打印警告提示\n\n\n if (ticks.length >= 512) {\n console.warn(\"Notice: current ticks length(\" + ticks.length + \") >= 512, may cause performance issues, even out of memory. Because of the configure \\\"tickInterval\\\"(in milliseconds, current is \" + tickInterval + \") is too small, increase the value to solve the problem!\");\n }\n\n return ticks;\n}\n\n/***/ }),\n/* 798 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Coordinate\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\nObject.defineProperty(exports, \"getCoordinate\", {\n enumerable: true,\n get: function get() {\n return _factory.getCoordinate;\n }\n});\nObject.defineProperty(exports, \"registerCoordinate\", {\n enumerable: true,\n get: function get() {\n return _factory.registerCoordinate;\n }\n});\n\nvar _base = _interopRequireDefault(__webpack_require__(183));\n\nvar _cartesian = _interopRequireDefault(__webpack_require__(799));\n\nvar _helix = _interopRequireDefault(__webpack_require__(800));\n\nvar _polar = _interopRequireDefault(__webpack_require__(801));\n\nvar _factory = __webpack_require__(802);\n\n(0, _factory.registerCoordinate)('rect', _cartesian.default);\n(0, _factory.registerCoordinate)('cartesian', _cartesian.default);\n(0, _factory.registerCoordinate)('polar', _polar.default);\n(0, _factory.registerCoordinate)('helix', _helix.default);\n\n/***/ }),\n/* 799 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _base = _interopRequireDefault(__webpack_require__(183));\n\n/**\n * 笛卡尔坐标系\n * https://www.zhihu.com/question/20665303\n */\nvar Cartesian =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Cartesian, _super);\n\n function Cartesian(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.isRect = true;\n _this.type = 'cartesian';\n\n _this.initial();\n\n return _this;\n }\n\n Cartesian.prototype.initial = function () {\n _super.prototype.initial.call(this);\n\n var start = this.start;\n var end = this.end;\n this.x = {\n start: start.x,\n end: end.x\n };\n this.y = {\n start: start.y,\n end: end.y\n };\n };\n\n Cartesian.prototype.convertPoint = function (point) {\n var _a;\n\n var x = point.x,\n y = point.y; // 交换\n\n if (this.isTransposed) {\n _a = [y, x], x = _a[0], y = _a[1];\n }\n\n return {\n x: this.convertDim(x, 'x'),\n y: this.convertDim(y, 'y')\n };\n };\n\n Cartesian.prototype.invertPoint = function (point) {\n var _a;\n\n var x = this.invertDim(point.x, 'x');\n var y = this.invertDim(point.y, 'y');\n\n if (this.isTransposed) {\n _a = [y, x], x = _a[0], y = _a[1];\n }\n\n return {\n x: x,\n y: y\n };\n };\n\n return Cartesian;\n}(_base.default);\n\nvar _default = Cartesian;\nexports.default = _default;\n\n/***/ }),\n/* 800 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _matrixUtil = __webpack_require__(33);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(183));\n\n/**\n * 螺旋坐标系\n */\nvar Helix =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Helix, _super);\n\n function Helix(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.isHelix = true;\n _this.type = 'helix';\n var _a = cfg.startAngle,\n startAngle = _a === void 0 ? 1.25 * Math.PI : _a,\n _b = cfg.endAngle,\n endAngle = _b === void 0 ? 7.25 * Math.PI : _b,\n _c = cfg.innerRadius,\n innerRadius = _c === void 0 ? 0 : _c,\n radius = cfg.radius;\n _this.startAngle = startAngle;\n _this.endAngle = endAngle;\n _this.innerRadius = innerRadius;\n _this.radius = radius;\n\n _this.initial();\n\n return _this;\n }\n\n Helix.prototype.initial = function () {\n _super.prototype.initial.call(this);\n\n var index = (this.endAngle - this.startAngle) / (2 * Math.PI) + 1; // 螺线圈数\n\n var maxRadius = Math.min(this.width, this.height) / 2;\n\n if (this.radius && this.radius >= 0 && this.radius <= 1) {\n maxRadius = maxRadius * this.radius;\n }\n\n this.d = Math.floor(maxRadius * (1 - this.innerRadius) / index);\n this.a = this.d / (Math.PI * 2); // 螺线系数\n\n this.x = {\n start: this.startAngle,\n end: this.endAngle\n };\n this.y = {\n start: this.innerRadius * maxRadius,\n end: this.innerRadius * maxRadius + this.d * 0.99\n };\n };\n /**\n * 将百分比数据变成屏幕坐标\n * @param point 归一化的点坐标\n * @return 返回对应的屏幕坐标\n */\n\n\n Helix.prototype.convertPoint = function (point) {\n var _a;\n\n var x = point.x,\n y = point.y;\n\n if (this.isTransposed) {\n _a = [y, x], x = _a[0], y = _a[1];\n }\n\n var thi = this.convertDim(x, 'x');\n var r = this.a * thi;\n var newY = this.convertDim(y, 'y');\n return {\n x: this.center.x + Math.cos(thi) * (r + newY),\n y: this.center.y + Math.sin(thi) * (r + newY)\n };\n };\n /**\n * 将屏幕坐标点还原成百分比数据\n * @param point 屏幕坐标\n * @return 返回对应的归一化后的数据\n */\n\n\n Helix.prototype.invertPoint = function (point) {\n var _a;\n\n var d = this.d + this.y.start;\n\n var v = _matrixUtil.vec2.subtract([0, 0], [point.x, point.y], [this.center.x, this.center.y]);\n\n var thi = _matrixUtil.ext.angleTo(v, [1, 0], true);\n\n var rMin = thi * this.a; // 坐标与原点的连线在第一圈上的交点,最小r值\n\n if (_matrixUtil.vec2.length(v) < rMin) {\n // 坐标与原点的连线不可能小于最小r值,但不排除因小数计算产生的略小于rMin的情况\n rMin = _matrixUtil.vec2.length(v);\n }\n\n var index = Math.floor((_matrixUtil.vec2.length(v) - rMin) / d); // 当前点位于第index圈\n\n thi = 2 * index * Math.PI + thi;\n var r = this.a * thi;\n var newY = _matrixUtil.vec2.length(v) - r;\n newY = (0, _util.isNumberEqual)(newY, 0) ? 0 : newY;\n var x = this.invertDim(thi, 'x');\n var y = this.invertDim(newY, 'y');\n x = (0, _util.isNumberEqual)(x, 0) ? 0 : x;\n y = (0, _util.isNumberEqual)(y, 0) ? 0 : y;\n\n if (this.isTransposed) {\n _a = [y, x], x = _a[0], y = _a[1];\n }\n\n return {\n x: x,\n y: y\n };\n };\n\n return Helix;\n}(_base.default);\n\nvar _default = Helix;\nexports.default = _default;\n\n/***/ }),\n/* 801 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(59);\n\nvar _matrixUtil = __webpack_require__(33);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(183));\n\nvar Polar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Polar, _super);\n\n function Polar(cfg) {\n var _this = _super.call(this, cfg) || this;\n\n _this.isPolar = true;\n _this.type = 'polar';\n var _a = cfg.startAngle,\n startAngle = _a === void 0 ? -Math.PI / 2 : _a,\n _b = cfg.endAngle,\n endAngle = _b === void 0 ? Math.PI * 3 / 2 : _b,\n _c = cfg.innerRadius,\n innerRadius = _c === void 0 ? 0 : _c,\n radius = cfg.radius;\n _this.startAngle = startAngle;\n _this.endAngle = endAngle;\n _this.innerRadius = innerRadius;\n _this.radius = radius;\n\n _this.initial();\n\n return _this;\n }\n\n Polar.prototype.initial = function () {\n _super.prototype.initial.call(this);\n\n while (this.endAngle < this.startAngle) {\n this.endAngle += Math.PI * 2;\n }\n\n var oneBox = this.getOneBox();\n var oneWidth = oneBox.maxX - oneBox.minX;\n var oneHeight = oneBox.maxY - oneBox.minY;\n var left = Math.abs(oneBox.minX) / oneWidth;\n var top = Math.abs(oneBox.minY) / oneHeight;\n var maxRadius;\n\n if (this.height / oneHeight > this.width / oneWidth) {\n // width 为主\n maxRadius = this.width / oneWidth;\n this.circleCenter = {\n x: this.center.x - (0.5 - left) * this.width,\n y: this.center.y - (0.5 - top) * maxRadius * oneHeight\n };\n } else {\n // height 为主\n maxRadius = this.height / oneHeight;\n this.circleCenter = {\n x: this.center.x - (0.5 - left) * maxRadius * oneWidth,\n y: this.center.y - (0.5 - top) * this.height\n };\n }\n\n this.polarRadius = this.radius;\n\n if (!this.radius) {\n this.polarRadius = maxRadius;\n } else if (this.radius > 0 && this.radius <= 1) {\n this.polarRadius = maxRadius * this.radius;\n } else if (this.radius <= 0 || this.radius > maxRadius) {\n this.polarRadius = maxRadius;\n }\n\n this.x = {\n start: this.startAngle,\n end: this.endAngle\n };\n this.y = {\n start: this.innerRadius * this.polarRadius,\n end: this.polarRadius\n };\n };\n\n Polar.prototype.getRadius = function () {\n return this.polarRadius;\n };\n\n Polar.prototype.convertPoint = function (point) {\n var _a;\n\n var center = this.getCenter();\n var x = point.x,\n y = point.y;\n\n if (this.isTransposed) {\n _a = [y, x], x = _a[0], y = _a[1];\n }\n\n x = this.convertDim(x, 'x');\n y = this.convertDim(y, 'y');\n return {\n x: center.x + Math.cos(x) * y,\n y: center.y + Math.sin(x) * y\n };\n };\n\n Polar.prototype.invertPoint = function (point) {\n var center = this.getCenter();\n var vPoint = [point.x - center.x, point.y - center.y];\n var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n _matrixUtil.ext.leftRotate(m, m, this.startAngle);\n\n var vStart3 = [1, 0, 0];\n\n _matrixUtil.vec3.transformMat3(vStart3, vStart3, m);\n\n var vStart2 = [vStart3[0], vStart3[1]];\n\n var angle = _matrixUtil.ext.angleTo(vStart2, vPoint, this.endAngle < this.startAngle);\n\n if ((0, _util.isNumberEqual)(angle, Math.PI * 2)) {\n angle = 0;\n }\n\n var radius = _matrixUtil.vec2.length(vPoint);\n\n var xPercent = angle / (this.endAngle - this.startAngle);\n xPercent = this.endAngle - this.startAngle > 0 ? xPercent : -xPercent;\n var yPercent = this.invertDim(radius, 'y');\n var rst = {\n x: 0,\n y: 0\n };\n rst.x = this.isTransposed ? yPercent : xPercent;\n rst.y = this.isTransposed ? xPercent : yPercent;\n return rst;\n };\n\n Polar.prototype.getCenter = function () {\n return this.circleCenter;\n };\n\n Polar.prototype.getOneBox = function () {\n var startAngle = this.startAngle;\n var endAngle = this.endAngle;\n\n if (Math.abs(endAngle - startAngle) >= Math.PI * 2) {\n return {\n minX: -1,\n maxX: 1,\n minY: -1,\n maxY: 1\n };\n }\n\n var xs = [0, Math.cos(startAngle), Math.cos(endAngle)];\n var ys = [0, Math.sin(startAngle), Math.sin(endAngle)];\n\n for (var i = Math.min(startAngle, endAngle); i < Math.max(startAngle, endAngle); i += Math.PI / 18) {\n xs.push(Math.cos(i));\n ys.push(Math.sin(i));\n }\n\n return {\n minX: Math.min.apply(Math, xs),\n maxX: Math.max.apply(Math, xs),\n minY: Math.min.apply(Math, ys),\n maxY: Math.max.apply(Math, ys)\n };\n };\n\n return Polar;\n}(_base.default);\n\nvar _default = Polar;\nexports.default = _default;\n\n/***/ }),\n/* 802 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.registerCoordinate = exports.getCoordinate = void 0;\n// 所有的 Coordinate map\nvar COORDINATE_MAP = {};\n/**\n * 通过类型获得 coordinate 类\n * @param type\n */\n\nvar getCoordinate = function getCoordinate(type) {\n return COORDINATE_MAP[type.toLowerCase()];\n};\n/**\n * 注册 coordinate 类\n * @param type\n * @param ctor\n */\n\n\nexports.getCoordinate = getCoordinate;\n\nvar registerCoordinate = function registerCoordinate(type, ctor) {\n // 存储到 map 中\n COORDINATE_MAP[type.toLowerCase()] = ctor;\n};\n\nexports.registerCoordinate = registerCoordinate;\n\n/***/ }),\n/* 803 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Line\", {\n enumerable: true,\n get: function get() {\n return _line.default;\n }\n});\nObject.defineProperty(exports, \"Text\", {\n enumerable: true,\n get: function get() {\n return _text.default;\n }\n});\nObject.defineProperty(exports, \"Arc\", {\n enumerable: true,\n get: function get() {\n return _arc.default;\n }\n});\nObject.defineProperty(exports, \"Region\", {\n enumerable: true,\n get: function get() {\n return _region.default;\n }\n});\nObject.defineProperty(exports, \"Image\", {\n enumerable: true,\n get: function get() {\n return _image.default;\n }\n});\nObject.defineProperty(exports, \"DataMarker\", {\n enumerable: true,\n get: function get() {\n return _dataMarker.default;\n }\n});\nObject.defineProperty(exports, \"DataRegion\", {\n enumerable: true,\n get: function get() {\n return _dataRegion.default;\n }\n});\nObject.defineProperty(exports, \"RegionFilter\", {\n enumerable: true,\n get: function get() {\n return _regionFilter.default;\n }\n});\nObject.defineProperty(exports, \"Shape\", {\n enumerable: true,\n get: function get() {\n return _shape.default;\n }\n});\nObject.defineProperty(exports, \"Html\", {\n enumerable: true,\n get: function get() {\n return _html.default;\n }\n});\n\nvar _line = _interopRequireDefault(__webpack_require__(804));\n\nvar _text = _interopRequireDefault(__webpack_require__(806));\n\nvar _arc = _interopRequireDefault(__webpack_require__(807));\n\nvar _region = _interopRequireDefault(__webpack_require__(808));\n\nvar _image = _interopRequireDefault(__webpack_require__(809));\n\nvar _dataMarker = _interopRequireDefault(__webpack_require__(810));\n\nvar _dataRegion = _interopRequireDefault(__webpack_require__(811));\n\nvar _regionFilter = _interopRequireDefault(__webpack_require__(812));\n\nvar _shape = _interopRequireDefault(__webpack_require__(813));\n\nvar _html = _interopRequireDefault(__webpack_require__(814));\n\n/***/ }),\n/* 804 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _graphic = __webpack_require__(185);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar _util2 = __webpack_require__(44);\n\nvar LineAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(LineAnnotation, _super);\n\n function LineAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n LineAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'line',\n locationType: 'region',\n start: null,\n end: null,\n style: {},\n text: null,\n defaultCfg: {\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'center',\n textBaseline: 'bottom',\n fontFamily: _theme.default.fontFamily\n },\n text: {\n position: 'center',\n autoRotate: true,\n content: null,\n offsetX: 0,\n offsetY: 0,\n style: {\n stroke: _theme.default.lineColor,\n lineWidth: 1\n }\n }\n }\n });\n };\n\n LineAnnotation.prototype.renderInner = function (group) {\n this.renderLine(group);\n\n if (this.get('text')) {\n this.renderLabel(group);\n }\n }; // 绘制线\n\n\n LineAnnotation.prototype.renderLine = function (group) {\n var start = this.get('start');\n var end = this.get('end');\n var style = this.get('style');\n this.addShape(group, {\n type: 'line',\n id: this.getElementId('line'),\n name: 'annotation-line',\n attrs: (0, _tslib.__assign)({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n }, style)\n });\n }; // 获取 label 的位置\n\n\n LineAnnotation.prototype.getLabelPoint = function (start, end, position) {\n var percent;\n\n if (position === 'start') {\n percent = 0;\n } else if (position === 'center') {\n percent = 0.5;\n } else if ((0, _util.isString)(position) && position.indexOf('%') !== -1) {\n percent = parseInt(position, 10) / 100;\n } else if ((0, _util.isNumber)(position)) {\n percent = position;\n } else {\n percent = 1;\n }\n\n if (percent > 1 || percent < 0) {\n percent = 1;\n }\n\n return {\n x: (0, _util2.getValueByPercent)(start.x, end.x, percent),\n y: (0, _util2.getValueByPercent)(start.y, end.y, percent)\n };\n }; // 绘制 label\n\n\n LineAnnotation.prototype.renderLabel = function (group) {\n var text = this.get('text');\n var start = this.get('start');\n var end = this.get('end');\n var position = text.position,\n content = text.content,\n style = text.style,\n offsetX = text.offsetX,\n offsetY = text.offsetY,\n autoRotate = text.autoRotate,\n maxLength = text.maxLength,\n autoEllipsis = text.autoEllipsis,\n ellipsisPosition = text.ellipsisPosition,\n background = text.background,\n _a = text.isVertical,\n isVertical = _a === void 0 ? false : _a;\n var point = this.getLabelPoint(start, end, position);\n var x = point.x + offsetX;\n var y = point.y + offsetY;\n var cfg = {\n id: this.getElementId('line-text'),\n name: 'annotation-line-text',\n x: x,\n y: y,\n content: content,\n style: style,\n maxLength: maxLength,\n autoEllipsis: autoEllipsis,\n ellipsisPosition: ellipsisPosition,\n background: background,\n isVertical: isVertical\n }; // 如果自动旋转\n\n if (autoRotate) {\n var vector = [end.x - start.x, end.y - start.y];\n cfg.rotate = Math.atan2(vector[1], vector[0]);\n }\n\n (0, _graphic.renderTag)(group, cfg);\n };\n\n return LineAnnotation;\n}(_groupComponent.default);\n\nvar _default = LineAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 805 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.strLen = strLen;\nexports.charAtLength = charAtLength;\nexports.ellipsisString = ellipsisString;\nvar ELLIPSIS_CODE = \"\\u2026\";\n/** 获取字符串长度 */\n\nfunction strLen(str) {\n var len = 0;\n\n for (var i = 0; i < str.length; i++) {\n len += charAtLength(str, i);\n }\n\n return len;\n}\n/** 是否属于ASCII编码范畴 */\n\n\nfunction charAtLength(str, i) {\n if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {\n return 1;\n } else {\n return 2;\n }\n}\n/** 文本省略 */\n\n\nfunction ellipsisString(str, reseveLength, position) {\n if (position === void 0) {\n position = 'tail';\n }\n\n var count = str.length;\n var rst = '';\n\n if (position === 'tail') {\n for (var i = 0, index = 0; i < reseveLength;) {\n var charLength = charAtLength(str, index);\n\n if (i + charLength <= reseveLength) {\n rst += str[index];\n i += charAtLength(str, index);\n index++;\n } else {\n break;\n }\n }\n\n rst += ELLIPSIS_CODE;\n } else if (position === 'head') {\n for (var i = 0, index = count - 1; i < reseveLength;) {\n var charLength = charAtLength(str, index);\n\n if (i + charLength <= reseveLength) {\n rst += str[index];\n i += charAtLength(str, index);\n index--;\n } else {\n break;\n }\n }\n\n rst = ELLIPSIS_CODE + rst;\n } else {\n var startStr = '';\n var endStr = '';\n\n for (var i = 0, startIndex = 0, endIndex = count - 1; i < reseveLength;) {\n var startCodeLen = charAtLength(str, startIndex);\n var hasAdd = false; // 设置标志位,防止头尾都没有附加字符\n\n if (startCodeLen + i <= reseveLength) {\n startStr += str[startIndex];\n startIndex++;\n i += startCodeLen;\n hasAdd = true;\n }\n\n var endCodeLen = charAtLength(str, endIndex);\n\n if (endCodeLen + i <= reseveLength) {\n endStr = str[endIndex] + endStr;\n i += endCodeLen;\n endIndex--;\n hasAdd = true;\n }\n\n if (!hasAdd) {\n // 如果都没有增加字符,说明都不适合则中断\n break;\n }\n }\n\n rst = startStr + ELLIPSIS_CODE + endStr;\n }\n\n return rst;\n}\n\n/***/ }),\n/* 806 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _graphic = __webpack_require__(185);\n\nvar _matrix = __webpack_require__(87);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar TextAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TextAnnotation, _super);\n\n function TextAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n TextAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'text',\n locationType: 'point',\n x: 0,\n y: 0,\n content: '',\n rotate: null,\n style: {},\n background: null,\n maxLength: null,\n autoEllipsis: true,\n isVertical: false,\n ellipsisPosition: 'tail',\n defaultCfg: {\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'center',\n textBaseline: 'middle',\n fontFamily: _theme.default.fontFamily\n }\n }\n });\n }; // 复写 setLocation 方法,不需要重新创建 text\n\n\n TextAnnotation.prototype.setLocation = function (location) {\n this.set('x', location.x);\n this.set('y', location.y);\n this.resetLocation();\n };\n\n TextAnnotation.prototype.renderInner = function (group) {\n var _a = this.getLocation(),\n x = _a.x,\n y = _a.y;\n\n var content = this.get('content');\n var style = this.get('style');\n var id = this.getElementId('text');\n var name = this.get('name') + \"-text\";\n var maxLength = this.get('maxLength');\n var autoEllipsis = this.get('autoEllipsis');\n var isVertical = this.get('isVertical');\n var ellipsisPosition = this.get('ellipsisPosition');\n var background = this.get('background');\n var rotate = this.get('rotate');\n var cfg = {\n id: id,\n name: name,\n x: x,\n y: y,\n content: content,\n style: style,\n maxLength: maxLength,\n autoEllipsis: autoEllipsis,\n isVertical: isVertical,\n ellipsisPosition: ellipsisPosition,\n background: background,\n rotate: rotate\n };\n (0, _graphic.renderTag)(group, cfg);\n };\n\n TextAnnotation.prototype.resetLocation = function () {\n var textGroup = this.getElementByLocalId('text-group');\n\n if (textGroup) {\n var _a = this.getLocation(),\n x = _a.x,\n y = _a.y;\n\n var rotate = this.get('rotate');\n (0, _matrix.applyTranslate)(textGroup, x, y);\n (0, _matrix.applyRotate)(textGroup, rotate, x, y);\n }\n };\n\n return TextAnnotation;\n}(_groupComponent.default);\n\nvar _default = TextAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 807 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _util = __webpack_require__(44);\n\nvar ArcAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(ArcAnnotation, _super);\n\n function ArcAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n ArcAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'arc',\n locationType: 'circle',\n center: null,\n radius: 100,\n startAngle: -Math.PI / 2,\n endAngle: Math.PI * 3 / 2,\n style: {\n stroke: '#999',\n lineWidth: 1\n }\n });\n };\n\n ArcAnnotation.prototype.renderInner = function (group) {\n this.renderArc(group);\n };\n\n ArcAnnotation.prototype.getArcPath = function () {\n var _a = this.getLocation(),\n center = _a.center,\n radius = _a.radius,\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var startPoint = (0, _util.getCirclePoint)(center, radius, startAngle);\n var endPoint = (0, _util.getCirclePoint)(center, radius, endAngle);\n var largeFlag = endAngle - startAngle > Math.PI ? 1 : 0;\n var path = [['M', startPoint.x, startPoint.y]];\n\n if (endAngle - startAngle === Math.PI * 2) {\n // 整个圆是分割成两个圆\n var middlePoint = (0, _util.getCirclePoint)(center, radius, startAngle + Math.PI);\n path.push(['A', radius, radius, 0, largeFlag, 1, middlePoint.x, middlePoint.y]);\n path.push(['A', radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]);\n } else {\n path.push(['A', radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]);\n }\n\n return path;\n }; // 绘制 arc\n\n\n ArcAnnotation.prototype.renderArc = function (group) {\n // 也可以 通过 get('center') 类似的方式逐个获取\n var path = this.getArcPath();\n var style = this.get('style');\n this.addShape(group, {\n type: 'path',\n id: this.getElementId('arc'),\n name: 'annotation-arc',\n attrs: (0, _tslib.__assign)({\n path: path\n }, style)\n });\n };\n\n return ArcAnnotation;\n}(_groupComponent.default);\n\nvar _default = ArcAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 808 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar _util = __webpack_require__(44);\n\nvar RegionAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RegionAnnotation, _super);\n\n function RegionAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n RegionAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'region',\n locationType: 'region',\n start: null,\n end: null,\n style: {},\n defaultCfg: {\n style: {\n lineWidth: 0,\n fill: _theme.default.regionColor,\n opacity: 0.4\n }\n }\n });\n };\n\n RegionAnnotation.prototype.renderInner = function (group) {\n this.renderRegion(group);\n };\n\n RegionAnnotation.prototype.renderRegion = function (group) {\n var start = this.get('start');\n var end = this.get('end');\n var style = this.get('style');\n var bbox = (0, _util.regionToBBox)({\n start: start,\n end: end\n });\n this.addShape(group, {\n type: 'rect',\n id: this.getElementId('region'),\n name: 'annotation-region',\n attrs: (0, _tslib.__assign)({\n x: bbox.x,\n y: bbox.y,\n width: bbox.width,\n height: bbox.height\n }, style)\n });\n };\n\n return RegionAnnotation;\n}(_groupComponent.default);\n\nvar _default = RegionAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 809 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _util = __webpack_require__(44);\n\nvar ImageAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(ImageAnnotation, _super);\n\n function ImageAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n ImageAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'image',\n locationType: 'region',\n start: null,\n end: null,\n src: null,\n style: {}\n });\n };\n\n ImageAnnotation.prototype.renderInner = function (group) {\n this.renderImage(group);\n };\n\n ImageAnnotation.prototype.getImageAttrs = function () {\n var start = this.get('start');\n var end = this.get('end');\n var style = this.get('style');\n var bbox = (0, _util.regionToBBox)({\n start: start,\n end: end\n });\n var src = this.get('src');\n return (0, _tslib.__assign)({\n x: bbox.x,\n y: bbox.y,\n img: src,\n width: bbox.width,\n height: bbox.height\n }, style);\n }; // 绘制图片\n\n\n ImageAnnotation.prototype.renderImage = function (group) {\n this.addShape(group, {\n type: 'image',\n id: this.getElementId('image'),\n name: 'annotation-image',\n attrs: this.getImageAttrs()\n });\n };\n\n return ImageAnnotation;\n}(_groupComponent.default);\n\nvar _default = ImageAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 810 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _graphic = __webpack_require__(185);\n\nvar _matrix = __webpack_require__(87);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar DataMarkerAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(DataMarkerAnnotation, _super);\n\n function DataMarkerAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n DataMarkerAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'dataMarker',\n locationType: 'point',\n x: 0,\n y: 0,\n point: {},\n line: {},\n text: {},\n direction: 'upward',\n autoAdjust: true,\n coordinateBBox: null,\n defaultCfg: {\n point: {\n display: true,\n style: {\n r: 3,\n fill: '#FFFFFF',\n stroke: '#1890FF',\n lineWidth: 2\n }\n },\n line: {\n display: true,\n length: 20,\n style: {\n stroke: _theme.default.lineColor,\n lineWidth: 1\n }\n },\n text: {\n content: '',\n display: true,\n style: {\n fill: _theme.default.textColor,\n opacity: 0.65,\n fontSize: 12,\n textAlign: 'start',\n fontFamily: _theme.default.fontFamily\n }\n }\n }\n });\n };\n\n DataMarkerAnnotation.prototype.renderInner = function (group) {\n if ((0, _util.get)(this.get('line'), 'display')) {\n this.renderLine(group);\n }\n\n if ((0, _util.get)(this.get('text'), 'display')) {\n this.renderText(group);\n }\n\n if ((0, _util.get)(this.get('point'), 'display')) {\n this.renderPoint(group);\n }\n\n if (this.get('autoAdjust')) {\n this.autoAdjust(group);\n }\n };\n\n DataMarkerAnnotation.prototype.applyOffset = function () {\n this.moveElementTo(this.get('group'), {\n x: this.get('x') + this.get('offsetX'),\n y: this.get('y') + this.get('offsetY')\n });\n };\n\n DataMarkerAnnotation.prototype.renderPoint = function (group) {\n var point = this.getShapeAttrs().point;\n this.addShape(group, {\n type: 'circle',\n id: this.getElementId('point'),\n name: 'annotation-point',\n attrs: point\n });\n };\n\n DataMarkerAnnotation.prototype.renderLine = function (group) {\n var line = this.getShapeAttrs().line;\n this.addShape(group, {\n type: 'path',\n id: this.getElementId('line'),\n name: 'annotation-line',\n attrs: line\n });\n };\n\n DataMarkerAnnotation.prototype.renderText = function (group) {\n var textAttrs = this.getShapeAttrs().text;\n var x = textAttrs.x,\n y = textAttrs.y,\n text = textAttrs.text,\n style = (0, _tslib.__rest)(textAttrs, [\"x\", \"y\", \"text\"]);\n\n var _a = this.get('text'),\n background = _a.background,\n maxLength = _a.maxLength,\n autoEllipsis = _a.autoEllipsis,\n isVertival = _a.isVertival,\n ellipsisPosition = _a.ellipsisPosition;\n\n var tagCfg = {\n x: x,\n y: y,\n id: this.getElementId('text'),\n name: 'annotation-text',\n content: text,\n style: style,\n background: background,\n maxLength: maxLength,\n autoEllipsis: autoEllipsis,\n isVertival: isVertival,\n ellipsisPosition: ellipsisPosition\n };\n (0, _graphic.renderTag)(group, tagCfg);\n };\n\n DataMarkerAnnotation.prototype.autoAdjust = function (group) {\n var direction = this.get('direction');\n var x = this.get('x');\n var y = this.get('y');\n var lineLength = (0, _util.get)(this.get('line'), 'length', 0);\n var coordinateBBox = this.get('coordinateBBox');\n\n var _a = group.getBBox(),\n minX = _a.minX,\n maxX = _a.maxX,\n minY = _a.minY,\n maxY = _a.maxY;\n\n var textGroup = group.findById(this.getElementId('text-group'));\n var textShape = group.findById(this.getElementId('text'));\n var lineShape = group.findById(this.getElementId('line'));\n\n if (!coordinateBBox) {\n return;\n }\n\n if (textGroup) {\n if (x + minX <= coordinateBBox.minX) {\n // 左侧超出\n var overflow = coordinateBBox.minX - (x + minX);\n (0, _matrix.applyTranslate)(textGroup, textGroup.attr('x') + overflow, textGroup.attr('y'));\n }\n\n if (x + maxX >= coordinateBBox.maxX) {\n // 右侧超出\n var overflow = x + maxX - coordinateBBox.maxX;\n (0, _matrix.applyTranslate)(textGroup, textGroup.attr('x') - overflow, textGroup.attr('y'));\n }\n }\n\n if (direction === 'upward' && y + minY <= coordinateBBox.minY || direction !== 'upward' && y + maxY >= coordinateBBox.maxY) {\n // 上方或者下方超出\n var textBaseline = void 0;\n var factor = void 0;\n\n if (direction === 'upward' && y + minY <= coordinateBBox.minY) {\n textBaseline = 'top';\n factor = 1;\n } else {\n textBaseline = 'bottom';\n factor = -1;\n }\n\n textShape.attr('textBaseline', textBaseline);\n\n if (lineShape) {\n lineShape.attr('path', [['M', 0, 0], ['L', 0, lineLength * factor]]);\n }\n\n (0, _matrix.applyTranslate)(textGroup, textGroup.attr('x'), (lineLength + 2) * factor);\n }\n };\n\n DataMarkerAnnotation.prototype.getShapeAttrs = function () {\n var lineDisplay = (0, _util.get)(this.get('line'), 'display');\n var pointStyle = (0, _util.get)(this.get('point'), 'style', {});\n var lineStyle = (0, _util.get)(this.get('line'), 'style', {});\n var textStyle = (0, _util.get)(this.get('text'), 'style', {});\n var direction = this.get('direction');\n var lineLength = lineDisplay ? (0, _util.get)(this.get('line'), 'length', 0) : 0;\n var factor = direction === 'upward' ? -1 : 1;\n return {\n point: (0, _tslib.__assign)({\n x: 0,\n y: 0\n }, pointStyle),\n line: (0, _tslib.__assign)({\n path: [['M', 0, 0], ['L', 0, lineLength * factor]]\n }, lineStyle),\n text: (0, _tslib.__assign)({\n x: 0,\n y: (lineLength + 2) * factor,\n text: (0, _util.get)(this.get('text'), 'content', ''),\n textBaseline: direction === 'upward' ? 'bottom' : 'top'\n }, textStyle)\n };\n };\n\n return DataMarkerAnnotation;\n}(_groupComponent.default);\n\nvar _default = DataMarkerAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 811 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar _util2 = __webpack_require__(44);\n\nvar _graphic = __webpack_require__(185);\n\nvar DataRegionAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(DataRegionAnnotation, _super);\n\n function DataRegionAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n DataRegionAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'dataRegion',\n locationType: 'points',\n points: [],\n lineLength: 0,\n region: {},\n text: {},\n defaultCfg: {\n region: {\n style: {\n lineWidth: 0,\n fill: _theme.default.regionColor,\n opacity: 0.4\n }\n },\n text: {\n content: '',\n style: {\n textAlign: 'center',\n textBaseline: 'bottom',\n fontSize: 12,\n fill: _theme.default.textColor,\n fontFamily: _theme.default.fontFamily\n }\n }\n }\n });\n };\n\n DataRegionAnnotation.prototype.renderInner = function (group) {\n var regionStyle = (0, _util.get)(this.get('region'), 'style', {});\n var textStyle = (0, _util.get)(this.get('text'), 'style', {});\n var lineLength = this.get('lineLength') || 0;\n var points = this.get('points');\n\n if (!points.length) {\n return;\n }\n\n var bbox = (0, _util2.pointsToBBox)(points); // render region\n\n var path = [];\n path.push(['M', points[0].x, bbox.minY - lineLength]);\n points.forEach(function (point) {\n path.push(['L', point.x, point.y]);\n });\n path.push(['L', points[points.length - 1].x, points[points.length - 1].y - lineLength]);\n this.addShape(group, {\n type: 'path',\n id: this.getElementId('region'),\n name: 'annotation-region',\n attrs: (0, _tslib.__assign)({\n path: path\n }, regionStyle)\n }); // render text\n\n var textCfg = (0, _tslib.__assign)({\n id: this.getElementId('text'),\n name: 'annotation-text',\n x: (bbox.minX + bbox.maxX) / 2,\n y: bbox.minY - lineLength\n }, this.get('text'));\n (0, _graphic.renderTag)(group, textCfg);\n };\n\n return DataRegionAnnotation;\n}(_groupComponent.default);\n\nvar _default = DataRegionAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 812 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _util2 = __webpack_require__(44);\n\nvar RegionFilterAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RegionFilterAnnotation, _super);\n\n function RegionFilterAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n\n\n RegionFilterAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'regionFilter',\n locationType: 'region',\n start: null,\n end: null,\n color: null,\n shape: []\n });\n };\n\n RegionFilterAnnotation.prototype.renderInner = function (group) {\n var _this = this;\n\n var start = this.get('start');\n var end = this.get('end'); // 1. add region layer\n\n var layer = this.addGroup(group, {\n id: this.getElementId('region-filter'),\n capture: false\n }); // 2. clone shape & color it\n\n (0, _util.each)(this.get('shapes'), function (shape, shapeIdx) {\n var type = shape.get('type');\n var attrs = (0, _util.clone)(shape.attr());\n\n _this.adjustShapeAttrs(attrs);\n\n _this.addShape(layer, {\n id: _this.getElementId(\"shape-\" + type + \"-\" + shapeIdx),\n capture: false,\n type: type,\n attrs: attrs\n });\n }); // 3. clip\n\n var clipBBox = (0, _util2.regionToBBox)({\n start: start,\n end: end\n });\n layer.setClip({\n type: 'rect',\n attrs: {\n x: clipBBox.minX,\n y: clipBBox.minY,\n width: clipBBox.width,\n height: clipBBox.height\n }\n });\n };\n\n RegionFilterAnnotation.prototype.adjustShapeAttrs = function (attr) {\n var color = this.get('color');\n\n if (attr.fill) {\n attr.fill = attr.fillStyle = color;\n }\n\n attr.stroke = attr.strokeStyle = color;\n };\n\n return RegionFilterAnnotation;\n}(_groupComponent.default);\n\nvar _default = RegionFilterAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 813 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar ShapeAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(ShapeAnnotation, _super);\n\n function ShapeAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n ShapeAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'shape',\n draw: _util.noop\n });\n };\n\n ShapeAnnotation.prototype.renderInner = function (group) {\n var render = this.get('render');\n\n if ((0, _util.isFunction)(render)) {\n render(group);\n }\n };\n\n return ShapeAnnotation;\n}(_groupComponent.default);\n\nvar _default = ShapeAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 814 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _domUtil = __webpack_require__(112);\n\nvar _util = __webpack_require__(0);\n\nvar _htmlComponent = _interopRequireDefault(__webpack_require__(186));\n\nvar _util2 = __webpack_require__(44);\n\nvar HtmlAnnotation =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(HtmlAnnotation, _super);\n\n function HtmlAnnotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n HtmlAnnotation.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'annotation',\n type: 'html',\n locationType: 'point',\n x: 0,\n y: 0,\n containerTpl: \"\",\n alignX: 'left',\n alignY: 'top',\n html: '',\n zIndex: 7\n });\n };\n\n HtmlAnnotation.prototype.render = function () {\n var container = this.getContainer();\n var html = this.get('html');\n (0, _util2.clearDom)(container);\n var rst = (0, _util.isFunction)(html) ? html(container) : html;\n\n if ((0, _util.isElement)(rst)) {\n container.appendChild(rst);\n } else if ((0, _util.isString)(rst)) {\n container.appendChild((0, _domUtil.createDom)(rst));\n }\n\n this.resetPosition();\n };\n\n HtmlAnnotation.prototype.resetPosition = function () {\n var container = this.getContainer();\n\n var _a = this.getLocation(),\n x = _a.x,\n y = _a.y;\n\n var alignX = this.get('alignX');\n var alignY = this.get('alignY');\n var offsetX = this.get('offsetX');\n var offsetY = this.get('offsetY');\n var domWidth = (0, _domUtil.getOuterWidth)(container);\n var domHeight = (0, _domUtil.getOuterHeight)(container);\n var position = {\n x: x,\n y: y\n };\n\n if (alignX === 'middle') {\n position.x -= Math.round(domWidth / 2);\n } else if (alignX === 'right') {\n position.x -= Math.round(domWidth);\n }\n\n if (alignY === 'middle') {\n position.y -= Math.round(domHeight / 2);\n } else if (alignY === 'bottom') {\n position.y -= Math.round(domHeight);\n }\n\n if (offsetX) {\n position.x += offsetX;\n }\n\n if (offsetY) {\n position.y += offsetY;\n }\n\n (0, _domUtil.modifyCSS)(container, {\n position: 'absolute',\n left: position.x + \"px\",\n top: position.y + \"px\",\n zIndex: this.get('zIndex')\n });\n };\n\n return HtmlAnnotation;\n}(_htmlComponent.default);\n\nvar _default = HtmlAnnotation;\nexports.default = _default;\n\n/***/ }),\n/* 815 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addEventListener;\n\nfunction addEventListener(target, eventType, callback) {\n if (target) {\n if (typeof target.addEventListener === 'function') {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n }; // @ts-ignore\n }\n\n if (typeof target.attachEvent === 'function') {\n // @ts-ignore\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n // @ts-ignore\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n }\n}\n\n/***/ }),\n/* 816 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createDom;\n\n/**\n * 创建DOM 节点\n * @param {String} str Dom 字符串\n * @return {HTMLElement} DOM 节点\n */\nvar TABLE;\nvar TABLE_TR;\nvar FRAGMENT_REG;\nvar CONTAINERS;\n\nfunction initConstants() {\n TABLE = document.createElement('table');\n TABLE_TR = document.createElement('tr');\n FRAGMENT_REG = /^\\s*<(\\w+|!)[^>]*>/;\n CONTAINERS = {\n tr: document.createElement('tbody'),\n tbody: TABLE,\n thead: TABLE,\n tfoot: TABLE,\n td: TABLE_TR,\n th: TABLE_TR,\n '*': document.createElement('div')\n };\n}\n\nfunction createDom(str) {\n if (!TABLE) {\n initConstants();\n }\n\n var name = FRAGMENT_REG.test(str) && RegExp.$1;\n\n if (!name || !(name in CONTAINERS)) {\n name = '*';\n }\n\n var container = CONTAINERS[name];\n str = str.replace(/(^\\s*)|(\\s*$)/g, '');\n container.innerHTML = '' + str;\n var dom = container.childNodes[0];\n container.removeChild(dom);\n return dom;\n}\n\n/***/ }),\n/* 817 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getOuterHeight;\n\nvar _getStyle = _interopRequireDefault(__webpack_require__(141));\n\nvar _getHeight = _interopRequireDefault(__webpack_require__(422));\n\nfunction getOuterHeight(el, defaultValue) {\n var height = (0, _getHeight.default)(el, defaultValue);\n var bTop = parseFloat((0, _getStyle.default)(el, 'borderTopWidth')) || 0;\n var pTop = parseFloat((0, _getStyle.default)(el, 'paddingTop')) || 0;\n var pBottom = parseFloat((0, _getStyle.default)(el, 'paddingBottom')) || 0;\n var bBottom = parseFloat((0, _getStyle.default)(el, 'borderBottomWidth')) || 0;\n var mTop = parseFloat((0, _getStyle.default)(el, 'marginTop')) || 0;\n var mBottom = parseFloat((0, _getStyle.default)(el, 'marginBottom')) || 0;\n return height + bTop + bBottom + pTop + pBottom + mTop + mBottom;\n}\n\n/***/ }),\n/* 818 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getOuterWidth;\n\nvar _getStyle = _interopRequireDefault(__webpack_require__(141));\n\nvar _getWidth = _interopRequireDefault(__webpack_require__(423));\n\nfunction getOuterWidth(el, defaultValue) {\n var width = (0, _getWidth.default)(el, defaultValue);\n var bLeft = parseFloat((0, _getStyle.default)(el, 'borderLeftWidth')) || 0;\n var pLeft = parseFloat((0, _getStyle.default)(el, 'paddingLeft')) || 0;\n var pRight = parseFloat((0, _getStyle.default)(el, 'paddingRight')) || 0;\n var bRight = parseFloat((0, _getStyle.default)(el, 'borderRightWidth')) || 0;\n var mRight = parseFloat((0, _getStyle.default)(el, 'marginRight')) || 0;\n var mLeft = parseFloat((0, _getStyle.default)(el, 'marginLeft')) || 0;\n return width + bLeft + bRight + pLeft + pRight + mLeft + mRight;\n}\n\n/***/ }),\n/* 819 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getRatio;\n\nfunction getRatio() {\n return window.devicePixelRatio ? window.devicePixelRatio : 2;\n}\n\n/***/ }),\n/* 820 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = modifyCSS;\n\nfunction modifyCSS(dom, css) {\n if (dom) {\n for (var key in css) {\n if (css.hasOwnProperty(key)) {\n dom.style[key] = css[key];\n }\n }\n }\n\n return dom;\n}\n\n/***/ }),\n/* 821 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Line\", {\n enumerable: true,\n get: function get() {\n return _line.default;\n }\n});\nObject.defineProperty(exports, \"Circle\", {\n enumerable: true,\n get: function get() {\n return _circle.default;\n }\n});\nObject.defineProperty(exports, \"Base\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\n\nvar _line = _interopRequireDefault(__webpack_require__(822));\n\nvar _circle = _interopRequireDefault(__webpack_require__(827));\n\nvar _base = _interopRequireDefault(__webpack_require__(254));\n\n/***/ }),\n/* 822 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _matrixUtil = __webpack_require__(33);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(254));\n\nvar OverlapUtil = _interopRequireWildcard(__webpack_require__(823));\n\nvar Line =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Line, _super);\n\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Line.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'line',\n locationType: 'region',\n\n /**\n * 起始点, x, y\n * @type {object}\n */\n start: null,\n\n /**\n * 结束点, x, y\n * @type {object}\n */\n end: null\n });\n }; // 获取坐标轴线的 path\n\n\n Line.prototype.getLinePath = function () {\n var start = this.get('start');\n var end = this.get('end');\n var path = [];\n path.push(['M', start.x, start.y]);\n path.push(['L', end.x, end.y]);\n return path;\n }; // 重新计算 layout bbox,考虑到 line 不显示\n\n\n Line.prototype.getInnerLayoutBBox = function () {\n var start = this.get('start');\n var end = this.get('end');\n\n var bbox = _super.prototype.getInnerLayoutBBox.call(this);\n\n var minX = Math.min(start.x, end.x, bbox.x);\n var minY = Math.min(start.y, end.y, bbox.y);\n var maxX = Math.max(start.x, end.x, bbox.maxX);\n var maxY = Math.max(start.y, end.y, bbox.maxY);\n return {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY\n };\n };\n\n Line.prototype.isVertical = function () {\n var start = this.get('start');\n var end = this.get('end');\n return (0, _util.isNumberEqual)(start.x, end.x);\n };\n\n Line.prototype.isHorizontal = function () {\n var start = this.get('start');\n var end = this.get('end');\n return (0, _util.isNumberEqual)(start.y, end.y);\n };\n\n Line.prototype.getTickPoint = function (tickValue) {\n var self = this;\n var start = self.get('start');\n var end = self.get('end');\n var regionX = end.x - start.x;\n var regionY = end.y - start.y;\n return {\n x: start.x + regionX * tickValue,\n y: start.y + regionY * tickValue\n };\n }; // 直线坐标轴下任一点的向量方向都相同\n\n\n Line.prototype.getSideVector = function (offset) {\n var axisVector = this.getAxisVector();\n\n var normal = _matrixUtil.vec2.normalize([0, 0], axisVector);\n\n var factor = this.get('verticalFactor');\n var verticalVector = [normal[1], normal[0] * -1]; // 垂直方向,逆时针方向\n\n return _matrixUtil.vec2.scale([0, 0], verticalVector, offset * factor);\n }; // 获取坐标轴的向量\n\n\n Line.prototype.getAxisVector = function () {\n var start = this.get('start');\n var end = this.get('end');\n return [end.x - start.x, end.y - start.y];\n };\n\n Line.prototype.processOverlap = function (labelGroup) {\n var _this = this;\n\n var isVertical = this.isVertical();\n var isHorizontal = this.isHorizontal(); // 非垂直,或者非水平时不处理遮挡问题\n\n if (!isVertical && !isHorizontal) {\n return;\n }\n\n var labelCfg = this.get('label');\n var titleCfg = this.get('title');\n var verticalLimitLength = this.get('verticalLimitLength');\n var labelOffset = labelCfg.offset;\n var limitLength = verticalLimitLength;\n var titleHeight = 0;\n var titleSpacing = 0;\n\n if (titleCfg) {\n titleHeight = titleCfg.style.fontSize;\n titleSpacing = titleCfg.spacing;\n }\n\n if (limitLength) {\n limitLength = limitLength - labelOffset - titleSpacing - titleHeight;\n }\n\n var overlapOrder = this.get('overlapOrder');\n (0, _util.each)(overlapOrder, function (name) {\n if (labelCfg[name] && _this.canProcessOverlap(name)) {\n _this.autoProcessOverlap(name, labelCfg[name], labelGroup, limitLength);\n }\n });\n\n if (titleCfg) {\n if ((0, _util.isNil)(titleCfg.offset)) {\n // 调整 title 的 offset\n var bbox = labelGroup.getCanvasBBox();\n var length_1 = isVertical ? bbox.width : bbox.height; // 如果用户没有设置 offset,则自动计算\n\n titleCfg.offset = labelOffset + length_1 + titleSpacing + titleHeight / 2;\n }\n }\n };\n /**\n * 是否可以执行某一 overlap\n * @param name\n */\n\n\n Line.prototype.canProcessOverlap = function (name) {\n var labelCfg = this.get('label'); // 对 autoRotate,如果配置了旋转角度,直接进行固定角度旋转\n\n if (name === 'autoRotate') {\n return (0, _util.isNil)(labelCfg.rotate);\n } // 默认所有 overlap 都可执行\n\n\n return true;\n };\n\n Line.prototype.autoProcessOverlap = function (name, value, labelGroup, limitLength) {\n var _this = this;\n\n var isVertical = this.isVertical();\n var hasAdjusted = false;\n var util = OverlapUtil[name];\n\n if (value === true) {\n var labelCfg = this.get('label'); // true 形式的配置:使用 overlap 默认的的处理方法进行处理\n\n hasAdjusted = util.getDefault()(isVertical, labelGroup, limitLength);\n } else if ((0, _util.isFunction)(value)) {\n // 回调函数形式的配置: 用户可以传入回调函数\n hasAdjusted = value(isVertical, labelGroup, limitLength);\n } else if ((0, _util.isObject)(value)) {\n // object 形式的配置方式:包括 处理方法 type, 和可选参数配置 cfg\n var overlapCfg = value;\n\n if (util[overlapCfg.type]) {\n hasAdjusted = util[overlapCfg.type](isVertical, labelGroup, limitLength, overlapCfg.cfg);\n }\n } else if (util[value]) {\n // 字符串类型的配置:按照名称执行 overlap 处理方法\n hasAdjusted = util[value](isVertical, labelGroup, limitLength);\n }\n\n if (name === 'autoRotate') {\n // 文本旋转后,文本的对齐方式可能就不合适了\n if (hasAdjusted) {\n var labels = labelGroup.getChildren();\n var verticalFactor_1 = this.get('verticalFactor');\n (0, _util.each)(labels, function (label) {\n var textAlign = label.attr('textAlign');\n\n if (textAlign === 'center') {\n // 居中的文本需要调整旋转度\n var newAlign = verticalFactor_1 > 0 ? 'end' : 'start';\n label.attr('textAlign', newAlign);\n }\n });\n }\n } else if (name === 'autoHide') {\n var children = labelGroup.getChildren().slice(0); // 复制数组,删除时不会出错\n\n (0, _util.each)(children, function (label) {\n if (!label.get('visible')) {\n if (_this.get('isRegister')) {\n // 已经注册过了,则删除\n _this.unregisterElement(label);\n }\n\n label.remove(); // 防止 label 数量太多,所以统一删除\n }\n });\n }\n };\n\n return Line;\n}(_base.default);\n\nvar _default = Line;\nexports.default = _default;\n\n/***/ }),\n/* 823 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.autoRotate = exports.autoHide = exports.autoEllipsis = void 0;\n\nvar autoEllipsis = _interopRequireWildcard(__webpack_require__(824));\n\nexports.autoEllipsis = autoEllipsis;\n\nvar autoHide = _interopRequireWildcard(__webpack_require__(825));\n\nexports.autoHide = autoHide;\n\nvar autoRotate = _interopRequireWildcard(__webpack_require__(826));\n\nexports.autoRotate = autoRotate;\n\n/***/ }),\n/* 824 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefault = getDefault;\nexports.ellipsisHead = ellipsisHead;\nexports.ellipsisTail = ellipsisTail;\nexports.ellipsisMiddle = ellipsisMiddle;\n\nvar _util = __webpack_require__(0);\n\nvar _label = __webpack_require__(140);\n\nfunction ellipseLabels(isVertical, labelGroup, limitLength, position) {\n var children = labelGroup.getChildren();\n var ellipsised = false;\n (0, _util.each)(children, function (label) {\n var rst = (0, _label.ellipsisLabel)(isVertical, label, limitLength, position);\n ellipsised = ellipsised || rst;\n });\n return ellipsised;\n}\n\nfunction getDefault() {\n return ellipsisTail;\n}\n\nfunction ellipsisHead(isVertical, labelGroup, limitLength) {\n return ellipseLabels(isVertical, labelGroup, limitLength, 'head');\n}\n\nfunction ellipsisTail(isVertical, labelGroup, limitLength) {\n return ellipseLabels(isVertical, labelGroup, limitLength, 'tail');\n}\n\nfunction ellipsisMiddle(isVertical, labelGroup, limitLength) {\n return ellipseLabels(isVertical, labelGroup, limitLength, 'middle');\n}\n\n/***/ }),\n/* 825 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefault = getDefault;\nexports.reserveFirst = reserveFirst;\nexports.reserveLast = reserveLast;\nexports.reserveBoth = reserveBoth;\nexports.equidistance = equidistance;\nexports.equidistanceWithReverseBoth = equidistanceWithReverseBoth;\n\nvar _label = __webpack_require__(140);\n\nvar _matrix = __webpack_require__(87);\n\nvar _util = __webpack_require__(44);\n\n// 文本是否旋转\nfunction isRotate(label) {\n var matrix = label.attr('matrix');\n return matrix && matrix[0] !== 1; // 仅在这个场景下判定\n}\n\nfunction getRotateAngle(label) {\n var angle = isRotate(label) ? (0, _matrix.getAngleByMatrix)(label.attr('matrix')) : 0;\n return angle % 360;\n} // autohide 不再考虑超出限制\n// function isOutLimit(isVertical: boolean, label: IElement, limitLength: number) {\n// if (!limitLength) {\n// // 如果没限制 limitLength 则直接返回 false\n// return false;\n// }\n// const canvasBBox = label.getCanvasBBox();\n// let isOut = false;\n// if (isVertical) {\n// isOut = canvasBBox.width > limitLength;\n// } else {\n// isOut = canvasBBox.height > limitLength;\n// }\n// return isOut;\n// }\n// 是否重叠\n\n\nfunction isOverlap(isVertical, first, second, minGap) {\n var overlap = false;\n var angle = getRotateAngle(first);\n var distance = isVertical ? Math.abs(second.attr('y') - first.attr('y')) : Math.abs(second.attr('x') - first.attr('x'));\n var prevBBox = (isVertical ? second.attr('y') > first.attr('y') : second.attr('x') > first.attr('x')) ? first.getBBox() : second.getBBox();\n\n if (isVertical) {\n var ratio = Math.abs(Math.cos(angle));\n\n if ((0, _util.near)(ratio, 0, Math.PI / 180)) {\n overlap = prevBBox.width + minGap > distance;\n } else {\n overlap = prevBBox.height / ratio + minGap > distance;\n }\n } else {\n var ratio = Math.abs(Math.sin(angle));\n\n if ((0, _util.near)(ratio, 0, Math.PI / 180)) {\n overlap = prevBBox.width + minGap > distance;\n } else {\n overlap = prevBBox.height / ratio + minGap > distance;\n }\n }\n\n return overlap;\n} // 保留第一个或者最后一个\n\n\nfunction reserveOne(isVertical, labelsGroup, reversed, autoHideCfg) {\n var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n var labels = labelsGroup.getChildren().slice() // 复制数组\n .filter(function (item) {\n return item.get('visible');\n });\n\n if (!labels.length) {\n return false;\n }\n\n var hasHide = false;\n\n if (reversed) {\n // 翻转\n labels.reverse();\n }\n\n var count = labels.length;\n var first = labels[0];\n var prev = first;\n\n for (var i = 1; i < count; i++) {\n var label = labels[i];\n var curBBox = label.getBBox(); // 不再考虑超出限制,而仅仅根据是否重叠进行隐藏 isOutLimit(isVertical, label, limitLength) ||\n\n var isHide = isOverlap(isVertical, prev, label, minGap);\n\n if (isHide) {\n label.hide();\n hasHide = true;\n } else {\n prev = label;\n }\n }\n\n return hasHide;\n} // 均匀抽样隐藏标签,注意这里假设 label/tick 是均匀的\n\n\nfunction parityHide(isVertical, labelsGroup, autoHideCfg) {\n var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n var labels = labelsGroup.getChildren().slice(); // 复制数组\n\n if (labels.length < 2) {\n // 如果数量小于 2 则直接返回,等于 2 时可能也会重合\n return false;\n }\n\n var hasHide = false;\n var first = labels[0];\n var firstBBox = first.getBBox();\n var second = labels[1];\n var count = labels.length;\n var angle = getRotateAngle(first);\n var distance = isVertical ? Math.abs(second.attr('y') - first.attr('y')) : Math.abs(second.attr('x') - first.attr('x'));\n var interval = 0; // 不重叠的坐标文本间距个数\n\n if (isVertical) {\n // 垂直的坐标轴计算垂直方向的间距\n var ratio = Math.abs(Math.cos(angle));\n\n if ((0, _util.near)(ratio, 0, Math.PI / 180)) {\n var maxWidth = (0, _label.getMaxLabelWidth)(labels);\n interval = (maxWidth + minGap) / distance;\n } else {\n interval = (firstBBox.height / ratio + minGap) / distance;\n }\n } else {\n // 水平坐标轴\n var ratio = Math.abs(Math.sin(angle));\n\n if ((0, _util.near)(ratio, 0, Math.PI / 180)) {\n var maxWidth = (0, _label.getMaxLabelWidth)(labels);\n interval = (maxWidth + minGap) / distance;\n } else {\n interval = (firstBBox.height / ratio + minGap) / distance;\n }\n } // interval > 1 时需要对 label 进行隐藏\n\n\n if (interval > 1) {\n interval = Math.ceil(interval);\n\n for (var i = 0; i < count; i++) {\n if (i % interval !== 0) {\n // 仅保留被整除的 label\n labels[i].hide();\n hasHide = true;\n }\n }\n }\n\n return hasHide;\n}\n\nfunction getDefault() {\n return equidistance;\n}\n/**\n * 保证首个 label 可见,即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical 是否垂直\n * @param {IGroup} labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制,autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\n\n\nfunction reserveFirst(isVertical, labelsGroup, limitLength, autoHideCfg) {\n return reserveOne(isVertical, labelsGroup, false, autoHideCfg);\n}\n/**\n * 保证最后一个 label 可见,即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical 是否垂直\n * @param {IGroup} labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制,autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\n\n\nfunction reserveLast(isVertical, labelsGroup, limitLength, autoHideCfg) {\n return reserveOne(isVertical, labelsGroup, true, autoHideCfg);\n}\n/**\n * 保证第一个最后一个 label 可见,即使超过 limitLength 也不隐藏\n * @param {boolean} isVertical 是否垂直\n * @param {IGroup} labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制,autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\n\n\nfunction reserveBoth(isVertical, labelsGroup, limitLength, autoHideCfg) {\n var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0;\n var labels = labelsGroup.getChildren().slice(); // 复制数组\n\n if (labels.length <= 2) {\n // 如果数量小于或等于 2 则直接返回\n return false;\n }\n\n var hasHide = false;\n var count = labels.length;\n var first = labels[0];\n var last = labels[count - 1];\n var preLabel = first; // 按照先保存第一个的逻辑循环一遍,最后一个不参与循环\n\n for (var i = 1; i < count - 1; i++) {\n var label = labels[i];\n var curBBox = label.getBBox(); // 废弃 isOutLimit(isVertical, label, limitLength) ||\n\n var isHide = isOverlap(isVertical, preLabel, label, minGap);\n\n if (isHide) {\n label.hide();\n hasHide = true;\n } else {\n preLabel = label;\n }\n }\n\n var overlap = isOverlap(isVertical, preLabel, last, minGap);\n\n if (overlap) {\n // 发生冲突,则隐藏前一个保留后一个\n preLabel.hide();\n hasHide = true;\n }\n\n return hasHide;\n}\n/**\n * 保证 label 均匀显示 和 不出现重叠,主要解决文本层叠的问题,对于 limitLength 不处理\n * @param {boolean} isVertical 是否垂直\n * @param {IGroup} labelsGroup label 的分组\n * @param {number} limitLength 另一个方向的长度限制,autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\n\n\nfunction equidistance(isVertical, labelsGroup, limitLength, autoHideCfg) {\n var hasHide = parityHide(isVertical, labelsGroup, autoHideCfg); // 处理 timeCat 类型的 tick,在均匀的基础上,再次检查出现重叠的进行隐藏\n\n if (reserveOne(isVertical, labelsGroup, false)) {\n hasHide = true;\n }\n\n return hasHide;\n}\n/**\n * 同 equidistance, 首先会保证 labels 均匀显示,然后会保留首尾\n * @param isVertical\n * @param labelsGroup\n * @param {number} limitLength 另一个方向的长度限制,autoHide 不关心\n * @param {AxisLabelAutoHideCfg} autoHideCfg autoHide overlap 的可选配置参数\n */\n\n\nfunction equidistanceWithReverseBoth(isVertical, labelsGroup, limitLength, autoHideCfg) {\n var labels = labelsGroup.getChildren().slice(); // 复制数组\n\n var hasHide = parityHide(isVertical, labelsGroup, autoHideCfg);\n\n if (labels.length > 2) {\n var first = labels[0];\n var last = labels[labels.length - 1]; // 如果第一个被隐藏了\n\n if (!first.get('visible')) {\n first.show();\n\n if (reserveOne(isVertical, labelsGroup, false, autoHideCfg)) {\n hasHide = true;\n }\n } // 如果最后一个被隐藏了\n\n\n if (!last.get('visible')) {\n last.show();\n\n if (reserveOne(isVertical, labelsGroup, true, autoHideCfg)) {\n hasHide = true;\n }\n }\n }\n\n return hasHide;\n}\n\n/***/ }),\n/* 826 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefault = getDefault;\nexports.fixedAngle = fixedAngle;\nexports.unfixedAngle = unfixedAngle;\n\nvar _util = __webpack_require__(0);\n\nvar _label = __webpack_require__(140);\n\nvar _matrix = __webpack_require__(87);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\n// 统一设置文本的角度\nfunction setLabelsAngle(labels, angle) {\n (0, _util.each)(labels, function (label) {\n var x = label.attr('x');\n var y = label.attr('y');\n var matrix = (0, _matrix.getMatrixByAngle)({\n x: x,\n y: y\n }, angle);\n label.attr('matrix', matrix);\n });\n} // 旋转文本\n\n\nfunction labelRotate(isVertical, labelsGroup, limitLength, getAngle) {\n var labels = labelsGroup.getChildren();\n\n if (!labels.length) {\n return false;\n }\n\n if (!isVertical && labels.length < 2) {\n // 水平时至少有两个时才旋转\n return false;\n }\n\n var maxWidth = (0, _label.getMaxLabelWidth)(labels);\n var isOverlap = false;\n\n if (isVertical) {\n // limitLength 为 0 或者 null 时不生效\n isOverlap = !!limitLength && maxWidth > limitLength;\n } else {\n // 同 limitLength 无关\n var tickWidth = Math.abs(labels[1].attr('x') - labels[0].attr('x'));\n isOverlap = maxWidth > tickWidth;\n }\n\n if (isOverlap) {\n var angle = getAngle(limitLength, maxWidth);\n setLabelsAngle(labels, angle);\n }\n\n return isOverlap;\n}\n\nfunction getDefault() {\n return fixedAngle;\n}\n/**\n * 固定角度旋转文本\n * @param {boolean} isVertical 是否垂直方向\n * @param {IGroup} labelsGroup 文本的 group\n * @param {number} limitLength 限定长度\n * @param {number} customRotate 自定义旋转角度\n * @return {boolean} 是否发生了旋转\n */\n\n\nfunction fixedAngle(isVertical, labelsGroup, limitLength, customRotate) {\n return labelRotate(isVertical, labelsGroup, limitLength, function () {\n if ((0, _util.isNumber)(customRotate)) {\n return customRotate;\n }\n\n return isVertical ? _theme.default.verticalAxisRotate : _theme.default.horizontalAxisRotate;\n });\n}\n/**\n * 非固定角度旋转文本\n * @param {boolean} isVertical 是否垂直方向\n * @param {IGroup} labelsGroup 文本的 group\n * @param {number} limitLength 限定长度\n * @return {boolean} 是否发生了旋转\n */\n\n\nfunction unfixedAngle(isVertical, labelsGroup, limitLength) {\n return labelRotate(isVertical, labelsGroup, limitLength, function (length, maxWidth) {\n if (!length) {\n // 如果没有设置 limitLength,则使用固定的角度旋转\n return isVertical ? _theme.default.verticalAxisRotate : _theme.default.horizontalAxisRotate;\n }\n\n if (isVertical) {\n // 垂直时不需要判定 limitLength > maxWidth ,因为此时不会 overlap\n return -Math.acos(length / maxWidth);\n } else {\n var angle = 0;\n\n if (length > maxWidth) {\n // 需要判定,asin 的参数 -1, 1\n angle = Math.PI / 4;\n } else {\n angle = Math.asin(length / maxWidth);\n\n if (angle > Math.PI / 4) {\n // 大于 Math.PI / 4 时没意义\n angle = Math.PI / 4;\n }\n }\n\n return angle;\n }\n });\n}\n\n/***/ }),\n/* 827 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _matrixUtil = __webpack_require__(33);\n\nvar _base = _interopRequireDefault(__webpack_require__(254));\n\nvar Circle =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Circle, _super);\n\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Circle.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'circle',\n locationType: 'circle',\n center: null,\n radius: null,\n startAngle: -Math.PI / 2,\n endAngle: Math.PI * 3 / 2\n });\n };\n\n Circle.prototype.getLinePath = function () {\n var center = this.get('center');\n var x = center.x;\n var y = center.y;\n var rx = this.get('radius');\n var ry = rx;\n var startAngle = this.get('startAngle');\n var endAngle = this.get('endAngle');\n var path = [];\n\n if (Math.abs(endAngle - startAngle) === Math.PI * 2) {\n path = [['M', x, y - ry], ['A', rx, ry, 0, 1, 1, x, y + ry], ['A', rx, ry, 0, 1, 1, x, y - ry], ['Z']];\n } else {\n var startPoint = this.getCirclePoint(startAngle);\n var endPoint = this.getCirclePoint(endAngle);\n var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;\n var sweep = startAngle > endAngle ? 0 : 1;\n path = [['M', x, y], ['L', startPoint.x, startPoint.y], ['A', rx, ry, 0, large, sweep, endPoint.x, endPoint.y], ['L', x, y]];\n }\n\n return path;\n };\n\n Circle.prototype.getTickPoint = function (tickValue) {\n var startAngle = this.get('startAngle');\n var endAngle = this.get('endAngle');\n var angle = startAngle + (endAngle - startAngle) * tickValue;\n return this.getCirclePoint(angle);\n }; // 获取垂直于坐标轴的向量\n\n\n Circle.prototype.getSideVector = function (offset, point) {\n var center = this.get('center');\n var vector = [point.x - center.x, point.y - center.y];\n var factor = this.get('verticalFactor');\n\n var vecLen = _matrixUtil.vec2.length(vector);\n\n _matrixUtil.vec2.scale(vector, vector, factor * offset / vecLen);\n\n return vector;\n }; // 获取沿坐标轴方向的向量\n\n\n Circle.prototype.getAxisVector = function (point) {\n var center = this.get('center');\n var vector = [point.x - center.x, point.y - center.y];\n return [vector[1], -1 * vector[0]]; // 获取顺时针方向的向量\n }; // 根据圆心和半径获取点\n\n\n Circle.prototype.getCirclePoint = function (angle, radius) {\n var center = this.get('center');\n radius = radius || this.get('radius');\n return {\n x: center.x + Math.cos(angle) * radius,\n y: center.y + Math.sin(angle) * radius\n };\n };\n\n return Circle;\n}(_base.default);\n\nvar _default = Circle;\nexports.default = _default;\n\n/***/ }),\n/* 828 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Line\", {\n enumerable: true,\n get: function get() {\n return _line.default;\n }\n});\nObject.defineProperty(exports, \"Circle\", {\n enumerable: true,\n get: function get() {\n return _circle.default;\n }\n});\nObject.defineProperty(exports, \"Base\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\nObject.defineProperty(exports, \"Html\", {\n enumerable: true,\n get: function get() {\n return _html.default;\n }\n});\n\nvar _line = _interopRequireDefault(__webpack_require__(829));\n\nvar _circle = _interopRequireDefault(__webpack_require__(830));\n\nvar _base = _interopRequireDefault(__webpack_require__(255));\n\nvar _html = _interopRequireDefault(__webpack_require__(831));\n\n/***/ }),\n/* 829 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(44);\n\nvar _base = _interopRequireDefault(__webpack_require__(255));\n\nvar LineCrosshair =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(LineCrosshair, _super);\n\n function LineCrosshair() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n LineCrosshair.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'line',\n locationType: 'region',\n start: null,\n end: null\n });\n }; // 直线的文本需要同直线垂直\n\n\n LineCrosshair.prototype.getRotateAngle = function () {\n var _a = this.getLocation(),\n start = _a.start,\n end = _a.end;\n\n var position = this.get('text').position;\n var angle = Math.atan2(end.y - start.y, end.x - start.x);\n var tangentAngle = position === 'start' ? angle - Math.PI / 2 : angle + Math.PI / 2;\n return tangentAngle;\n };\n\n LineCrosshair.prototype.getTextPoint = function () {\n var _a = this.getLocation(),\n start = _a.start,\n end = _a.end;\n\n var _b = this.get('text'),\n position = _b.position,\n offset = _b.offset;\n\n return (0, _util.getTextPoint)(start, end, position, offset);\n };\n\n LineCrosshair.prototype.getLinePath = function () {\n var _a = this.getLocation(),\n start = _a.start,\n end = _a.end;\n\n return [['M', start.x, start.y], ['L', end.x, end.y]];\n };\n\n return LineCrosshair;\n}(_base.default);\n\nvar _default = LineCrosshair;\nexports.default = _default;\n\n/***/ }),\n/* 830 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(44);\n\nvar _base = _interopRequireDefault(__webpack_require__(255));\n\nvar LineCrosshair =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(LineCrosshair, _super);\n\n function LineCrosshair() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n LineCrosshair.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'circle',\n locationType: 'circle',\n center: null,\n radius: 100,\n startAngle: -Math.PI / 2,\n endAngle: Math.PI * 3 / 2\n });\n };\n\n LineCrosshair.prototype.getRotateAngle = function () {\n var _a = this.getLocation(),\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var position = this.get('text').position;\n var tangentAngle = position === 'start' ? startAngle + Math.PI / 2 : endAngle - Math.PI / 2;\n return tangentAngle;\n };\n\n LineCrosshair.prototype.getTextPoint = function () {\n var text = this.get('text');\n var position = text.position,\n offset = text.offset;\n\n var _a = this.getLocation(),\n center = _a.center,\n radius = _a.radius,\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var angle = position === 'start' ? startAngle : endAngle;\n var tangentAngle = this.getRotateAngle() - Math.PI;\n var point = (0, _util.getCirclePoint)(center, radius, angle); // 这个地方其实应该求切线向量然后在乘以 offset,但是太啰嗦了,直接给出结果\n // const tangent = [Math.cos(tangentAngle), Math.sin(tangentAngle)];\n // const offsetVector = vec2.scale([], tangent, offset);\n\n var offsetX = Math.cos(tangentAngle) * offset;\n var offsetY = Math.sin(tangentAngle) * offset;\n return {\n x: point.x + offsetX,\n y: point.y + offsetY\n };\n };\n\n LineCrosshair.prototype.getLinePath = function () {\n var _a = this.getLocation(),\n center = _a.center,\n radius = _a.radius,\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var path = null;\n\n if (endAngle - startAngle === Math.PI * 2) {\n // 整圆\n var x = center.x,\n y = center.y;\n path = [['M', x, y - radius], ['A', radius, radius, 0, 1, 1, x, y + radius], ['A', radius, radius, 0, 1, 1, x, y - radius], ['Z']];\n } else {\n var startPoint = (0, _util.getCirclePoint)(center, radius, startAngle);\n var endPoint = (0, _util.getCirclePoint)(center, radius, endAngle);\n var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;\n var sweep = startAngle > endAngle ? 0 : 1;\n path = [['M', startPoint.x, startPoint.y], ['A', radius, radius, 0, large, sweep, endPoint.x, endPoint.y]];\n }\n\n return path;\n };\n\n return LineCrosshair;\n}(_base.default);\n\nvar _default = LineCrosshair;\nexports.default = _default;\n\n/***/ }),\n/* 831 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _domUtil = __webpack_require__(112);\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = __webpack_require__(44);\n\nvar _htmlComponent = _interopRequireDefault(__webpack_require__(186));\n\nvar CssConst = _interopRequireWildcard(__webpack_require__(425));\n\nvar _htmlTheme = _interopRequireDefault(__webpack_require__(832));\n\nvar HtmlCrosshair =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(HtmlCrosshair, _super);\n\n function HtmlCrosshair() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n HtmlCrosshair.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'crosshair',\n type: 'html',\n locationType: 'region',\n start: {\n x: 0,\n y: 0\n },\n end: {\n x: 0,\n y: 0\n },\n capture: false,\n text: null,\n containerTpl: \"\",\n crosshairTpl: \"\",\n textTpl: \"{content}\",\n domStyles: null,\n containerClassName: CssConst.CONTAINER_CLASS,\n defaultStyles: _htmlTheme.default,\n defaultCfg: {\n text: {\n position: 'start',\n content: null,\n align: 'center',\n offset: 10\n }\n }\n });\n };\n\n HtmlCrosshair.prototype.render = function () {\n this.resetText();\n this.resetPosition();\n }; // 绘制 crosshair\n\n\n HtmlCrosshair.prototype.initCrossHair = function () {\n var container = this.getContainer();\n var crosshairTpl = this.get('crosshairTpl');\n var crosshairEl = (0, _domUtil.createDom)(crosshairTpl);\n container.appendChild(crosshairEl);\n this.applyStyle(CssConst.CROSSHAIR_LINE, crosshairEl);\n this.set('crosshairEl', crosshairEl);\n }; // 获取文本的位置\n\n\n HtmlCrosshair.prototype.getTextPoint = function () {\n var _a = this.getLocation(),\n start = _a.start,\n end = _a.end;\n\n var _b = this.get('text'),\n position = _b.position,\n offset = _b.offset;\n\n return (0, _util2.getTextPoint)(start, end, position, offset);\n }; // 设置 text\n\n\n HtmlCrosshair.prototype.resetText = function () {\n var text = this.get('text');\n var textEl = this.get('textEl');\n\n if (text) {\n var content = text.content;\n\n if (!textEl) {\n var container = this.getContainer();\n var textTpl = (0, _util.substitute)(this.get('textTpl'), text);\n textEl = (0, _domUtil.createDom)(textTpl);\n container.appendChild(textEl);\n this.applyStyle(CssConst.CROSSHAIR_TEXT, textEl);\n this.set('textEl', textEl);\n }\n\n textEl.innerHTML = content;\n } else if (textEl) {\n textEl.remove();\n }\n }; // 是否垂直\n\n\n HtmlCrosshair.prototype.isVertical = function (start, end) {\n return start.x === end.x;\n }; // 重新调整位置\n\n\n HtmlCrosshair.prototype.resetPosition = function () {\n var crosshairEl = this.get('crosshairEl');\n\n if (!crosshairEl) {\n this.initCrossHair();\n crosshairEl = this.get('crosshairEl');\n }\n\n var start = this.get('start');\n var end = this.get('end');\n var minX = Math.min(start.x, end.x);\n var minY = Math.min(start.y, end.y);\n\n if (this.isVertical(start, end)) {\n (0, _domUtil.modifyCSS)(crosshairEl, {\n width: '1px',\n height: (0, _util2.toPx)(Math.abs(end.y - start.y))\n });\n } else {\n (0, _domUtil.modifyCSS)(crosshairEl, {\n height: '1px',\n width: (0, _util2.toPx)(Math.abs(end.x - start.x))\n });\n }\n\n (0, _domUtil.modifyCSS)(crosshairEl, {\n top: (0, _util2.toPx)(minY),\n left: (0, _util2.toPx)(minX)\n });\n this.alignText();\n };\n\n HtmlCrosshair.prototype.alignText = function () {\n // 重新设置 text 位置\n var textEl = this.get('textEl');\n\n if (textEl) {\n var align = this.get('text').align;\n var clientWidth = textEl.clientWidth;\n var point = this.getTextPoint();\n\n switch (align) {\n case 'center':\n point.x = point.x - clientWidth / 2;\n break;\n\n case 'right':\n point.x = point.x - clientWidth;\n\n case 'left':\n break;\n }\n\n (0, _domUtil.modifyCSS)(textEl, {\n top: (0, _util2.toPx)(point.y),\n left: (0, _util2.toPx)(point.x)\n });\n }\n };\n\n HtmlCrosshair.prototype.updateInner = function (cfg) {\n if ((0, _util.hasKey)(cfg, 'text')) {\n this.resetText();\n }\n\n _super.prototype.updateInner.call(this, cfg);\n };\n\n return HtmlCrosshair;\n}(_htmlComponent.default);\n\nvar _default = HtmlCrosshair;\nexports.default = _default;\n\n/***/ }),\n/* 832 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar CssConst = _interopRequireWildcard(__webpack_require__(425));\n\nvar _a;\n\nvar _default = (_a = {}, // css style for tooltip\n_a[\"\" + CssConst.CONTAINER_CLASS] = {\n position: 'relative'\n}, _a[\"\" + CssConst.CROSSHAIR_LINE] = {\n position: 'absolute',\n backgroundColor: 'rgba(0, 0, 0, 0.25)'\n}, _a[\"\" + CssConst.CROSSHAIR_TEXT] = {\n position: 'absolute',\n color: _theme.default.textColor,\n fontFamily: _theme.default.fontFamily\n}, _a);\n\nexports.default = _default;\n\n/***/ }),\n/* 833 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Base\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\nObject.defineProperty(exports, \"Circle\", {\n enumerable: true,\n get: function get() {\n return _circle.default;\n }\n});\nObject.defineProperty(exports, \"Line\", {\n enumerable: true,\n get: function get() {\n return _line.default;\n }\n});\n\nvar _base = _interopRequireDefault(__webpack_require__(256));\n\nvar _circle = _interopRequireDefault(__webpack_require__(834));\n\nvar _line = _interopRequireDefault(__webpack_require__(835));\n\n/***/ }),\n/* 834 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(256));\n\nfunction distance(x1, y1, x2, y2) {\n var dx = x2 - x1;\n var dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nvar Circle =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Circle, _super);\n\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Circle.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'circle',\n\n /**\n * 中心点\n * @type {object}\n */\n center: null,\n\n /**\n * 栅格线是否封闭\n * @type {true}\n */\n closed: true\n });\n };\n\n Circle.prototype.getGridPath = function (points, reversed) {\n var lineType = this.getLineType();\n var closed = this.get('closed');\n var path = [];\n\n if (points.length) {\n // 防止出错\n if (lineType === 'circle') {\n var center = this.get('center');\n var firstPoint = points[0];\n var radius_1 = distance(center.x, center.y, firstPoint.x, firstPoint.y);\n var sweepFlag_1 = reversed ? 0 : 1; // 顺时针还是逆时针\n\n if (closed) {\n // 封闭时,绘制整个圆\n path.push(['M', center.x, center.y - radius_1]);\n path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, center.x, center.y + radius_1]);\n path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, center.x, center.y - radius_1]);\n path.push(['Z']);\n } else {\n (0, _util.each)(points, function (point, index) {\n if (index === 0) {\n path.push(['M', point.x, point.y]);\n } else {\n path.push(['A', radius_1, radius_1, 0, 0, sweepFlag_1, point.x, point.y]);\n }\n });\n }\n } else {\n (0, _util.each)(points, function (point, index) {\n if (index === 0) {\n path.push(['M', point.x, point.y]);\n } else {\n path.push(['L', point.x, point.y]);\n }\n });\n\n if (closed) {\n path.push(['Z']);\n }\n }\n }\n\n return path;\n };\n\n return Circle;\n}(_base.default);\n\nvar _default = Circle;\nexports.default = _default;\n\n/***/ }),\n/* 835 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(256));\n\nvar Line =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Line, _super);\n\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Line.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'line'\n });\n };\n\n Line.prototype.getGridPath = function (points) {\n var path = [];\n (0, _util.each)(points, function (point, index) {\n if (index === 0) {\n path.push(['M', point.x, point.y]);\n } else {\n path.push(['L', point.x, point.y]);\n }\n });\n return path;\n };\n\n return Line;\n}(_base.default);\n\nvar _default = Line;\nexports.default = _default;\n\n/***/ }),\n/* 836 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Category\", {\n enumerable: true,\n get: function get() {\n return _category.default;\n }\n});\nObject.defineProperty(exports, \"Continuous\", {\n enumerable: true,\n get: function get() {\n return _continuous.default;\n }\n});\nObject.defineProperty(exports, \"Base\", {\n enumerable: true,\n get: function get() {\n return _base.default;\n }\n});\n\nvar _category = _interopRequireDefault(__webpack_require__(837));\n\nvar _continuous = _interopRequireDefault(__webpack_require__(838));\n\nvar _base = _interopRequireDefault(__webpack_require__(257));\n\n/***/ }),\n/* 837 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _label = __webpack_require__(140);\n\nvar _matrix = __webpack_require__(87);\n\nvar _state = __webpack_require__(424);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar _base = _interopRequireDefault(__webpack_require__(257));\n\nvar Category =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Category, _super);\n\n function Category() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.currentPageIndex = 1;\n _this.totalPagesCnt = 1;\n _this.pageWidth = 0;\n _this.pageHeight = 0;\n _this.startX = 0;\n _this.startY = 0;\n\n _this.onNavigationBack = function () {\n var itemGroup = _this.getElementByLocalId('item-group');\n\n if (_this.currentPageIndex > 1) {\n _this.currentPageIndex -= 1;\n\n _this.updateNavigation();\n\n var matrix = _this.getCurrentNavigationMatrix();\n\n if (_this.get('animate')) {\n itemGroup.animate({\n matrix: matrix\n }, 100);\n } else {\n itemGroup.attr({\n matrix: matrix\n });\n }\n }\n };\n\n _this.onNavigationAfter = function () {\n var itemGroup = _this.getElementByLocalId('item-group');\n\n if (_this.currentPageIndex < _this.totalPagesCnt) {\n _this.currentPageIndex += 1;\n\n _this.updateNavigation();\n\n var matrix = _this.getCurrentNavigationMatrix();\n\n if (_this.get('animate')) {\n itemGroup.animate({\n matrix: matrix\n }, 100);\n } else {\n itemGroup.attr({\n matrix: matrix\n });\n }\n }\n };\n\n return _this;\n }\n\n Category.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'legend',\n type: 'category',\n itemSpacing: 24,\n itemMarginBottom: 8,\n maxItemWidth: null,\n itemWidth: null,\n itemHeight: null,\n itemName: {},\n itemValue: null,\n maxWidth: null,\n maxHeight: null,\n marker: {},\n items: [],\n itemStates: {},\n itemBackground: {},\n defaultCfg: {\n title: {\n spacing: 5,\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'top'\n }\n },\n background: {\n padding: 5,\n style: {\n stroke: _theme.default.lineColor\n }\n },\n itemBackground: {\n style: {\n opacity: 0,\n fill: '#fff'\n }\n },\n itemName: {\n spacing: 16,\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'middle'\n }\n },\n marker: {\n spacing: 8,\n style: {\n r: 6,\n symbol: 'circle'\n }\n },\n itemValue: {\n alignRight: false,\n formatter: null,\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'middle'\n }\n },\n itemStates: {\n active: {\n nameStyle: {\n opacity: 0.8\n }\n },\n unchecked: {\n nameStyle: {\n fill: _theme.default.uncheckedColor\n },\n markerStyle: {\n fill: _theme.default.uncheckedColor,\n stroke: _theme.default.uncheckedColor\n }\n },\n inactive: {\n nameStyle: {\n fill: _theme.default.uncheckedColor\n },\n markerStyle: {\n opacity: 0.2\n }\n }\n }\n }\n });\n }; // 实现 IList 接口\n\n\n Category.prototype.isList = function () {\n return true;\n };\n /**\n * 获取图例项\n * @return {ListItem[]} 列表项集合\n */\n\n\n Category.prototype.getItems = function () {\n return this.get('items');\n };\n /**\n * 设置列表项\n * @param {ListItem[]} items 列表项集合\n */\n\n\n Category.prototype.setItems = function (items) {\n this.update({\n items: items\n });\n };\n /**\n * 更新列表项\n * @param {ListItem} item 列表项\n * @param {object} cfg 列表项\n */\n\n\n Category.prototype.updateItem = function (item, cfg) {\n (0, _util.mix)(item, cfg);\n this.clear(); // 由于单个图例项变化,会引起全局变化,所以全部更新\n\n this.render();\n };\n /**\n * 清空列表\n */\n\n\n Category.prototype.clearItems = function () {\n var itemGroup = this.getElementByLocalId('item-group');\n itemGroup && itemGroup.clear();\n };\n /**\n * 设置列表项的状态\n * @param {ListItem} item 列表项\n * @param {string} state 状态名\n * @param {boolean} value 状态值, true, false\n */\n\n\n Category.prototype.setItemState = function (item, state, value) {\n item[state] = value;\n var itemElement = this.getElementByLocalId(\"item-\" + item.id);\n\n if (itemElement) {\n var items = this.getItems();\n var index = items.indexOf(item);\n var offsetGroup = this.createOffScreenGroup(); // 离屏的 group\n\n var newElement = this.drawItem(item, index, this.getItemHeight(), offsetGroup);\n this.updateElements(newElement, itemElement); // 更新整个分组\n\n this.clearUpdateStatus(itemElement); // 清理更新状态,防止出现 bug\n }\n };\n /**\n * 是否存在指定的状态\n * @param {ListItem} item 列表项\n * @param {boolean} state 状态名\n */\n\n\n Category.prototype.hasState = function (item, state) {\n return !!item[state];\n };\n\n Category.prototype.getItemStates = function (item) {\n var itemStates = this.get('itemStates');\n var rst = [];\n (0, _util.each)(itemStates, function (v, k) {\n if (item[k]) {\n // item.selected\n rst.push(k);\n }\n });\n return rst;\n };\n /**\n * 清楚所有列表项的状态\n * @param {string} state 状态值\n */\n\n\n Category.prototype.clearItemsState = function (state) {\n var _this = this;\n\n var items = this.getItemsByState(state);\n (0, _util.each)(items, function (item) {\n _this.setItemState(item, state, false);\n });\n };\n /**\n * 根据状态获取图例项\n * @param {string} state [description]\n * @return {ListItem[]} [description]\n */\n\n\n Category.prototype.getItemsByState = function (state) {\n var _this = this;\n\n var items = this.getItems();\n return (0, _util.filter)(items, function (item) {\n return _this.hasState(item, state);\n });\n }; // 绘制 legend 的选项\n\n\n Category.prototype.drawLegendContent = function (group) {\n this.processItems();\n this.drawItems(group);\n }; // 防止未设置 id\n\n\n Category.prototype.processItems = function () {\n var items = this.get('items');\n (0, _util.each)(items, function (item) {\n if (!item.id) {\n // 如果没有设置 id,默认使用 name\n item.id = item.name;\n }\n });\n }; // 绘制所有的图例选项\n\n\n Category.prototype.drawItems = function (group) {\n var _this = this;\n\n var itemContainerGroup = this.addGroup(group, {\n id: this.getElementId('item-container-group'),\n name: 'legend-item-container-group'\n });\n var itemGroup = this.addGroup(itemContainerGroup, {\n id: this.getElementId('item-group'),\n name: 'legend-item-group'\n });\n var itemHeight = this.getItemHeight();\n var itemWidth = this.get('itemWidth');\n var itemSpacing = this.get('itemSpacing');\n var itemMarginBottom = this.get('itemMarginBottom');\n var currentPoint = this.get('currentPoint');\n var startX = currentPoint.x;\n var startY = currentPoint.y;\n var layout = this.get('layout');\n var items = this.get('items');\n var wrapped = false;\n var pageWidth = 0;\n var maxWidth = this.get('maxWidth'); // 最大宽度,会导致 layout : 'horizontal' 时自动换行\n\n var maxHeight = this.get('maxHeight'); // 最大高度,会导致出现分页\n // 暂时不考虑分页\n\n (0, _util.each)(items, function (item, index) {\n var subGroup = _this.drawItem(item, index, itemHeight, itemGroup);\n\n var bbox = subGroup.getBBox();\n var width = itemWidth || bbox.width;\n\n if (width > pageWidth) {\n pageWidth = width;\n }\n\n if (layout === 'horizontal') {\n // 如果水平布局\n if (maxWidth && maxWidth < currentPoint.x + width - startX) {\n // 检测是否换行\n wrapped = true;\n currentPoint.x = startX;\n currentPoint.y += itemHeight + itemMarginBottom;\n }\n\n _this.moveElementTo(subGroup, currentPoint);\n\n currentPoint.x += width + itemSpacing;\n } else {\n // 如果垂直布局\n if (maxHeight && maxHeight < currentPoint.y + itemHeight + itemMarginBottom - startY) {\n // 换行\n wrapped = true;\n currentPoint.x += pageWidth + itemSpacing;\n currentPoint.y = startY;\n pageWidth = 0;\n }\n\n _this.moveElementTo(subGroup, currentPoint);\n\n currentPoint.y += itemHeight + itemMarginBottom; // itemSpacing 仅影响水平间距\n }\n });\n\n if (wrapped && this.get('flipPage')) {\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.totalPagesCnt = 1;\n this.startX = startX;\n this.startY = startY;\n this.adjustNavigation(group, itemGroup);\n }\n }; // 获取图例项的高度,如果未定义,则按照 name 的高度计算\n\n\n Category.prototype.getItemHeight = function () {\n var itemHeight = this.get('itemHeight');\n\n if (!itemHeight) {\n var nameCfg = this.get('itemName');\n\n if (nameCfg) {\n itemHeight = nameCfg.style.fontSize;\n }\n }\n\n return itemHeight;\n }; // 绘制 marker\n\n\n Category.prototype.drawMarker = function (container, markerCfg, item, itemHeight) {\n var markerAttrs = (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({\n x: 0,\n y: itemHeight / 2\n }, markerCfg.style), {\n symbol: (0, _util.get)(item.marker, 'symbol', 'circle')\n }), (0, _util.get)(item.marker, 'style', {}));\n var shape = this.addShape(container, {\n type: 'marker',\n id: this.getElementId(\"item-\" + item.id + \"-marker\"),\n name: 'legend-item-marker',\n attrs: markerAttrs\n });\n var bbox = shape.getBBox();\n shape.attr('x', bbox.width / 2); // marker 需要左对齐,所以不能占用左侧的空间\n\n var _a = shape.attr(),\n stroke = _a.stroke,\n fill = _a.fill;\n\n if (stroke) {\n shape.set('isStroke', true);\n }\n\n if (fill) {\n shape.set('isFill', true);\n }\n\n return shape;\n }; // 绘制文本\n\n\n Category.prototype.drawItemText = function (container, textName, cfg, item, itemHeight, xPosition, index) {\n var formatter = cfg.formatter;\n var attrs = (0, _tslib.__assign)({\n x: xPosition,\n y: itemHeight / 2,\n text: formatter ? formatter(item[textName], item, index) : item[textName]\n }, cfg.style);\n return this.addShape(container, {\n type: 'text',\n id: this.getElementId(\"item-\" + item.id + \"-\" + textName),\n name: \"legend-item-\" + textName,\n attrs: attrs\n });\n }; // 绘制图例项\n\n\n Category.prototype.drawItem = function (item, index, itemHeight, itemGroup) {\n var groupId = \"item-\" + item.id; // 设置单独的 Group 用于 setClip\n\n var subContainer = this.addGroup(itemGroup, {\n name: 'legend-item-container',\n id: this.getElementId(\"item-container-\" + groupId),\n delegateObject: {\n item: item,\n index: index\n }\n });\n var subGroup = this.addGroup(subContainer, {\n name: 'legend-item',\n id: this.getElementId(groupId),\n delegateObject: {\n item: item,\n index: index\n }\n });\n var marker = this.get('marker');\n var itemName = this.get('itemName');\n var itemValue = this.get('itemValue');\n var itemBackground = this.get('itemBackground');\n var itemWidth = this.getLimitItemWidth();\n var curX = 0; // 记录当前 x 的位置\n\n if (marker) {\n var markerShape = this.drawMarker(subGroup, marker, item, itemHeight);\n curX = markerShape.getBBox().maxX + marker.spacing;\n }\n\n if (itemName) {\n var nameShape = this.drawItemText(subGroup, 'name', itemName, item, itemHeight, curX, index);\n\n if (itemWidth) {\n // 设置了 item 的最大宽度限制,并且超出了,进行省略处理\n (0, _label.ellipsisLabel)(true, nameShape, (0, _util.clamp)(itemWidth - curX, 0, itemWidth));\n }\n\n curX = nameShape.getBBox().maxX + itemName.spacing;\n }\n\n if (itemValue) {\n var valueShape = this.drawItemText(subGroup, 'value', itemValue, item, itemHeight, curX, index);\n\n if (itemWidth) {\n if (itemValue.alignRight) {\n valueShape.attr({\n textAlign: 'right',\n x: itemWidth\n });\n (0, _label.ellipsisLabel)(true, valueShape, (0, _util.clamp)(itemWidth - curX, 0, itemWidth), 'head');\n } else {\n (0, _label.ellipsisLabel)(true, valueShape, (0, _util.clamp)(itemWidth - curX, 0, itemWidth));\n }\n }\n } // 添加透明的背景,便于拾取和包围盒计算\n\n\n if (itemBackground) {\n var bbox = subGroup.getBBox();\n var backShape = this.addShape(subGroup, {\n type: 'rect',\n name: 'legend-item-background',\n id: this.getElementId(groupId + \"-background\"),\n attrs: (0, _tslib.__assign)({\n x: 0,\n y: 0,\n width: bbox.width,\n height: itemHeight\n }, itemBackground.style)\n });\n backShape.toBack();\n }\n\n this.applyItemStates(item, subGroup);\n return subGroup;\n }; // 加上分页器并重新排序 items\n\n\n Category.prototype.adjustNavigation = function (container, itemGroup) {\n var _this = this;\n\n var startX = this.startX;\n var startY = this.startY;\n var layout = this.get('layout');\n var subGroups = itemGroup.findAll(function (item) {\n return item.get('name') === 'legend-item';\n });\n var maxWidth = this.get('maxWidth');\n var maxHeight = this.get('maxHeight');\n var itemWidth = this.get('itemWidth');\n var itemSpacing = this.get('itemSpacing');\n var itemHeight = this.getItemHeight();\n var navigation = this.drawNavigation(container, layout, '00/00', 12);\n var navigationBBox = navigation.getBBox();\n var currentPoint = {\n x: startX,\n y: startY\n };\n var pages = 1;\n var widthLimit = 0;\n var pageWidth = 0;\n var maxItemWidth = 0;\n\n if (layout === 'horizontal') {\n this.pageHeight = itemHeight;\n (0, _util.each)(subGroups, function (item) {\n var bbox = item.getBBox();\n var width = itemWidth || bbox.width;\n\n if (widthLimit && widthLimit < currentPoint.x + width + itemSpacing || maxWidth < currentPoint.x + width + itemSpacing + navigationBBox.width) {\n if (pages === 1) {\n widthLimit = currentPoint.x + itemSpacing;\n _this.pageWidth = widthLimit;\n\n _this.moveElementTo(navigation, {\n x: maxWidth - itemSpacing - navigationBBox.width - navigationBBox.minX,\n y: currentPoint.y + itemHeight / 2 - navigationBBox.height / 2 - navigationBBox.minY\n });\n }\n\n pages += 1;\n currentPoint.x = startX;\n currentPoint.y += itemHeight;\n }\n\n _this.moveElementTo(item, currentPoint);\n\n item.getParent().setClip({\n type: 'rect',\n attrs: {\n x: currentPoint.x,\n y: currentPoint.y,\n width: width + itemSpacing,\n height: itemHeight\n }\n });\n currentPoint.x += width + itemSpacing;\n });\n } else {\n var itemMarginBottom_1 = this.get('itemMarginBottom');\n (0, _util.each)(subGroups, function (item) {\n var bbox = item.getBBox();\n\n if (bbox.width > pageWidth) {\n pageWidth = bbox.width;\n }\n });\n maxItemWidth = pageWidth;\n pageWidth += itemSpacing;\n\n if (maxWidth) {\n // maxWidth 限制加上\n pageWidth = Math.min(maxWidth, pageWidth);\n maxItemWidth = Math.min(maxWidth, maxItemWidth);\n }\n\n this.pageWidth = pageWidth;\n this.pageHeight = maxHeight - Math.max(navigationBBox.height, itemHeight + itemMarginBottom_1);\n var cntPerPage_1 = Math.floor(this.pageHeight / (itemHeight + itemMarginBottom_1));\n (0, _util.each)(subGroups, function (item, index) {\n if (index !== 0 && index % cntPerPage_1 === 0) {\n pages += 1;\n currentPoint.x += pageWidth;\n currentPoint.y = startY;\n }\n\n _this.moveElementTo(item, currentPoint);\n\n item.getParent().setClip({\n type: 'rect',\n attrs: {\n x: currentPoint.x,\n y: currentPoint.y,\n width: pageWidth,\n height: itemHeight\n }\n });\n currentPoint.y += itemHeight + itemMarginBottom_1;\n });\n this.totalPagesCnt = pages;\n this.moveElementTo(navigation, {\n x: startX + maxItemWidth / 2 - navigationBBox.width / 2 - navigationBBox.minX,\n y: maxHeight - navigationBBox.height - navigationBBox.minY\n });\n }\n\n if (this.pageHeight && this.pageWidth) {\n // 为了使固定的 clip 生效,clip 设置在 itemContainerGroup 上,itemGroup 需要在翻页时会设置 matrix\n itemGroup.getParent().setClip({\n type: 'rect',\n attrs: {\n x: this.startX,\n y: this.startY,\n width: this.pageWidth,\n height: this.pageHeight\n }\n });\n }\n\n this.totalPagesCnt = pages;\n\n if (this.currentPageIndex > this.totalPagesCnt) {\n this.currentPageIndex = 1;\n }\n\n this.updateNavigation(navigation); // update initial matrix\n\n itemGroup.attr('matrix', this.getCurrentNavigationMatrix());\n };\n\n Category.prototype.drawNavigation = function (group, layout, text, size) {\n var currentPoint = {\n x: 0,\n y: 0\n };\n var subGroup = this.addGroup(group, {\n id: this.getElementId('navigation-group'),\n name: 'legend-navigation'\n });\n var leftArrow = this.drawArrow(subGroup, currentPoint, 'navigation-arrow-left', layout === 'horizontal' ? 'up' : 'left', size);\n leftArrow.on('click', this.onNavigationBack);\n var leftArrowBBox = leftArrow.getBBox();\n currentPoint.x += leftArrowBBox.width + 2;\n var textShape = this.addShape(subGroup, {\n type: 'text',\n id: this.getElementId('navigation-text'),\n name: 'navigation-text',\n attrs: {\n x: currentPoint.x,\n y: currentPoint.y + size / 2,\n text: text,\n fontSize: 12,\n fill: '#ccc',\n textBaseline: 'middle'\n }\n });\n var textBBox = textShape.getBBox();\n currentPoint.x += textBBox.width + 2;\n var rightArrow = this.drawArrow(subGroup, currentPoint, 'navigation-arrow-right', layout === 'horizontal' ? 'down' : 'right', size);\n rightArrow.on('click', this.onNavigationAfter);\n return subGroup;\n };\n\n Category.prototype.updateNavigation = function (navigation) {\n var text = this.currentPageIndex + \"/\" + this.totalPagesCnt;\n var textShape = navigation ? navigation.getChildren()[1] : this.getElementByLocalId('navigation-text');\n var leftArrow = navigation ? navigation.findById(this.getElementId('navigation-arrow-left')) : this.getElementByLocalId('navigation-arrow-left');\n var rightArrow = navigation ? navigation.findById(this.getElementId('navigation-arrow-right')) : this.getElementByLocalId('navigation-arrow-right');\n var origBBox = textShape.getBBox();\n textShape.attr('text', text);\n var newBBox = textShape.getBBox();\n textShape.attr('x', textShape.attr('x') - (newBBox.width - origBBox.width) / 2);\n leftArrow.attr('opacity', this.currentPageIndex === 1 ? 0.45 : 1);\n leftArrow.attr('cursor', this.currentPageIndex === 1 ? 'not-allowed' : 'pointer');\n rightArrow.attr('opacity', this.currentPageIndex === this.totalPagesCnt ? 0.45 : 1);\n rightArrow.attr('cursor', this.currentPageIndex === this.totalPagesCnt ? 'not-allowed' : 'pointer');\n };\n\n Category.prototype.drawArrow = function (group, currentPoint, name, direction, size) {\n var x = currentPoint.x,\n y = currentPoint.y;\n var rotateMap = {\n right: 90 * Math.PI / 180,\n left: (360 - 90) * Math.PI / 180,\n up: 0,\n down: 180 * Math.PI / 180\n };\n var shape = this.addShape(group, {\n type: 'path',\n id: this.getElementId(name),\n name: name,\n attrs: {\n path: [['M', x + size / 2, y], ['L', x, y + size], ['L', x + size, y + size], ['Z']],\n fill: '#000',\n cursor: 'pointer'\n }\n });\n shape.attr('matrix', (0, _matrix.getMatrixByAngle)({\n x: x + size / 2,\n y: y + size / 2\n }, rotateMap[direction]));\n return shape;\n };\n\n Category.prototype.getCurrentNavigationMatrix = function () {\n var _a = this,\n currentPageIndex = _a.currentPageIndex,\n pageWidth = _a.pageWidth,\n pageHeight = _a.pageHeight;\n\n var layout = this.get('layout');\n var translate = layout === 'horizontal' ? {\n x: 0,\n y: pageHeight * (1 - currentPageIndex)\n } : {\n x: pageWidth * (1 - currentPageIndex),\n y: 0\n };\n return (0, _matrix.getMatrixByTranslate)(translate);\n }; // 附加状态对应的样式\n\n\n Category.prototype.applyItemStates = function (item, subGroup) {\n var states = this.getItemStates(item);\n var hasStates = states.length > 0;\n\n if (hasStates) {\n var children = subGroup.getChildren();\n var itemStates_1 = this.get('itemStates');\n (0, _util.each)(children, function (element) {\n var name = element.get('name');\n var elName = name.split('-')[2]; // marker, name, value\n\n var statesStyle = (0, _state.getStatesStyle)(item, elName, itemStates_1);\n\n if (statesStyle) {\n element.attr(statesStyle);\n\n if (elName === 'marker' && !(element.get('isStroke') && element.get('isFill'))) {\n // 如果 marker 是单填充或者单描边的话,就不要额外添加 stroke 或这 fill 属性,否则会影响 unchecked 后的显示\n if (element.get('isStroke')) {\n element.attr('fill', null);\n }\n\n if (element.get('isFill')) {\n element.attr('stroke', null);\n }\n }\n }\n });\n }\n }; // 获取 itemWidth 的最终设置\n\n\n Category.prototype.getLimitItemWidth = function () {\n var itemWidth = this.get('itemWidth');\n var maxItemWidth = this.get('maxItemWidth');\n\n if (maxItemWidth) {\n // 设置了最大宽度\n if (itemWidth) {\n maxItemWidth = itemWidth <= maxItemWidth ? itemWidth : maxItemWidth;\n }\n } else if (itemWidth) {\n maxItemWidth = itemWidth;\n }\n\n return maxItemWidth;\n };\n\n return Category;\n}(_base.default);\n\nvar _default = Category;\nexports.default = _default;\n\n/***/ }),\n/* 838 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar _util2 = __webpack_require__(44);\n\nvar _base = _interopRequireDefault(__webpack_require__(257));\n\nvar HANDLER_HEIGHT_RATIO = 1.4;\nvar HANDLER_TRIANGLE_RATIO = 0.4;\n\nvar ContinueLegend =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(ContinueLegend, _super);\n\n function ContinueLegend() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n ContinueLegend.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n type: 'continue',\n min: 0,\n max: 100,\n value: null,\n colors: [],\n track: {},\n rail: {},\n label: {},\n handler: {},\n slidable: true,\n tip: null,\n step: null,\n maxWidth: null,\n maxHeight: null,\n defaultCfg: {\n label: {\n align: 'rail',\n spacing: 5,\n formatter: null,\n style: {\n fontSize: 12,\n fill: _theme.default.textColor,\n textBaseline: 'middle',\n fontFamily: _theme.default.fontFamily\n }\n },\n handler: {\n size: 10,\n style: {\n fill: '#fff',\n stroke: '#333'\n }\n },\n track: {},\n rail: {\n type: 'color',\n size: 20,\n defaultLength: 100,\n style: {\n fill: '#DCDEE2'\n }\n },\n title: {\n spacing: 5,\n style: {\n fill: _theme.default.textColor,\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'top'\n }\n }\n }\n });\n };\n\n ContinueLegend.prototype.isSlider = function () {\n return true;\n }; // 实现 IList 接口\n\n\n ContinueLegend.prototype.getValue = function () {\n return this.getCurrentValue();\n };\n\n ContinueLegend.prototype.getRange = function () {\n return {\n min: this.get('min'),\n max: this.get('max')\n };\n }; // 改变 range\n\n\n ContinueLegend.prototype.setRange = function (min, max) {\n this.update({\n min: min,\n max: max\n });\n };\n\n ContinueLegend.prototype.setValue = function (value) {\n var originValue = this.getValue();\n this.set('value', value);\n var group = this.get('group');\n this.resetTrackClip();\n\n if (this.get('slidable')) {\n this.resetHandlers(group);\n }\n\n this.delegateEmit('valuechanged', {\n originValue: originValue,\n value: value\n });\n };\n\n ContinueLegend.prototype.initEvent = function () {\n var group = this.get('group');\n this.bindSliderEvent(group);\n this.bindRailEvent(group);\n this.bindTrackEvent(group);\n };\n\n ContinueLegend.prototype.drawLegendContent = function (group) {\n this.drawRail(group);\n this.drawLabels(group);\n this.fixedElements(group); // 调整各个图形位置,适应宽高的限制\n\n this.resetTrack(group);\n this.resetTrackClip(group);\n\n if (this.get('slidable')) {\n this.resetHandlers(group);\n }\n };\n\n ContinueLegend.prototype.bindSliderEvent = function (group) {\n this.bindHandlersEvent(group);\n };\n\n ContinueLegend.prototype.bindHandlersEvent = function (group) {\n var _this = this;\n\n group.on('legend-handler-min:drag', function (ev) {\n var minValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n\n var currentValue = _this.getCurrentValue();\n\n var maxValue = currentValue[1];\n\n if (maxValue < minValue) {\n // 如果小于最小值,则调整最小值\n maxValue = minValue;\n }\n\n _this.setValue([minValue, maxValue]);\n });\n group.on('legend-handler-max:drag', function (ev) {\n var maxValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n\n var currentValue = _this.getCurrentValue();\n\n var minValue = currentValue[0];\n\n if (minValue > maxValue) {\n // 如果小于最小值,则调整最小值\n minValue = maxValue;\n }\n\n _this.setValue([minValue, maxValue]);\n });\n };\n\n ContinueLegend.prototype.bindRailEvent = function (group) {};\n\n ContinueLegend.prototype.bindTrackEvent = function (group) {\n var _this = this;\n\n var prePoint = null;\n group.on('legend-track:dragstart', function (ev) {\n prePoint = {\n x: ev.x,\n y: ev.y\n };\n });\n group.on('legend-track:drag', function (ev) {\n if (!prePoint) {\n return;\n }\n\n var preValue = _this.getValueByCanvasPoint(prePoint.x, prePoint.y);\n\n var curValue = _this.getValueByCanvasPoint(ev.x, ev.y);\n\n var currentValue = _this.getCurrentValue();\n\n var curDiff = currentValue[1] - currentValue[0];\n\n var range = _this.getRange();\n\n var dValue = curValue - preValue;\n\n if (dValue < 0) {\n // 减小, 同时未出边界\n if (currentValue[0] + dValue > range.min) {\n _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]);\n } else {\n _this.setValue([range.min, range.min + curDiff]);\n } // && ||\n\n } else if (dValue > 0) {\n if (dValue > 0 && currentValue[1] + dValue < range.max) {\n _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]);\n } else {\n _this.setValue([range.max - curDiff, range.max]);\n }\n }\n\n prePoint = {\n x: ev.x,\n y: ev.y\n };\n });\n group.on('legend-track:dragend', function (ev) {\n prePoint = null;\n });\n };\n\n ContinueLegend.prototype.drawLabels = function (group) {\n this.drawLabel('min', group);\n this.drawLabel('max', group);\n };\n\n ContinueLegend.prototype.drawLabel = function (name, group) {\n var labelCfg = this.get('label');\n var style = labelCfg.style;\n var labelAlign = labelCfg.align;\n var value = this.get(name);\n var alignAttrs = this.getLabelAlignAttrs(name, labelAlign);\n var localId = \"label-\" + name;\n this.addShape(group, {\n type: 'text',\n id: this.getElementId(localId),\n name: \"legend-label-\" + name,\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({\n x: 0,\n y: 0,\n text: value\n }, style), alignAttrs)\n });\n }; // 获取文本的对齐方式,为了自适应真实操碎了心\n\n\n ContinueLegend.prototype.getLabelAlignAttrs = function (name, align) {\n var isVertical = this.isVertical();\n var textAlign = 'center';\n var textBaseline = 'middle';\n\n if (isVertical) {\n // 垂直布局的所有的文本都左对齐\n textAlign = 'start';\n\n if (align !== 'rail') {\n if (name === 'min') {\n textBaseline = 'top';\n } else {\n textBaseline = 'bottom';\n }\n } else {\n textBaseline = 'top';\n }\n } else {\n if (align !== 'rail') {\n textBaseline = 'top';\n\n if (name === 'min') {\n textAlign = 'start';\n } else {\n textAlign = 'end';\n }\n } else {\n textAlign = 'start';\n textBaseline = 'middle';\n }\n }\n\n return {\n textAlign: textAlign,\n textBaseline: textBaseline\n };\n };\n\n ContinueLegend.prototype.getRailPath = function (x, y, w, h) {\n var railCfg = this.get('rail');\n var size = railCfg.size,\n defaultLength = railCfg.defaultLength,\n type = railCfg.type;\n var isVertical = this.isVertical();\n var length = defaultLength;\n var width = w;\n var height = h;\n\n if (!width) {\n width = isVertical ? size : length;\n }\n\n if (!height) {\n height = isVertical ? length : size;\n }\n\n var path = [];\n\n if (type === 'color') {\n path.push(['M', x, y]);\n path.push(['L', x + width, y]);\n path.push(['L', x + width, y + height]);\n path.push(['L', x, y + height]);\n path.push(['Z']);\n } else {\n path.push(['M', x + width, y]);\n path.push(['L', x + width, y + height]);\n path.push(['L', x, y + height]);\n path.push(['Z']);\n }\n\n return path;\n };\n\n ContinueLegend.prototype.drawRail = function (group) {\n var railCfg = this.get('rail');\n var style = railCfg.style;\n this.addShape(group, {\n type: 'path',\n id: this.getElementId('rail'),\n name: 'legend-rail',\n attrs: (0, _tslib.__assign)({\n path: this.getRailPath(0, 0)\n }, style)\n });\n }; // 将传入的颜色转换成渐变色\n\n\n ContinueLegend.prototype.getTrackColor = function (colors) {\n var count = colors.length;\n\n if (!count) {\n return null;\n }\n\n if (count === 1) {\n return colors[0];\n }\n\n var color; // 最终形态 l(0) 0:colors[0] 0.5:colors[1] 1:colors[2];\n\n if (this.isVertical()) {\n // 根据方向设置渐变方向\n color = 'l(90)';\n } else {\n color = 'l(0)';\n }\n\n for (var i = 0; i < count; i++) {\n var percent = i / (count - 1);\n color += \" \" + percent + \":\" + colors[i];\n }\n\n return color;\n };\n\n ContinueLegend.prototype.getTrackPath = function (group) {\n var railShape = this.getRailShape(group);\n var path = railShape.attr('path');\n return (0, _util.clone)(path);\n };\n\n ContinueLegend.prototype.getClipTrackAttrs = function (group) {\n var value = this.getCurrentValue();\n var min = value[0],\n max = value[1];\n var railBBox = this.getRailBBox(group);\n var startPoint = this.getPointByValue(min, group);\n var endPoint = this.getPointByValue(max, group);\n var isVertical = this.isVertical();\n var x;\n var y;\n var width;\n var height;\n\n if (isVertical) {\n x = railBBox.minX;\n y = startPoint.y;\n width = railBBox.width;\n height = endPoint.y - startPoint.y;\n } else {\n x = startPoint.x;\n y = railBBox.minY;\n width = endPoint.x - startPoint.x;\n height = railBBox.height;\n }\n\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n }; // 获取 track 的属性,由 path 和 颜色构成\n\n\n ContinueLegend.prototype.getTrackAttrs = function (group) {\n var trackCfg = this.get('track');\n var colors = this.get('colors');\n var path = this.getTrackPath(group);\n return (0, _util.mix)({\n path: path,\n fill: this.getTrackColor(colors)\n }, trackCfg.style);\n };\n\n ContinueLegend.prototype.resetTrackClip = function (group) {\n var container = group || this.get('group');\n var trackId = this.getElementId('track');\n var trackShape = container.findById(trackId);\n var clipShape = trackShape.getClip();\n var attrs = this.getClipTrackAttrs(group);\n\n if (!clipShape) {\n trackShape.setClip({\n type: 'rect',\n attrs: attrs\n });\n } else {\n clipShape.attr(attrs);\n }\n };\n\n ContinueLegend.prototype.resetTrack = function (group) {\n var trackId = this.getElementId('track');\n var trackShape = group.findById(trackId);\n var trackAttrs = this.getTrackAttrs(group);\n\n if (trackShape) {\n trackShape.attr(trackAttrs);\n } else {\n this.addShape(group, {\n type: 'path',\n id: trackId,\n draggable: this.get('slidable'),\n name: 'legend-track',\n attrs: trackAttrs\n });\n }\n };\n\n ContinueLegend.prototype.getPointByValue = function (value, group) {\n var _a = this.getRange(),\n min = _a.min,\n max = _a.max;\n\n var percent = (value - min) / (max - min);\n var bbox = this.getRailBBox(group);\n var isVertcal = this.isVertical();\n var point = {\n x: 0,\n y: 0\n };\n\n if (isVertcal) {\n point.x = bbox.minX + bbox.width / 2;\n point.y = (0, _util2.getValueByPercent)(bbox.minY, bbox.maxY, percent);\n } else {\n point.x = (0, _util2.getValueByPercent)(bbox.minX, bbox.maxX, percent);\n point.y = bbox.minY + bbox.height / 2;\n }\n\n return point;\n };\n\n ContinueLegend.prototype.getRailShape = function (group) {\n var container = group || this.get('group');\n return container.findById(this.getElementId('rail'));\n }; // 获取滑轨的宽高信息\n\n\n ContinueLegend.prototype.getRailBBox = function (group) {\n var railShape = this.getRailShape(group);\n var bbox = railShape.getBBox();\n return bbox;\n };\n\n ContinueLegend.prototype.getRailCanvasBBox = function () {\n var container = this.get('group');\n var railShape = container.findById(this.getElementId('rail'));\n var bbox = railShape.getCanvasBBox();\n return bbox;\n }; // 是否垂直\n\n\n ContinueLegend.prototype.isVertical = function () {\n return this.get('layout') === 'vertical';\n }; // 用于交互时\n\n\n ContinueLegend.prototype.getValueByCanvasPoint = function (x, y) {\n var _a = this.getRange(),\n min = _a.min,\n max = _a.max;\n\n var bbox = this.getRailCanvasBBox(); // 因为 x, y 是画布坐标\n\n var isVertcal = this.isVertical();\n var step = this.get('step');\n var percent;\n\n if (isVertcal) {\n // 垂直时计算 y\n percent = (y - bbox.minY) / bbox.height;\n } else {\n // 水平时计算 x\n percent = (x - bbox.minX) / bbox.width;\n }\n\n var value = (0, _util2.getValueByPercent)(min, max, percent);\n\n if (step) {\n var count = Math.round((value - min) / step);\n value = min + count * step; // 移动到最近的\n }\n\n if (value > max) {\n value = max;\n }\n\n if (value < min) {\n value = min;\n }\n\n return value;\n }; // 当前选中的范围\n\n\n ContinueLegend.prototype.getCurrentValue = function () {\n var value = this.get('value');\n\n if (!value) {\n // 如果没有定义,取最大范围\n value = [this.get('min'), this.get('max')];\n }\n\n return value;\n }; // 重置滑块 handler\n\n\n ContinueLegend.prototype.resetHandlers = function (group) {\n var currentValue = this.getCurrentValue();\n var min = currentValue[0],\n max = currentValue[1];\n this.resetHandler(group, 'min', min);\n this.resetHandler(group, 'max', max);\n }; // 获取滑块的 path\n\n\n ContinueLegend.prototype.getHandlerPath = function (handlerCfg, point) {\n var isVertical = this.isVertical();\n var path = [];\n var width = handlerCfg.size;\n var x = point.x,\n y = point.y;\n var height = width * HANDLER_HEIGHT_RATIO;\n var halfWidth = width / 2;\n var oneSixthWidth = width / 6;\n\n if (isVertical) {\n /**\n * 竖直情况下的滑块 handler,左侧顶点是 x,y\n * /----|\n * -- |\n * -- |\n * \\----|\n */\n var triangleX = x + height * HANDLER_TRIANGLE_RATIO;\n path.push(['M', x, y]);\n path.push(['L', triangleX, y + halfWidth]);\n path.push(['L', x + height, y + halfWidth]);\n path.push(['L', x + height, y - halfWidth]);\n path.push(['L', triangleX, y - halfWidth]);\n path.push(['Z']); // 绘制两条横线\n\n path.push(['M', triangleX, y + oneSixthWidth]);\n path.push(['L', x + height - 2, y + oneSixthWidth]);\n path.push(['M', triangleX, y - oneSixthWidth]);\n path.push(['L', x + height - 2, y - oneSixthWidth]);\n } else {\n /**\n * 水平情况下的滑块,上面顶点处是 x,y\n * / \\\n * | | | |\n * | | | |\n * -----\n */\n var triangleY = y + height * HANDLER_TRIANGLE_RATIO;\n path.push(['M', x, y]);\n path.push(['L', x - halfWidth, triangleY]);\n path.push(['L', x - halfWidth, y + height]);\n path.push(['L', x + halfWidth, y + height]);\n path.push(['L', x + halfWidth, triangleY]);\n path.push(['Z']); // 绘制两条竖线\n\n path.push(['M', x - oneSixthWidth, triangleY]);\n path.push(['L', x - oneSixthWidth, y + height - 2]);\n path.push(['M', x + oneSixthWidth, triangleY]);\n path.push(['L', x + oneSixthWidth, y + height - 2]);\n }\n\n return path;\n }; // 调整 handler 的位置,如果未存在则绘制\n\n\n ContinueLegend.prototype.resetHandler = function (group, name, value) {\n var point = this.getPointByValue(value, group);\n var handlerCfg = this.get('handler');\n var path = this.getHandlerPath(handlerCfg, point);\n var id = this.getElementId(\"handler-\" + name);\n var handlerShape = group.findById(id);\n var isVertical = this.isVertical();\n\n if (handlerShape) {\n handlerShape.attr('path', path);\n } else {\n this.addShape(group, {\n type: 'path',\n name: \"legend-handler-\" + name,\n draggable: true,\n id: id,\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({\n path: path\n }, handlerCfg.style), {\n cursor: isVertical ? 'ns-resize' : 'ew-resize'\n })\n });\n }\n }; // 当设置了 maxWidth, maxHeight 时调整 rail 的宽度,\n // 文本的位置\n\n\n ContinueLegend.prototype.fixedElements = function (group) {\n var railShape = group.findById(this.getElementId('rail'));\n var minLabel = group.findById(this.getElementId('label-min'));\n var maxLabel = group.findById(this.getElementId('label-max'));\n var startPoint = this.getDrawPoint();\n\n if (this.isVertical()) {\n // 横向布局\n this.fixedVertail(minLabel, maxLabel, railShape, startPoint);\n } else {\n // 水平布局\n this.fixedHorizontal(minLabel, maxLabel, railShape, startPoint);\n }\n };\n\n ContinueLegend.prototype.fitRailLength = function (minLabelBBox, maxLabelBBox, railBBox, railShape) {\n var isVertical = this.isVertical();\n var lengthField = isVertical ? 'height' : 'width';\n var labelCfg = this.get('label');\n var labelAlign = labelCfg.align;\n var spacing = labelCfg.spacing;\n var maxLength = this.get(\"max\" + (0, _util.upperFirst)(lengthField)); // get('maxWidth')\n\n if (maxLength) {\n var elementsLength = labelAlign === 'rail' ? railBBox[lengthField] + minLabelBBox[lengthField] + maxLabelBBox[lengthField] + spacing * 2 : railBBox[lengthField];\n var diff = elementsLength - maxLength;\n\n if (diff > 0) {\n // 大于限制的长度\n this.changeRailLength(railShape, lengthField, railBBox[lengthField] - diff);\n }\n }\n };\n\n ContinueLegend.prototype.changeRailLength = function (railShape, lengthField, length) {\n var bbox = railShape.getBBox();\n var path;\n\n if (lengthField === 'height') {\n path = this.getRailPath(bbox.x, bbox.y, bbox.width, length);\n } else {\n path = this.getRailPath(bbox.x, bbox.y, length, bbox.height);\n }\n\n railShape.attr('path', path);\n };\n\n ContinueLegend.prototype.changeRailPosition = function (railShape, x, y) {\n var bbox = railShape.getBBox();\n var path = this.getRailPath(x, y, bbox.width, bbox.height);\n railShape.attr('path', path);\n };\n\n ContinueLegend.prototype.fixedHorizontal = function (minLabel, maxLabel, railShape, startPoint) {\n var labelCfg = this.get('label');\n var labelAlign = labelCfg.align;\n var spacing = labelCfg.spacing;\n var railBBox = railShape.getBBox();\n var minLabelBBox = minLabel.getBBox();\n var maxLabelBBox = maxLabel.getBBox();\n var railHeight = railBBox.height; // 取 rail 的高度,作为高度\n\n this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape);\n railBBox = railShape.getBBox();\n\n if (labelAlign === 'rail') {\n // 沿着 rail 方向\n minLabel.attr({\n x: startPoint.x,\n y: startPoint.y + railHeight / 2\n });\n this.changeRailPosition(railShape, startPoint.x + minLabelBBox.width + spacing, startPoint.y);\n maxLabel.attr({\n x: startPoint.x + minLabelBBox.width + railBBox.width + spacing * 2,\n y: startPoint.y + railHeight / 2\n });\n } else if (labelAlign === 'top') {\n minLabel.attr({\n x: startPoint.x,\n y: startPoint.y\n });\n maxLabel.attr({\n x: startPoint.x + railBBox.width,\n y: startPoint.y\n });\n this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing);\n } else {\n this.changeRailPosition(railShape, startPoint.x, startPoint.y);\n minLabel.attr({\n x: startPoint.x,\n y: startPoint.y + railBBox.height + spacing\n });\n maxLabel.attr({\n x: startPoint.x + railBBox.width,\n y: startPoint.y + railBBox.height + spacing\n });\n }\n };\n\n ContinueLegend.prototype.fixedVertail = function (minLabel, maxLabel, railShape, startPoint) {\n var labelCfg = this.get('label');\n var labelAlign = labelCfg.align;\n var spacing = labelCfg.spacing;\n var railBBox = railShape.getBBox();\n var minLabelBBox = minLabel.getBBox();\n var maxLabelBBox = maxLabel.getBBox();\n this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape);\n railBBox = railShape.getBBox();\n\n if (labelAlign === 'rail') {\n // 沿着 rail 方向\n minLabel.attr({\n x: startPoint.x,\n y: startPoint.y\n });\n this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing);\n maxLabel.attr({\n x: startPoint.x,\n y: startPoint.y + minLabelBBox.height + railBBox.height + spacing * 2\n });\n } else if (labelAlign === 'right') {\n minLabel.attr({\n x: startPoint.x + railBBox.width + spacing,\n y: startPoint.y\n });\n this.changeRailPosition(railShape, startPoint.x, startPoint.y);\n maxLabel.attr({\n x: startPoint.x + railBBox.width + spacing,\n y: startPoint.y + railBBox.height\n });\n } else {\n // left\n var maxLabelWidth = Math.max(minLabelBBox.width, maxLabelBBox.width);\n minLabel.attr({\n x: startPoint.x,\n y: startPoint.y\n });\n this.changeRailPosition(railShape, startPoint.x + maxLabelWidth + spacing, startPoint.y);\n maxLabel.attr({\n x: startPoint.x,\n y: startPoint.y + railBBox.height\n });\n }\n };\n\n return ContinueLegend;\n}(_base.default);\n\nvar _default = ContinueLegend;\nexports.default = _default;\n\n/***/ }),\n/* 839 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Html\", {\n enumerable: true,\n get: function get() {\n return _html.default;\n }\n});\n\nvar _html = _interopRequireDefault(__webpack_require__(840));\n\n/***/ }),\n/* 840 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _colorUtil = _interopRequireDefault(__webpack_require__(179));\n\nvar _domUtil = __webpack_require__(112);\n\nvar _util = __webpack_require__(0);\n\nvar _htmlComponent = _interopRequireDefault(__webpack_require__(186));\n\nvar _util2 = __webpack_require__(44);\n\nvar CssConst = _interopRequireWildcard(__webpack_require__(258));\n\nvar _htmlTheme = _interopRequireDefault(__webpack_require__(841));\n\nvar _align = __webpack_require__(842);\n\nfunction hasOneKey(obj, keys) {\n var result = false;\n (0, _util.each)(keys, function (key) {\n if ((0, _util.hasKey)(obj, key)) {\n result = true;\n return false;\n }\n });\n return result;\n}\n\nvar Tooltip =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Tooltip, _super);\n\n function Tooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Tooltip.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'tooltip',\n type: 'html',\n x: 0,\n y: 0,\n items: [],\n customContent: null,\n containerTpl: \"\",\n itemTpl: \"\\n \\n {name}:\\n {value}\\n \",\n xCrosshairTpl: \"\",\n yCrosshairTpl: \"\",\n title: null,\n showTitle: true,\n\n /**\n * tooltip 限制的区域\n * @type {Region}\n */\n region: null,\n // crosshair 的限制区域\n crosshairsRegion: null,\n containerClassName: CssConst.CONTAINER_CLASS,\n // x, y, xy\n crosshairs: null,\n offset: 10,\n position: 'right',\n domStyles: null,\n defaultStyles: _htmlTheme.default\n });\n }; // tooltip 渲染时,渲染 title,items 和 corosshairs\n\n\n Tooltip.prototype.render = function () {\n if (this.get('customContent')) {\n this.renderCustomContent();\n } else {\n this.resetTitle();\n this.renderItems();\n } // 绘制完成后,再定位\n\n\n this.resetPosition();\n }; // 复写清空函数,因为有模板的存在,所以默认的写法不合适\n\n\n Tooltip.prototype.clear = function () {\n // 由于 crosshair 没有在 container 内,所以需要单独清理\n this.clearCrosshairs();\n this.setTitle(''); // 清空标题\n\n this.clearItemDoms();\n };\n\n Tooltip.prototype.show = function () {\n var container = this.getContainer();\n\n if (!container || this.destroyed) {\n // 防止容器不存在或者被销毁时报错\n return;\n }\n\n this.set('visible', true);\n (0, _domUtil.modifyCSS)(container, {\n visibility: 'visible'\n });\n this.setCrossHairsVisible(true);\n };\n\n Tooltip.prototype.hide = function () {\n var container = this.getContainer(); // relative: https://github.com/antvis/g2/issues/1221\n\n if (!container || this.destroyed) {\n return;\n }\n\n this.set('visible', false);\n (0, _domUtil.modifyCSS)(container, {\n visibility: 'hidden'\n });\n this.setCrossHairsVisible(false);\n }; // 实现 IPointLocation 的接口\n\n\n Tooltip.prototype.getLocation = function () {\n return {\n x: this.get('x'),\n y: this.get('y')\n };\n }; // 实现 IPointLocation 的接口\n\n\n Tooltip.prototype.setLocation = function (point) {\n this.set('x', point.x);\n this.set('y', point.y);\n this.resetPosition();\n };\n\n Tooltip.prototype.setCrossHairsVisible = function (visible) {\n var display = visible ? '' : 'none';\n var xCrosshairDom = this.get('xCrosshairDom');\n var yCrosshairDom = this.get('yCrosshairDom');\n xCrosshairDom && (0, _domUtil.modifyCSS)(xCrosshairDom, {\n display: display\n });\n yCrosshairDom && (0, _domUtil.modifyCSS)(yCrosshairDom, {\n display: display\n });\n }; // 如有 customContent 则根据 customContent 设置 container\n\n\n Tooltip.prototype.initContainer = function () {\n _super.prototype.initContainer.call(this);\n\n if (this.get('customContent')) {\n if (this.get('container')) {\n this.get('container').remove();\n }\n\n var container = this.getHtmlContentNode();\n this.get('parent').appendChild(container);\n this.set('container', container);\n this.resetStyles();\n this.applyStyles();\n }\n }; // 更新属性的同时,可能会引起 DOM 的变化,这里对可能引起 DOM 变化的场景做了处理\n\n\n Tooltip.prototype.updateInner = function (cfg) {\n if (this.get('customContent')) {\n this.renderCustomContent();\n } else {\n // 更新标题\n if (hasOneKey(cfg, ['title', 'showTitle'])) {\n this.resetTitle();\n } // 更新内容\n\n\n if ((0, _util.hasKey)(cfg, 'items')) {\n this.renderItems();\n }\n }\n\n _super.prototype.updateInner.call(this, cfg);\n };\n\n Tooltip.prototype.initDom = function () {\n this.cacheDoms();\n }; // 清理 DOM\n\n\n Tooltip.prototype.removeDom = function () {\n _super.prototype.removeDom.call(this);\n\n this.clearCrosshairs();\n }; // 调整位置\n\n\n Tooltip.prototype.resetPosition = function () {\n var x = this.get('x');\n var y = this.get('y');\n var offset = this.get('offset');\n\n var _a = this.getOffset(),\n offsetX = _a.offsetX,\n offsetY = _a.offsetY;\n\n var position = this.get('position');\n var region = this.get('region');\n var container = this.getContainer();\n var bbox = this.getBBox();\n var width = bbox.width,\n height = bbox.height;\n var limitBox;\n\n if (region) {\n // 不限制位置\n limitBox = (0, _util2.regionToBBox)(region);\n }\n\n var point = (0, _align.getAlignPoint)(x, y, offset, width, height, position, limitBox);\n (0, _domUtil.modifyCSS)(container, {\n left: (0, _util2.toPx)(point.x + offsetX),\n top: (0, _util2.toPx)(point.y + offsetY)\n });\n this.resetCrosshairs();\n }; // 根据 customContent 渲染\n\n\n Tooltip.prototype.renderCustomContent = function () {\n var node = this.getHtmlContentNode();\n var parent = this.get('parent');\n var curContainer = this.get('container');\n\n if (curContainer && curContainer.parentNode === parent) {\n parent.replaceChild(node, curContainer);\n } else {\n parent.appendChild(node);\n }\n\n this.set('container', node);\n this.resetStyles();\n this.applyStyles();\n };\n\n Tooltip.prototype.getHtmlContentNode = function () {\n var node;\n var customContent = this.get('customContent');\n\n if (customContent) {\n var elem = customContent(this.get('title'), this.get('items'));\n\n if ((0, _util.isElement)(elem)) {\n node = elem;\n } else {\n node = (0, _domUtil.createDom)(elem);\n }\n }\n\n return node;\n }; // 缓存模板设置的各种 DOM\n\n\n Tooltip.prototype.cacheDoms = function () {\n var container = this.getContainer();\n var titleDom = container.getElementsByClassName(CssConst.TITLE_CLASS)[0];\n var listDom = container.getElementsByClassName(CssConst.LIST_CLASS)[0];\n this.set('titleDom', titleDom);\n this.set('listDom', listDom);\n }; // 重置 title\n\n\n Tooltip.prototype.resetTitle = function () {\n var title = this.get('title');\n var showTitle = this.get('showTitle');\n\n if (showTitle && title) {\n this.setTitle(title);\n } else {\n this.setTitle('');\n }\n }; // 设置 title 文本\n\n\n Tooltip.prototype.setTitle = function (text) {\n var titleDom = this.get('titleDom');\n\n if (titleDom) {\n titleDom.innerText = text;\n }\n }; // 终止 crosshair\n\n\n Tooltip.prototype.resetCrosshairs = function () {\n var crosshairsRegion = this.get('crosshairsRegion');\n var crosshairs = this.get('crosshairs');\n\n if (!crosshairsRegion || !crosshairs) {\n // 不显示 crosshair,都移除,没有设定 region 也都移除掉\n this.clearCrosshairs();\n } else {\n var crosshairBox = (0, _util2.regionToBBox)(crosshairsRegion);\n var xCrosshairDom = this.get('xCrosshairDom');\n var yCrosshairDom = this.get('yCrosshairDom');\n\n if (crosshairs === 'x') {\n this.resetCrosshair('x', crosshairBox); // 仅显示 x 的 crosshair,y 移除\n\n if (yCrosshairDom) {\n yCrosshairDom.remove();\n this.set('yCrosshairDom', null);\n }\n } else if (crosshairs === 'y') {\n this.resetCrosshair('y', crosshairBox); // 仅显示 y 的 crosshair,x 移除\n\n if (xCrosshairDom) {\n xCrosshairDom.remove();\n this.set('xCrosshairDom', null);\n }\n } else {\n this.resetCrosshair('x', crosshairBox);\n this.resetCrosshair('y', crosshairBox);\n }\n\n this.setCrossHairsVisible(this.get('visible'));\n }\n }; // 设定 crosshair 的位置,需要区分 x,y\n\n\n Tooltip.prototype.resetCrosshair = function (name, bbox) {\n var croshairDom = this.checkCrosshair(name);\n var value = this.get(name);\n\n if (name === 'x') {\n (0, _domUtil.modifyCSS)(croshairDom, {\n left: (0, _util2.toPx)(value),\n top: (0, _util2.toPx)(bbox.y),\n height: (0, _util2.toPx)(bbox.height)\n });\n } else {\n (0, _domUtil.modifyCSS)(croshairDom, {\n top: (0, _util2.toPx)(value),\n left: (0, _util2.toPx)(bbox.x),\n width: (0, _util2.toPx)(bbox.width)\n });\n }\n }; // 如果 crosshair 对应的 dom 不存在,则创建\n\n\n Tooltip.prototype.checkCrosshair = function (name) {\n var domName = name + \"CrosshairDom\";\n var tplName = name + \"CrosshairTpl\";\n var constName = \"CROSSHAIR_\" + name.toUpperCase();\n var styleName = CssConst[constName];\n var croshairDom = this.get(domName);\n var parent = this.get('parent');\n\n if (!croshairDom) {\n croshairDom = (0, _domUtil.createDom)(this.get(tplName)); // 创建\n\n this.applyStyle(styleName, croshairDom); // 设置初始样式\n\n parent.appendChild(croshairDom); // 添加到跟 tooltip 同级的目录下\n\n this.set(domName, croshairDom);\n }\n\n return croshairDom;\n };\n\n Tooltip.prototype.renderItems = function () {\n this.clearItemDoms();\n var items = this.get('items');\n var itemTpl = this.get('itemTpl');\n var listDom = this.get('listDom');\n\n if (listDom) {\n (0, _util.each)(items, function (item) {\n var color = _colorUtil.default.toCSSGradient(item.color);\n\n var substituteObj = (0, _tslib.__assign)((0, _tslib.__assign)({}, item), {\n color: color\n });\n var domStr = (0, _util.substitute)(itemTpl, substituteObj);\n var itemDom = (0, _domUtil.createDom)(domStr);\n listDom.appendChild(itemDom);\n });\n this.applyChildrenStyles(listDom, this.get('domStyles'));\n }\n };\n\n Tooltip.prototype.clearItemDoms = function () {\n if (this.get('listDom')) {\n (0, _util2.clearDom)(this.get('listDom'));\n }\n };\n\n Tooltip.prototype.clearCrosshairs = function () {\n var xCrosshairDom = this.get('xCrosshairDom');\n var yCrosshairDom = this.get('yCrosshairDom');\n xCrosshairDom && xCrosshairDom.remove();\n yCrosshairDom && yCrosshairDom.remove();\n this.set('xCrosshairDom', null);\n this.set('yCrosshairDom', null);\n };\n\n return Tooltip;\n}(_htmlComponent.default);\n\nvar _default = Tooltip;\nexports.default = _default;\n\n/***/ }),\n/* 841 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _theme = _interopRequireDefault(__webpack_require__(60));\n\nvar CssConst = _interopRequireWildcard(__webpack_require__(258));\n\nvar _a;\n\nvar _default = (_a = {}, // css style for tooltip\n_a[\"\" + CssConst.CONTAINER_CLASS] = {\n position: 'absolute',\n visibility: 'visible',\n // @2018-07-25 by blue.lb 这里去掉浮动,火狐上存在样式错位\n // whiteSpace: 'nowrap',\n zIndex: 8,\n transition: 'visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1), ' + 'left 0.4s cubic-bezier(0.23, 1, 0.32, 1), ' + 'top 0.4s cubic-bezier(0.23, 1, 0.32, 1)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n boxShadow: '0px 0px 10px #aeaeae',\n borderRadius: '3px',\n color: 'rgb(87, 87, 87)',\n fontSize: '12px',\n fontFamily: _theme.default.fontFamily,\n lineHeight: '20px',\n padding: '10px 10px 6px 10px'\n}, _a[\"\" + CssConst.TITLE_CLASS] = {\n marginBottom: '4px'\n}, _a[\"\" + CssConst.LIST_CLASS] = {\n margin: '0px',\n listStyleType: 'none',\n padding: '0px'\n}, _a[\"\" + CssConst.LIST_ITEM_CLASS] = {\n listStyleType: 'none',\n marginBottom: '4px'\n}, _a[\"\" + CssConst.MARKER_CLASS] = {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n display: 'inline-block',\n marginRight: '8px'\n}, _a[\"\" + CssConst.VALUE_CLASS] = {\n display: 'inline-block',\n float: 'right',\n marginLeft: '30px'\n}, _a[\"\" + CssConst.CROSSHAIR_X] = {\n position: 'absolute',\n width: '1px',\n backgroundColor: 'rgba(0, 0, 0, 0.25)'\n}, _a[\"\" + CssConst.CROSSHAIR_Y] = {\n position: 'absolute',\n height: '1px',\n backgroundColor: 'rgba(0, 0, 0, 0.25)'\n}, _a);\n\nexports.default = _default;\n\n/***/ }),\n/* 842 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getOutSides = getOutSides;\nexports.getPointByPosition = getPointByPosition;\nexports.getAlignPoint = getAlignPoint;\n\n// 检测各边是否超出\nfunction getOutSides(x, y, width, height, limitBox) {\n var hits = {\n left: x < limitBox.x,\n right: x + width > limitBox.x + limitBox.width,\n top: y < limitBox.y,\n bottom: y + height > limitBox.y + limitBox.height\n };\n return hits;\n}\n\nfunction getPointByPosition(x, y, offset, width, height, position) {\n var px = x;\n var py = y;\n\n switch (position) {\n case 'left':\n // left center\n px = x - width - offset;\n py = y - height / 2;\n break;\n\n case 'right':\n px = x + offset;\n py = y - height / 2;\n break;\n\n case 'top':\n px = x - width / 2;\n py = y - height - offset;\n break;\n\n case 'bottom':\n // bottom\n px = x - width / 2;\n py = y + offset;\n break;\n\n default:\n // auto, 在 top-right\n px = x + offset;\n py = y - height - offset;\n break;\n }\n\n return {\n x: px,\n y: py\n };\n}\n\nfunction getAlignPoint(x, y, offset, width, height, position, limitBox) {\n var point = getPointByPosition(x, y, offset, width, height, position);\n\n if (limitBox) {\n var outSides = getOutSides(point.x, point.y, width, height, limitBox);\n\n if (position === 'auto') {\n // 如果是 auto,默认 tooltip 在右上角,仅需要判定右侧和上测冲突即可\n if (outSides.right) {\n point.x = Math.max(0, x - width - offset);\n }\n\n if (outSides.top) {\n point.y = Math.max(0, y - height - offset);\n }\n } else if (position === 'top' || position === 'bottom') {\n if (outSides.left) {\n // 左侧躲避\n point.x = limitBox.x;\n }\n\n if (outSides.right) {\n // 右侧躲避\n point.x = limitBox.x + limitBox.width - width;\n }\n\n if (position === 'top' && outSides.top) {\n // 如果上面对齐检测上面,不检测下面\n point.y = y + offset;\n }\n\n if (position === 'bottom' && outSides.bottom) {\n point.y = y - height - offset;\n }\n } else {\n // 检测左右位置\n if (outSides.top) {\n point.y = limitBox.y;\n }\n\n if (outSides.bottom) {\n point.y = limitBox.y + limitBox.height - height;\n }\n\n if (position === 'left' && outSides.left) {\n point.x = x + offset;\n }\n\n if (position === 'right' && outSides.right) {\n point.x = x - width - offset;\n }\n }\n }\n\n return point;\n}\n\n/***/ }),\n/* 843 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Slider\", {\n enumerable: true,\n get: function get() {\n return _slider.Slider;\n }\n});\n\nvar _slider = __webpack_require__(844);\n\n/***/ }),\n/* 844 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.Slider = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _trend = __webpack_require__(845);\n\nvar _constant = __webpack_require__(848);\n\nvar _handler = __webpack_require__(849);\n\nvar Slider =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Slider, _super);\n\n function Slider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.onMouseDown = function (target) {\n return function (e) {\n _this.currentTarget = target; // 取出原生事件\n\n var event = e.originalEvent; // 2. 存储当前点击位置\n\n event.stopPropagation();\n event.preventDefault(); // 兼容移动端获取数据\n\n _this.prevX = (0, _util.get)(event, 'touches.0.pageX', event.pageX);\n _this.prevY = (0, _util.get)(event, 'touches.0.pageY', event.pageY); // 3. 开始滑动的时候,绑定 move 和 up 事件\n\n var containerDOM = _this.getContainerDOM();\n\n containerDOM.addEventListener('mousemove', _this.onMouseMove);\n containerDOM.addEventListener('mouseup', _this.onMouseUp);\n containerDOM.addEventListener('mouseleave', _this.onMouseUp); // 移动端事件\n\n containerDOM.addEventListener('touchmove', _this.onMouseMove);\n containerDOM.addEventListener('touchend', _this.onMouseUp);\n containerDOM.addEventListener('touchcancel', _this.onMouseUp);\n };\n };\n\n _this.onMouseMove = function (event) {\n var width = _this.cfg.width;\n var originValue = [_this.get('start'), _this.get('end')]; // 滑动过程中,计算偏移,更新滑块,然后 emit 数据出去\n\n event.stopPropagation();\n event.preventDefault();\n var x = (0, _util.get)(event, 'touches.0.pageX', event.pageX);\n var y = (0, _util.get)(event, 'touches.0.pageY', event.pageY); // 横向的 slider 只处理 x\n\n var offsetX = x - _this.prevX;\n\n var offsetXRange = _this.adjustOffsetRange(offsetX / width); // 更新 start end range 范围\n\n\n _this.updateStartEnd(offsetXRange); // 更新 ui\n\n\n _this.updateUI(_this.getElementByLocalId('foreground'), _this.getElementByLocalId('minText'), _this.getElementByLocalId('maxText'));\n\n _this.prevX = x;\n _this.prevY = y;\n\n _this.draw(); // 因为存储的 start、end 可能不一定是按大小存储的,所以排序一下,对外是 end >= start\n\n\n _this.emit(_constant.SLIDER_CHANGE, [_this.get('start'), _this.get('end')].sort());\n\n _this.delegateEmit('valuechanged', {\n originValue: originValue,\n value: [_this.get('start'), _this.get('end')]\n });\n };\n\n _this.onMouseUp = function () {\n // 结束之后,取消绑定的事件\n if (_this.currentTarget) {\n _this.currentTarget = undefined;\n }\n\n var containerDOM = _this.getContainerDOM();\n\n if (containerDOM) {\n containerDOM.removeEventListener('mousemove', _this.onMouseMove);\n containerDOM.removeEventListener('mouseup', _this.onMouseUp); // 防止滑动到 canvas 外部之后,状态丢失\n\n containerDOM.removeEventListener('mouseleave', _this.onMouseUp); // 移动端事件\n\n containerDOM.removeEventListener('touchmove', _this.onMouseMove);\n containerDOM.removeEventListener('touchend', _this.onMouseUp);\n containerDOM.removeEventListener('touchcancel', _this.onMouseUp);\n }\n };\n\n return _this;\n }\n\n Slider.prototype.setRange = function (min, max) {\n this.set('minLimit', min);\n this.set('maxLimit', max);\n var oldStart = this.get('start');\n var oldEnd = this.get('end');\n var newStart = (0, _util.clamp)(oldStart, min, max);\n var newEnd = (0, _util.clamp)(oldEnd, min, max);\n\n if (!this.get('isInit') && (oldStart !== newStart || oldEnd !== newEnd)) {\n this.setValue([newStart, newEnd]);\n }\n };\n\n Slider.prototype.getRange = function () {\n return {\n min: this.get('minLimit') || 0,\n max: this.get('maxLimit') || 1\n };\n };\n\n Slider.prototype.setValue = function (value) {\n var range = this.getRange();\n\n if ((0, _util.isArray)(value) && value.length === 2) {\n var originValue = [this.get('start'), this.get('end')];\n this.update({\n start: (0, _util.clamp)(value[0], range.min, range.max),\n end: (0, _util.clamp)(value[1], range.min, range.max)\n });\n\n if (!this.get('updateAutoRender')) {\n this.render();\n }\n\n this.delegateEmit('valuechanged', {\n originValue: originValue,\n value: value\n });\n }\n };\n\n Slider.prototype.getValue = function () {\n return [this.get('start'), this.get('end')];\n };\n\n Slider.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'slider',\n x: 0,\n y: 0,\n width: 100,\n height: 16,\n backgroundStyle: {},\n foregroundStyle: {},\n handlerStyle: {},\n textStyle: {},\n defaultCfg: {\n backgroundStyle: _constant.BACKGROUND_STYLE,\n foregroundStyle: _constant.FOREGROUND_STYLE,\n handlerStyle: _constant.HANDLER_STYLE,\n textStyle: _constant.TEXT_STYLE\n }\n });\n };\n\n Slider.prototype.update = function (cfg) {\n var start = cfg.start,\n end = cfg.end;\n var validCfg = (0, _tslib.__assign)({}, cfg);\n\n if (!(0, _util.isNil)(start)) {\n validCfg.start = (0, _util.clamp)(start, 0, 1);\n }\n\n if (!(0, _util.isNil)(end)) {\n validCfg.end = (0, _util.clamp)(end, 0, 1);\n }\n\n _super.prototype.update.call(this, validCfg);\n\n this.minHandler = this.getChildComponentById(this.getElementId('minHandler'));\n this.maxHandler = this.getChildComponentById(this.getElementId('maxHandler'));\n this.trend = this.getChildComponentById(this.getElementId('trend'));\n };\n\n Slider.prototype.init = function () {\n this.set('start', (0, _util.clamp)(this.get('start'), 0, 1));\n this.set('end', (0, _util.clamp)(this.get('end'), 0, 1));\n\n _super.prototype.init.call(this);\n };\n\n Slider.prototype.render = function () {\n _super.prototype.render.call(this);\n\n this.updateUI(this.getElementByLocalId('foreground'), this.getElementByLocalId('minText'), this.getElementByLocalId('maxText'));\n };\n\n Slider.prototype.renderInner = function (group) {\n var _a = this.cfg,\n start = _a.start,\n end = _a.end,\n width = _a.width,\n height = _a.height,\n _b = _a.trendCfg,\n trendCfg = _b === void 0 ? {} : _b,\n minText = _a.minText,\n maxText = _a.maxText,\n _c = _a.backgroundStyle,\n backgroundStyle = _c === void 0 ? {} : _c,\n _d = _a.foregroundStyle,\n foregroundStyle = _d === void 0 ? {} : _d,\n _e = _a.textStyle,\n textStyle = _e === void 0 ? {} : _e,\n _f = _a.handlerStyle,\n handlerStyle = _f === void 0 ? {} : _f;\n var min = start * width;\n var max = end * width; // 趋势图数据\n\n if ((0, _util.size)((0, _util.get)(trendCfg, 'data'))) {\n this.trend = this.addComponent(group, (0, _tslib.__assign)({\n component: _trend.Trend,\n id: this.getElementId('trend'),\n x: 0,\n y: 0,\n width: width,\n height: height\n }, trendCfg));\n } // 1. 背景\n\n\n this.addShape(group, {\n id: this.getElementId('background'),\n type: 'rect',\n attrs: (0, _tslib.__assign)({\n x: 0,\n y: 0,\n width: width,\n height: height\n }, backgroundStyle)\n }); // 2. 左右文字\n\n var minTextShape = this.addShape(group, {\n id: this.getElementId('minText'),\n type: 'text',\n attrs: (0, _tslib.__assign)({\n // x: 0,\n y: height / 2,\n textAlign: 'right',\n text: minText,\n silent: false\n }, textStyle)\n });\n var maxTextShape = this.addShape(group, {\n id: this.getElementId('maxText'),\n type: 'text',\n attrs: (0, _tslib.__assign)({\n // x: 0,\n y: height / 2,\n textAlign: 'left',\n text: maxText,\n silent: false\n }, textStyle)\n }); // 3. 前景 选中背景框\n\n var foregroundShape = this.addShape(group, {\n id: this.getElementId('foreground'),\n name: 'foreground',\n type: 'rect',\n attrs: (0, _tslib.__assign)({\n // x: 0,\n y: 0,\n // width: 0,\n height: height\n }, foregroundStyle)\n }); // 滑块相关的大小信息\n // const handlerWidth = get(handlerStyle, 'width', 10);\n\n var handlerHeight = (0, _util.get)(handlerStyle, 'height', 24); // 4. 左右滑块\n\n this.minHandler = this.addComponent(group, (0, _tslib.__assign)({\n component: _handler.Handler,\n id: this.getElementId('minHandler'),\n name: 'handler-min',\n x: 0,\n y: (height - handlerHeight) / 2,\n width: width,\n height: handlerHeight,\n cursor: 'ew-resize'\n }, handlerStyle));\n this.maxHandler = this.addComponent(group, (0, _tslib.__assign)({\n component: _handler.Handler,\n id: this.getElementId('maxHandler'),\n name: 'handler-max',\n x: 0,\n y: (height - handlerHeight) / 2,\n width: width,\n height: handlerHeight,\n cursor: 'ew-resize'\n }, handlerStyle));\n };\n\n Slider.prototype.applyOffset = function () {\n this.moveElementTo(this.get('group'), {\n x: this.get('x'),\n y: this.get('y')\n });\n };\n\n Slider.prototype.initEvent = function () {\n this.bindEvents();\n };\n\n Slider.prototype.updateUI = function (foregroundShape, minTextShape, maxTextShape) {\n var _a = this.cfg,\n start = _a.start,\n end = _a.end,\n width = _a.width,\n minText = _a.minText,\n maxText = _a.maxText,\n handlerStyle = _a.handlerStyle,\n height = _a.height;\n var min = start * width;\n var max = end * width;\n\n if (this.trend) {\n this.trend.update({\n width: width,\n height: height\n });\n\n if (!this.get('updateAutoRender')) {\n this.trend.render();\n }\n } // 1. foreground\n\n\n foregroundShape.attr('x', min);\n foregroundShape.attr('width', max - min); // 滑块相关的大小信息\n\n var handlerWidth = (0, _util.get)(handlerStyle, 'width', _constant.DEFAULT_HANDLER_WIDTH); // 设置文本\n\n minTextShape.attr('text', minText);\n maxTextShape.attr('text', maxText);\n\n var _b = this._dodgeText([min, max], minTextShape, maxTextShape),\n minAttrs = _b[0],\n maxAttrs = _b[1]; // 2. 左侧滑块和文字位置\n\n\n if (this.minHandler) {\n this.minHandler.update({\n x: min - handlerWidth / 2\n });\n\n if (!this.get('updateAutoRender')) {\n this.minHandler.render();\n }\n }\n\n (0, _util.each)(minAttrs, function (v, k) {\n return minTextShape.attr(k, v);\n }); // 3. 右侧滑块和文字位置\n\n if (this.maxHandler) {\n this.maxHandler.update({\n x: max - handlerWidth / 2\n });\n\n if (!this.get('updateAutoRender')) {\n this.maxHandler.render();\n }\n }\n\n (0, _util.each)(maxAttrs, function (v, k) {\n return maxTextShape.attr(k, v);\n });\n };\n\n Slider.prototype.bindEvents = function () {\n var group = this.get('group');\n group.on('handler-min:mousedown', this.onMouseDown('minHandler'));\n group.on('handler-min:touchstart', this.onMouseDown('minHandler')); // 2. 右滑块的滑动\n\n group.on('handler-max:mousedown', this.onMouseDown('maxHandler'));\n group.on('handler-max:touchstart', this.onMouseDown('maxHandler')); // 3. 前景选中区域\n\n var foreground = group.findById(this.getElementId('foreground'));\n foreground.on('mousedown', this.onMouseDown('foreground'));\n foreground.on('touchstart', this.onMouseDown('foreground'));\n };\n /**\n * 调整 offsetRange,因为一些范围的限制\n * @param offsetRange\n */\n\n\n Slider.prototype.adjustOffsetRange = function (offsetRange) {\n var _a = this.cfg,\n start = _a.start,\n end = _a.end; // 针对不同的滑动组件,处理的方式不同\n\n switch (this.currentTarget) {\n case 'minHandler':\n {\n var min = 0 - start;\n var max = 1 - start;\n return Math.min(max, Math.max(min, offsetRange));\n }\n\n case 'maxHandler':\n {\n var min = 0 - end;\n var max = 1 - end;\n return Math.min(max, Math.max(min, offsetRange));\n }\n\n case 'foreground':\n {\n var min = 0 - start;\n var max = 1 - end;\n return Math.min(max, Math.max(min, offsetRange));\n }\n }\n };\n\n Slider.prototype.updateStartEnd = function (offsetRange) {\n var _a = this.cfg,\n start = _a.start,\n end = _a.end; // 操作不同的组件,反馈不一样\n\n switch (this.currentTarget) {\n case 'minHandler':\n start += offsetRange;\n break;\n\n case 'maxHandler':\n end += offsetRange;\n break;\n\n case 'foreground':\n start += offsetRange;\n end += offsetRange;\n break;\n }\n\n this.set('start', start);\n this.set('end', end);\n };\n /**\n * 调整 text 的位置,自动躲避\n * 根据位置,调整返回新的位置\n * @param range\n */\n\n\n Slider.prototype._dodgeText = function (range, minTextShape, maxTextShape) {\n var _a, _b;\n\n var _c = this.cfg,\n handlerStyle = _c.handlerStyle,\n width = _c.width;\n var PADDING = 2;\n var handlerWidth = (0, _util.get)(handlerStyle, 'width', _constant.DEFAULT_HANDLER_WIDTH);\n var min = range[0],\n max = range[1];\n var sorted = false; // 如果交换了位置,则对应的 min max 也交互\n\n if (min > max) {\n _a = [max, min], min = _a[0], max = _a[1];\n _b = [maxTextShape, minTextShape], minTextShape = _b[0], maxTextShape = _b[1];\n sorted = true;\n } // 避让规则,优先显示在两侧,只有显示不下的时候,才显示在中间\n\n\n var minBBox = minTextShape.getBBox();\n var maxBBox = maxTextShape.getBBox();\n var minAttrs = minBBox.width > min - PADDING ? {\n x: min + handlerWidth / 2 + PADDING,\n textAlign: 'left'\n } : {\n x: min - handlerWidth / 2 - PADDING,\n textAlign: 'right'\n };\n var maxAttrs = maxBBox.width > width - max - PADDING ? {\n x: max - handlerWidth / 2 - PADDING,\n textAlign: 'right'\n } : {\n x: max + handlerWidth / 2 + PADDING,\n textAlign: 'left'\n };\n return !sorted ? [minAttrs, maxAttrs] : [maxAttrs, minAttrs];\n };\n\n Slider.prototype.draw = function () {\n var container = this.get('container');\n var canvas = container && container.get('canvas');\n\n if (canvas) {\n canvas.draw();\n }\n };\n\n Slider.prototype.getContainerDOM = function () {\n var container = this.get('container');\n var canvas = container && container.get('canvas');\n return canvas && canvas.get('container');\n };\n\n return Slider;\n}(_groupComponent.default);\n\nexports.Slider = Slider;\nvar _default = Slider;\nexports.default = _default;\n\n/***/ }),\n/* 845 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.Trend = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar _constant = __webpack_require__(846);\n\nvar _path = __webpack_require__(847);\n\nvar Trend =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Trend, _super);\n\n function Trend() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Trend.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'trend',\n x: 0,\n y: 0,\n width: 200,\n height: 16,\n smooth: true,\n isArea: false,\n data: [],\n backgroundStyle: _constant.BACKGROUND_STYLE,\n lineStyle: _constant.LINE_STYLE,\n areaStyle: _constant.AREA_STYLE\n });\n };\n\n Trend.prototype.renderInner = function (group) {\n var _a = this.cfg,\n width = _a.width,\n height = _a.height,\n data = _a.data,\n smooth = _a.smooth,\n isArea = _a.isArea,\n backgroundStyle = _a.backgroundStyle,\n lineStyle = _a.lineStyle,\n areaStyle = _a.areaStyle; // 背景\n\n this.addShape(group, {\n id: this.getElementId('background'),\n type: 'rect',\n attrs: (0, _tslib.__assign)({\n x: 0,\n y: 0,\n width: width,\n height: height\n }, backgroundStyle)\n });\n var path = (0, _path.dataToPath)(data, width, height, smooth); // 线\n\n this.addShape(group, {\n id: this.getElementId('line'),\n type: 'path',\n attrs: (0, _tslib.__assign)({\n path: path\n }, lineStyle)\n }); // area\n // 在 path 的基础上,增加两个坐标点\n\n if (isArea) {\n var areaPath = (0, _path.linePathToAreaPath)(path, width, height, data);\n this.addShape(group, {\n id: this.getElementId('area'),\n type: 'path',\n attrs: (0, _tslib.__assign)({\n path: areaPath\n }, areaStyle)\n });\n }\n };\n\n Trend.prototype.applyOffset = function () {\n var _a = this.cfg,\n x = _a.x,\n y = _a.y; // 统一移动到对应的位置\n\n this.moveElementTo(this.get('group'), {\n x: x,\n y: y\n });\n };\n\n return Trend;\n}(_groupComponent.default);\n\nexports.Trend = Trend;\nvar _default = Trend;\nexports.default = _default;\n\n/***/ }),\n/* 846 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.AREA_STYLE = exports.LINE_STYLE = exports.BACKGROUND_STYLE = void 0;\nvar BACKGROUND_STYLE = {\n // fill: 'red',\n opacity: 0\n};\nexports.BACKGROUND_STYLE = BACKGROUND_STYLE;\nvar LINE_STYLE = {\n stroke: '#C5C5C5',\n strokeOpacity: 0.85\n};\nexports.LINE_STYLE = LINE_STYLE;\nvar AREA_STYLE = {\n fill: '#CACED4',\n opacity: 0.85\n};\nexports.AREA_STYLE = AREA_STYLE;\n\n/***/ }),\n/* 847 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLinePath = getLinePath;\nexports.getSmoothLinePath = getSmoothLinePath;\nexports.dataToPath = dataToPath;\nexports.getAreaLineY = getAreaLineY;\nexports.linePathToAreaPath = linePathToAreaPath;\n\nvar _tslib = __webpack_require__(1);\n\nvar _pathUtil = __webpack_require__(95);\n\nvar _scale = __webpack_require__(101);\n\nvar _util = __webpack_require__(0);\n\n/**\n * 点数组转 path\n * @param points\n */\nfunction pointsToPath(points) {\n return (0, _util.map)(points, function (p, idx) {\n var command = idx === 0 ? 'M' : 'L';\n var x = p[0],\n y = p[1];\n return [command, x, y];\n });\n}\n/**\n * 将点连接成路径 path\n * @param points\n */\n\n\nfunction getLinePath(points) {\n return pointsToPath(points);\n}\n/**\n * 将点连成平滑的曲线\n * @param points\n */\n\n\nfunction getSmoothLinePath(points) {\n if (points.length <= 2) {\n // 两点以内直接绘制成路径\n return getLinePath(points);\n }\n\n var data = [];\n (0, _util.each)(points, function (p) {\n // 当前点和上一个点一样的时候,忽略掉\n if (!(0, _util.isEqual)(p, data.slice(data.length - 2))) {\n data.push(p[0], p[1]);\n }\n }); // const constraint = [ // 范围\n // [ 0, 0 ],\n // [ 1, 1 ],\n // ];\n\n var path = (0, _pathUtil.catmullRom2Bezier)(data, false);\n\n var _a = (0, _util.head)(points),\n x = _a[0],\n y = _a[1];\n\n path.unshift(['M', x, y]);\n return path;\n}\n/**\n * 将数据转成 path,利用 scale 的归一化能力\n * @param data\n * @param width\n * @param height\n * @param smooth\n */\n\n\nfunction dataToPath(data, width, height, smooth) {\n if (smooth === void 0) {\n smooth = true;\n } // 利用 scale 来获取 y 上的映射\n\n\n var y = new _scale.Linear({\n values: data\n });\n var x = new _scale.Category({\n values: (0, _util.map)(data, function (v, idx) {\n return idx;\n })\n });\n var points = (0, _util.map)(data, function (v, idx) {\n return [x.scale(idx) * width, height - y.scale(v) * height];\n });\n return smooth ? getSmoothLinePath(points) : getLinePath(points);\n}\n/**\n * 获得 area 面积的横向连接线的 px 位置\n * @param data\n * @param width\n * @param height\n */\n\n\nfunction getAreaLineY(data, height) {\n var y = new _scale.Linear({\n values: data\n });\n var lineY = Math.max(0, y.min);\n return height - y.scale(lineY) * height;\n}\n/**\n * 线 path 转 area path\n * @param path\n * @param width\n * @param height\n */\n\n\nfunction linePathToAreaPath(path, width, height, data) {\n var areaPath = (0, _tslib.__spreadArrays)(path);\n var lineYPx = getAreaLineY(data, height);\n areaPath.push(['L', width, lineYPx]);\n areaPath.push(['L', 0, lineYPx]);\n areaPath.push(['Z']);\n return areaPath;\n}\n\n/***/ }),\n/* 848 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SLIDER_CHANGE = exports.TEXT_STYLE = exports.HANDLER_STYLE = exports.DEFAULT_HANDLER_WIDTH = exports.FOREGROUND_STYLE = exports.BACKGROUND_STYLE = void 0;\n\n/**\n * 一些默认的样式配置\n */\nvar BACKGROUND_STYLE = {\n fill: '#416180',\n opacity: 0.05\n};\nexports.BACKGROUND_STYLE = BACKGROUND_STYLE;\nvar FOREGROUND_STYLE = {\n fill: '#5B8FF9',\n opacity: 0.15,\n cursor: 'move'\n};\nexports.FOREGROUND_STYLE = FOREGROUND_STYLE;\nvar DEFAULT_HANDLER_WIDTH = 10;\nexports.DEFAULT_HANDLER_WIDTH = DEFAULT_HANDLER_WIDTH;\nvar HANDLER_STYLE = {\n width: DEFAULT_HANDLER_WIDTH,\n height: 24\n};\nexports.HANDLER_STYLE = HANDLER_STYLE;\nvar TEXT_STYLE = {\n textBaseline: 'middle',\n fill: '#000',\n opacity: 0.45\n};\nexports.TEXT_STYLE = TEXT_STYLE;\nvar SLIDER_CHANGE = 'sliderchange';\nexports.SLIDER_CHANGE = SLIDER_CHANGE;\n\n/***/ }),\n/* 849 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.Handler = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar DEFAULT_STYLE = {\n fill: '#F7F7F7',\n stroke: '#BFBFBF',\n radius: 2,\n opacity: 1,\n cursor: 'ew-resize',\n // 高亮的颜色\n highLightFill: '#FFF'\n};\n\nvar Handler =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Handler, _super);\n\n function Handler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Handler.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'handler',\n x: 0,\n y: 0,\n width: 10,\n height: 24,\n style: DEFAULT_STYLE\n });\n };\n\n Handler.prototype.renderInner = function (group) {\n var _a = this.cfg,\n width = _a.width,\n height = _a.height,\n style = _a.style;\n var fill = style.fill,\n stroke = style.stroke,\n radius = style.radius,\n opacity = style.opacity,\n cursor = style.cursor; // 按钮框框\n\n this.addShape(group, {\n type: 'rect',\n id: this.getElementId('background'),\n attrs: {\n x: 0,\n y: 0,\n width: width,\n height: height,\n fill: fill,\n stroke: stroke,\n radius: radius,\n opacity: opacity,\n cursor: cursor\n }\n }); // 两根竖线\n\n var x1 = 1 / 3 * width;\n var x2 = 2 / 3 * width;\n var y1 = 1 / 4 * height;\n var y2 = 3 / 4 * height;\n this.addShape(group, {\n id: this.getElementId('line-left'),\n type: 'line',\n attrs: {\n x1: x1,\n y1: y1,\n x2: x1,\n y2: y2,\n stroke: stroke,\n cursor: cursor\n }\n });\n this.addShape(group, {\n id: this.getElementId('line-right'),\n type: 'line',\n attrs: {\n x1: x2,\n y1: y1,\n x2: x2,\n y2: y2,\n stroke: stroke,\n cursor: cursor\n }\n });\n };\n\n Handler.prototype.applyOffset = function () {\n this.moveElementTo(this.get('group'), {\n x: this.get('x'),\n y: this.get('y')\n });\n };\n\n Handler.prototype.initEvent = function () {\n this.bindEvents();\n };\n\n Handler.prototype.bindEvents = function () {\n var _this = this;\n\n this.get('group').on('mouseenter', function () {\n var highLightFill = _this.get('style').highLightFill;\n\n _this.getElementByLocalId('background').attr('fill', highLightFill);\n\n _this.draw();\n });\n this.get('group').on('mouseleave', function () {\n var fill = _this.get('style').fill;\n\n _this.getElementByLocalId('background').attr('fill', fill);\n\n _this.draw();\n });\n };\n\n Handler.prototype.draw = function () {\n var canvas = this.get('container').get('canvas');\n\n if (canvas) {\n canvas.draw();\n }\n };\n\n return Handler;\n}(_groupComponent.default);\n\nexports.Handler = Handler;\nvar _default = Handler;\nexports.default = _default;\n\n/***/ }),\n/* 850 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _scrollbar = __webpack_require__(851);\n\nObject.keys(_scrollbar).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _scrollbar[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _scrollbar[key];\n }\n });\n});\n\n/***/ }),\n/* 851 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scrollbar = exports.DEFAULT_THEME = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _domUtil = __webpack_require__(112);\n\nvar _util = __webpack_require__(0);\n\nvar _groupComponent = _interopRequireDefault(__webpack_require__(43));\n\nvar DEFAULT_STYLE = {\n trackColor: 'rgba(0,0,0,0)',\n thumbColor: 'rgba(0,0,0,0.15)',\n size: 8,\n lineCap: 'round'\n};\nvar DEFAULT_THEME = {\n // 默认样式\n default: DEFAULT_STYLE,\n // 鼠标 hover 的样式\n hover: {\n thumbColor: 'rgba(0,0,0,0.2)'\n }\n};\nexports.DEFAULT_THEME = DEFAULT_THEME;\n\nvar Scrollbar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Scrollbar, _super);\n\n function Scrollbar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.clearEvents = _util.noop;\n\n _this.onStartEvent = function (isMobile) {\n return function (e) {\n _this.isMobile = isMobile;\n e.originalEvent.preventDefault();\n var clientX = isMobile ? (0, _util.get)(e.originalEvent, 'touches.0.clientX') : e.clientX;\n var clientY = isMobile ? (0, _util.get)(e.originalEvent, 'touches.0.clientY') : e.clientY; // 将开始的点记录下来\n\n _this.startPos = _this.cfg.isHorizontal ? clientX : clientY;\n\n _this.bindLaterEvent();\n };\n };\n\n _this.bindLaterEvent = function () {\n var containerDOM = _this.getContainerDOM();\n\n var events = [];\n\n if (_this.isMobile) {\n events = [(0, _domUtil.addEventListener)(containerDOM, 'touchmove', _this.onMouseMove), (0, _domUtil.addEventListener)(containerDOM, 'touchend', _this.onMouseUp), (0, _domUtil.addEventListener)(containerDOM, 'touchcancel', _this.onMouseUp)];\n } else {\n events = [(0, _domUtil.addEventListener)(containerDOM, 'mousemove', _this.onMouseMove), (0, _domUtil.addEventListener)(containerDOM, 'mouseup', _this.onMouseUp), // 为了保证划出 canvas containerDom 时还没触发 mouseup\n (0, _domUtil.addEventListener)(containerDOM, 'mouseleave', _this.onMouseUp)];\n }\n\n _this.clearEvents = function () {\n events.forEach(function (e) {\n e.remove();\n });\n };\n }; // 拖拽滑块的事件回调\n // 这里是 dom 原生事件,绑定在 dom 元素上的\n\n\n _this.onMouseMove = function (e) {\n var _a = _this.cfg,\n isHorizontal = _a.isHorizontal,\n thumbOffset = _a.thumbOffset;\n e.preventDefault();\n var clientX = _this.isMobile ? (0, _util.get)(e, 'touches.0.clientX') : e.clientX;\n var clientY = _this.isMobile ? (0, _util.get)(e, 'touches.0.clientY') : e.clientY; // 鼠标松开的位置\n\n var endPos = isHorizontal ? clientX : clientY; // 滑块需要移动的距离, 由于这里是对滑块监听,所以移动的距离就是 diffDis, 如果监听对象是 container dom,则需要算比例\n\n var diff = endPos - _this.startPos; // 更新 _startPos\n\n _this.startPos = endPos;\n\n _this.updateThumbOffset(thumbOffset + diff);\n };\n\n _this.onMouseUp = function (e) {\n e.preventDefault();\n\n _this.clearEvents();\n }; // 点击滑道的事件回调,移动滑块位置\n\n\n _this.onTrackClick = function (e) {\n var _a = _this.cfg,\n isHorizontal = _a.isHorizontal,\n x = _a.x,\n y = _a.y,\n thumbLen = _a.thumbLen;\n\n var containerDOM = _this.getContainerDOM();\n\n var rect = containerDOM.getBoundingClientRect();\n var clientX = e.clientX,\n clientY = e.clientY;\n var offset = isHorizontal ? clientX - rect.left - x - thumbLen / 2 : clientY - rect.top - y - thumbLen / 2;\n\n var newOffset = _this.validateRange(offset);\n\n _this.updateThumbOffset(newOffset);\n };\n\n _this.onThumbMouseOver = function () {\n var thumbColor = _this.cfg.theme.hover.thumbColor;\n\n _this.getElementByLocalId('thumb').attr('stroke', thumbColor);\n\n _this.draw();\n };\n\n _this.onThumbMouseOut = function () {\n var thumbColor = _this.cfg.theme.default.thumbColor;\n\n _this.getElementByLocalId('thumb').attr('stroke', thumbColor);\n\n _this.draw();\n };\n\n return _this;\n }\n\n Scrollbar.prototype.setRange = function (min, max) {\n this.set('minLimit', min);\n this.set('maxLimit', max);\n var curValue = this.getValue();\n var newValue = (0, _util.clamp)(curValue, min, max);\n\n if (curValue !== newValue && !this.get('isInit')) {\n this.setValue(newValue);\n }\n };\n\n Scrollbar.prototype.getRange = function () {\n var min = this.get('minLimit') || 0;\n var max = this.get('maxLimit') || 1;\n return {\n min: min,\n max: max\n };\n };\n\n Scrollbar.prototype.setValue = function (value) {\n var range = this.getRange();\n var originalValue = this.getValue();\n this.update({\n thumbOffset: (this.get('trackLen') - this.get('thumbLen')) * (0, _util.clamp)(value, range.min, range.max)\n });\n this.delegateEmit('valuechange', {\n originalValue: originalValue,\n value: this.getValue()\n });\n };\n\n Scrollbar.prototype.getValue = function () {\n return (0, _util.clamp)(this.get('thumbOffset') / (this.get('trackLen') - this.get('thumbLen')), 0, 1);\n };\n\n Scrollbar.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n name: 'scrollbar',\n isHorizontal: true,\n minThumbLen: 20,\n thumbOffset: 0,\n theme: DEFAULT_THEME\n });\n };\n\n Scrollbar.prototype.renderInner = function (group) {\n this.renderTrackShape(group);\n this.renderThumbShape(group);\n };\n\n Scrollbar.prototype.applyOffset = function () {\n this.moveElementTo(this.get('group'), {\n x: this.get('x'),\n y: this.get('y')\n });\n };\n\n Scrollbar.prototype.initEvent = function () {\n this.bindEvents();\n }; // 创建滑道的 shape\n\n\n Scrollbar.prototype.renderTrackShape = function (group) {\n var _a = this.cfg,\n trackLen = _a.trackLen,\n _b = _a.theme,\n theme = _b === void 0 ? {\n default: {}\n } : _b;\n var _c = theme.default,\n lineCap = _c.lineCap,\n trackColor = _c.trackColor,\n size = _c.size;\n var attrs = this.get('isHorizontal') ? {\n x1: 0 + size / 2,\n y1: size / 2,\n x2: trackLen - size / 2,\n y2: size / 2,\n lineWidth: size,\n stroke: trackColor,\n lineCap: lineCap\n } : {\n x1: size / 2,\n y1: 0 + size / 2,\n x2: size / 2,\n y2: trackLen - size / 2,\n lineWidth: size,\n stroke: trackColor,\n lineCap: lineCap\n };\n return this.addShape(group, {\n id: this.getElementId('track'),\n name: 'track',\n type: 'line',\n attrs: attrs\n });\n }; // 创建滑块的 shape\n\n\n Scrollbar.prototype.renderThumbShape = function (group) {\n var _a = this.cfg,\n thumbOffset = _a.thumbOffset,\n thumbLen = _a.thumbLen,\n _b = _a.theme,\n theme = _b === void 0 ? {\n default: {}\n } : _b;\n var _c = theme.default,\n size = _c.size,\n lineCap = _c.lineCap,\n thumbColor = _c.thumbColor;\n var attrs = this.get('isHorizontal') ? {\n x1: thumbOffset + size / 2,\n y1: size / 2,\n x2: thumbOffset + thumbLen - size / 2,\n y2: size / 2,\n lineWidth: size,\n stroke: thumbColor,\n lineCap: lineCap,\n cursor: 'default'\n } : {\n x1: size / 2,\n y1: thumbOffset + size / 2,\n x2: size / 2,\n y2: thumbOffset + thumbLen - size / 2,\n lineWidth: size,\n stroke: thumbColor,\n lineCap: lineCap,\n cursor: 'default'\n };\n return this.addShape(group, {\n id: this.getElementId('thumb'),\n name: 'thumb',\n type: 'line',\n attrs: attrs\n });\n };\n\n Scrollbar.prototype.bindEvents = function () {\n var group = this.get('group');\n group.on('mousedown', this.onStartEvent(false));\n group.on('mouseup', this.onMouseUp);\n group.on('touchstart', this.onStartEvent(true));\n group.on('touchend', this.onMouseUp);\n var trackShape = group.findById(this.getElementId('track'));\n trackShape.on('click', this.onTrackClick);\n var thumbShape = group.findById(this.getElementId('thumb'));\n thumbShape.on('mouseover', this.onThumbMouseOver);\n thumbShape.on('mouseout', this.onThumbMouseOut);\n };\n\n Scrollbar.prototype.getContainerDOM = function () {\n var container = this.get('container');\n var canvas = container && container.get('canvas');\n return canvas && canvas.get('container');\n };\n\n Scrollbar.prototype.validateRange = function (offset) {\n var _a = this.cfg,\n thumbLen = _a.thumbLen,\n trackLen = _a.trackLen;\n var newOffset = offset;\n\n if (offset + thumbLen > trackLen) {\n newOffset = trackLen - thumbLen;\n } else if (offset + thumbLen < thumbLen) {\n newOffset = 0;\n }\n\n return newOffset;\n };\n\n Scrollbar.prototype.draw = function () {\n var container = this.get('container');\n var canvas = container && container.get('canvas');\n\n if (canvas) {\n canvas.draw();\n }\n };\n\n Scrollbar.prototype.updateThumbOffset = function (offset) {\n var _a = this.cfg,\n thumbOffset = _a.thumbOffset,\n isHorizontal = _a.isHorizontal,\n thumbLen = _a.thumbLen,\n size = _a.size;\n var newOffset = this.validateRange(offset);\n\n if (newOffset === thumbOffset) {\n // 如果更新后的 offset 与原值相同,则不改变\n return;\n }\n\n var thumbShape = this.getElementByLocalId('thumb');\n\n if (isHorizontal) {\n thumbShape.attr({\n x1: newOffset + size / 2,\n x2: newOffset + thumbLen - size / 2\n });\n } else {\n thumbShape.attr({\n y1: newOffset + size / 2,\n y2: newOffset + thumbLen - size / 2\n });\n }\n\n this.emitOffsetChange(newOffset);\n };\n\n Scrollbar.prototype.emitOffsetChange = function (offset) {\n var _a = this.cfg,\n originalValue = _a.thumbOffset,\n trackLen = _a.trackLen,\n thumbLen = _a.thumbLen;\n this.cfg.thumbOffset = offset; // 发送事件\n\n this.emit('scrollchange', {\n thumbOffset: offset,\n ratio: (0, _util.clamp)(offset / (trackLen - thumbLen), 0, 1)\n });\n this.delegateEmit('valuechange', {\n originalValue: originalValue,\n value: offset\n });\n };\n\n return Scrollbar;\n}(_groupComponent.default);\n\nexports.Scrollbar = Scrollbar;\n\n/***/ }),\n/* 852 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 853 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 854 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getNormalizedValue = void 0;\n\nvar stat_1 = __webpack_require__(855);\n/**\n * parse the value position\n * @param val\n * @param scale\n */\n\n\nfunction getNormalizedValue(val, scale) {\n var scaled;\n\n switch (val) {\n case 'start':\n return 0;\n\n case 'end':\n return 1;\n\n case 'median':\n {\n scaled = scale.isCategory ? stat_1.getMedian(scale.values.map(function (_, idx) {\n return idx;\n })) : stat_1.getMedian(scale.values);\n break;\n }\n\n case 'mean':\n {\n scaled = scale.isCategory ? (scale.values.length - 1) / 2 : stat_1.getMean(scale.values);\n break;\n }\n\n case 'min':\n scaled = scale.isCategory ? 0 : scale[val];\n break;\n\n case 'max':\n scaled = scale.isCategory ? scale.values.length - 1 : scale[val];\n break;\n\n default:\n scaled = val;\n break;\n }\n\n return scale.scale(scaled);\n}\n\nexports.getNormalizedValue = getNormalizedValue;\n\n/***/ }),\n/* 855 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getMean = exports.getMedian = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n/**\n * 获得中位数\n * @param array\n */\n\n\nfunction getMedian(array) {\n var arr = tslib_1.__spreadArrays(array); // 先排序\n\n\n arr.sort(function (a, b) {\n return a - b;\n });\n var len = arr.length; // median\n // 0\n\n if (len === 0) {\n return 0;\n } // 奇数\n\n\n if (len % 2 === 1) {\n return arr[(len - 1) / 2];\n } // 偶数\n\n\n return (arr[len / 2] + arr[len / 2 - 1]) / 2;\n}\n\nexports.getMedian = getMedian;\n/**\n * 获得平均值\n * @param array\n */\n\nfunction getMean(array) {\n var sum = util_1.reduce(array, function (r, num) {\n return r += isNaN(num) || !util_1.isNumber(num) ? 0 : num;\n }, 0);\n return array.length === 0 ? 0 : sum / array.length;\n}\n\nexports.getMean = getMean;\n\n/***/ }),\n/* 856 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70);\n\nvar util_1 = __webpack_require__(52);\n\nvar Circle =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Circle, _super);\n\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n r: 0\n });\n };\n\n Circle.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n var halfLineWidth = lineWidth / 2;\n var absDistance = util_1.distance(cx, cy, x, y); // 直接用距离,如果同时存在边和填充时,可以减少两次计算\n\n if (isFill && isStroke) {\n return absDistance <= r + halfLineWidth;\n }\n\n if (isFill) {\n return absDistance <= r;\n }\n\n if (isStroke) {\n return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n }\n\n return false;\n };\n\n Circle.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n context.beginPath();\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n context.closePath();\n };\n\n return Circle;\n}(base_1.default);\n\nexports.default = Circle;\n\n/***/ }),\n/* 857 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 椭圆\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70); // 根据椭圆公式计算 x*x/rx*rx + y*y/ry*ry;\n\n\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n return squareX / (rx * rx) + squareY / (ry * ry);\n}\n\nvar Ellipse =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Ellipse, _super);\n\n function Ellipse() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n rx: 0,\n ry: 0\n });\n };\n\n Ellipse.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var halfLineWith = lineWidth / 2;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx,\n ry = attrs.ry;\n var squareX = (x - cx) * (x - cx);\n var squareY = (y - cy) * (y - cy); // 使用椭圆的公式: x*x/rx*rx + y*y/ry*ry = 1;\n\n if (isFill && isStroke) {\n return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n\n if (isFill) {\n return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n }\n\n if (isStroke) {\n return ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 && ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n\n return false;\n };\n\n Ellipse.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n context.beginPath(); // 兼容逻辑\n\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n } else {\n // 如果不支持,则使用圆来绘制,进行变形\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.save();\n context.translate(cx, cy);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, 0, Math.PI * 2);\n context.restore();\n context.closePath();\n }\n };\n\n return Ellipse;\n}(base_1.default);\n\nexports.default = Ellipse;\n\n/***/ }),\n/* 858 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 图片\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70);\n\nvar util_1 = __webpack_require__(52);\n\nfunction isCanvas(dom) {\n return dom instanceof HTMLElement && util_1.isString(dom.nodeName) && dom.nodeName.toUpperCase() === 'CANVAS';\n}\n\nvar ImageShape =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(ImageShape, _super);\n\n function ImageShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n ImageShape.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n };\n\n ImageShape.prototype.initAttrs = function (attrs) {\n this._setImage(attrs.img);\n }; // image 不计算 stroke\n\n\n ImageShape.prototype.isStroke = function () {\n return false;\n }; // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n\n\n ImageShape.prototype.isOnlyHitBox = function () {\n return true;\n };\n\n ImageShape.prototype._afterLoading = function () {\n if (this.get('toDraw') === true) {\n var canvas = this.get('canvas');\n\n if (canvas) {\n // 这段应该改成局部渲染\n canvas.draw();\n } else {\n // 这种方式如果发生遮挡会出现问题\n this.createPath(this.get('context'));\n }\n }\n };\n\n ImageShape.prototype._setImage = function (img) {\n var _this = this;\n\n var attrs = this.attrs;\n\n if (util_1.isString(img)) {\n var image_1 = new Image();\n\n image_1.onload = function () {\n // 图片未加载完,则已经被销毁\n if (_this.destroyed) {\n return false;\n } // 缓存原始地址,可以做对比,防止重复加载图片\n // 如果考虑到在加载过程中可能替换 img 属性,则情况更加复杂\n // this.set('imgSrc', img);\n // 这里会循环调用 _setImage 方法,但不会再走这个分支\n\n\n _this.attr('img', image_1);\n\n _this.set('loading', false);\n\n _this._afterLoading();\n\n var callback = _this.get('callback');\n\n if (callback) {\n callback.call(_this);\n }\n }; // 设置跨域\n\n\n image_1.crossOrigin = 'Anonymous';\n image_1.src = img; // loading 过程中不绘制\n\n this.set('loading', true);\n } else if (img instanceof Image) {\n // 如果是一个 image 对象,则设置宽高\n if (!attrs.width) {\n attrs.width = img.width;\n }\n\n if (!attrs.height) {\n attrs.height = img.height;\n }\n } else if (isCanvas(img)) {\n // 如果设置了 canvas 对象\n if (!attrs.width) {\n attrs.width = Number(img.getAttribute('width'));\n }\n\n if (!attrs.height) {\n attrs.height, Number(img.getAttribute('height'));\n }\n }\n };\n\n ImageShape.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue); // 如果加载的已经是当前图片,则不再处理\n\n\n if (name === 'img') {\n // 可以加缓冲,&& this.get('imgSrc') !== value\n this._setImage(value);\n }\n };\n\n ImageShape.prototype.createPath = function (context) {\n // 正在加载则不绘制\n if (this.get('loading')) {\n this.set('toDraw', true); // 加载完成后绘制\n\n this.set('context', context);\n return;\n }\n\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y,\n width = attrs.width,\n height = attrs.height,\n sx = attrs.sx,\n sy = attrs.sy,\n swidth = attrs.swidth,\n sheight = attrs.sheight;\n var img = attrs.img;\n\n if (img instanceof Image || isCanvas(img)) {\n if (!util_1.isNil(sx) && !util_1.isNil(sy) && !util_1.isNil(swidth) && !util_1.isNil(sheight)) {\n context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n } else {\n context.drawImage(img, x, y, width, height);\n }\n }\n };\n\n return ImageShape;\n}(base_1.default);\n\nexports.default = ImageShape;\n\n/***/ }),\n/* 859 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\n\n\nvar g_math_1 = __webpack_require__(35);\n\nvar base_1 = __webpack_require__(70);\n\nvar line_1 = __webpack_require__(188);\n\nvar ArrowUtil = __webpack_require__(187);\n\nvar Line =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Line, _super);\n\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n startArrow: false,\n endArrow: false\n });\n };\n\n Line.prototype.initAttrs = function (attrs) {\n this.setArrow();\n }; // 更新属性时,检测是否更改了箭头\n\n\n Line.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue); // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n\n\n this.setArrow();\n };\n\n Line.prototype.setArrow = function () {\n var attrs = this.attr();\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2,\n startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, x2, y2, x1, y1);\n }\n\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, x1, y1, x2, y2);\n }\n };\n\n Line.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n if (!isStroke || !lineWidth) {\n return false;\n }\n\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return line_1.default(x1, y1, x2, y2, lineWidth, x, y);\n };\n\n Line.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2,\n startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n var startArrowDistance = {\n dx: 0,\n dy: 0\n };\n var endArrowDistance = {\n dx: 0,\n dy: 0\n };\n\n if (startArrow && startArrow.d) {\n startArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.startArrow.d);\n }\n\n if (endArrow && endArrow.d) {\n endArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.endArrow.d);\n }\n\n context.beginPath(); // 如果自定义箭头,线条相应缩进\n\n context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy);\n context.lineTo(x2 - endArrowDistance.dx, y2 - endArrowDistance.dy);\n };\n\n Line.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of line\n * @return {number} length\n */\n\n\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return g_math_1.Line.length(x1, y1, x2, y2);\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return g_math_1.Line.pointAt(x1, y1, x2, y2, ratio);\n };\n\n return Line;\n}(base_1.default);\n\nexports.default = Line;\n\n/***/ }),\n/* 860 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview Marker\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar path_util_1 = __webpack_require__(95);\n\nvar base_1 = __webpack_require__(70);\n\nvar util_2 = __webpack_require__(52);\n\nvar draw_1 = __webpack_require__(143);\n\nvar Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return [['M', x - r, y], ['A', r, r, 0, 1, 0, x + r, y], ['A', r, r, 0, 1, 0, x - r, y]];\n },\n // 正方形\n square: function square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function triangle(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n },\n // 倒三角形\n 'triangle-down': function triangleDown(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n }\n};\n\nvar Marker =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Marker, _super);\n\n function Marker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Marker.prototype.initAttrs = function (attrs) {\n this._resetParamsCache();\n }; // 重置绘制 path 存储的缓存\n\n\n Marker.prototype._resetParamsCache = function () {\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('paramsCache', {}); // 清理缓存\n }; // 更新属性时,检测是否更改了 path\n\n\n Marker.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (['symbol', 'x', 'y', 'r', 'radius'].indexOf(name) !== -1) {\n // path 相关属性更改时,清理缓存\n this._resetParamsCache();\n }\n }; // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n\n\n Marker.prototype.isOnlyHitBox = function () {\n return true;\n };\n\n Marker.prototype._getR = function (attrs) {\n // 兼容 r 和 radius 两种写法,推荐使用 r\n return util_1.isNil(attrs.r) ? attrs.radius : attrs.r;\n };\n\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y;\n var symbol = attrs.symbol || 'circle';\n\n var r = this._getR(attrs);\n\n var method;\n var path;\n\n if (util_2.isFunction(symbol)) {\n method = symbol;\n path = method(x, y, r); // 将 path 转成绝对路径\n\n path = path_util_1.path2Absolute(path);\n } else {\n // 内置 symbol 的 path 都是绝对路径,直接绘制即可,不需要对 path 进行特殊处理\n method = Marker.Symbols[symbol];\n\n if (!method) {\n console.warn(symbol + \" marker is not supported.\");\n return null;\n }\n\n path = method(x, y, r);\n }\n\n return path;\n };\n\n Marker.prototype.createPath = function (context) {\n var path = this._getPath();\n\n var paramsCache = this.get('paramsCache');\n draw_1.drawPath(this, context, {\n path: path\n }, paramsCache);\n };\n\n Marker.Symbols = Symbols;\n return Marker;\n}(base_1.default);\n\nexports.default = Marker;\n\n/***/ }),\n/* 861 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g_math_1 = __webpack_require__(35);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = __webpack_require__(70);\n\nvar path_util_1 = __webpack_require__(95);\n\nvar draw_1 = __webpack_require__(143);\n\nvar point_in_path_1 = __webpack_require__(429);\n\nvar polygon_1 = __webpack_require__(430);\n\nvar path_1 = __webpack_require__(862);\n\nvar ArrowUtil = __webpack_require__(187); // 是否在多个多边形内部\n\n\nfunction isInPolygons(polygons, x, y) {\n var isHit = false;\n\n for (var i = 0; i < polygons.length; i++) {\n var points = polygons[i];\n isHit = polygon_1.default(points, x, y);\n\n if (isHit) {\n break;\n }\n }\n\n return isHit;\n}\n\nvar Path =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Path, _super);\n\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n Path.prototype.initAttrs = function (attrs) {\n this._setPathArr(attrs.path);\n\n this.setArrow();\n }; // 更新属性时,检测是否更改了 path\n\n\n Path.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (name === 'path') {\n this._setPathArr(value);\n } // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n\n\n this.setArrow();\n }; // 将 path 转换成绝对路径\n\n\n Path.prototype._setPathArr = function (path) {\n // 转换 path 的格式\n this.attrs.path = path_util_1.path2Absolute(path);\n var hasArc = path_1.default.hasArc(path); // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n\n this.set('hasArc', hasArc);\n this.set('paramsCache', {}); // 清理缓存\n\n this.set('segments', null); // 延迟生成 path,在动画场景下可能不会有拾取\n\n this.set('curve', null);\n this.set('tCache', null);\n this.set('totalLength', null);\n };\n\n Path.prototype.getSegments = function () {\n var segments = this.get('segements');\n\n if (!segments) {\n segments = path_util_1.path2Segments(this.attr('path'));\n this.set('segments', segments);\n }\n\n return segments;\n };\n\n Path.prototype.setArrow = function () {\n var attrs = this.attr();\n var startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n\n if (startArrow) {\n var tangent = this.getStartTangent();\n ArrowUtil.addStartArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n\n if (endArrow) {\n var tangent = this.getEndTangent();\n ArrowUtil.addEndArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n };\n\n Path.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var segments = this.getSegments();\n var hasArc = this.get('hasArc');\n var isHit = false;\n\n if (isStroke) {\n var length_1 = this.getTotalLength();\n isHit = path_1.default.isPointInStroke(segments, lineWidth, x, y, length_1);\n }\n\n if (!isHit && isFill) {\n if (hasArc) {\n // 存在曲线时,暂时使用 canvas 的 api 计算,后续可以进行多边形切割\n isHit = point_in_path_1.default(this, x, y);\n } else {\n var path = this.attr('path');\n var extractResutl = path_1.default.extractPolygons(path); // 提取出来的多边形包含闭合的和非闭合的,在这里统一按照多边形处理\n\n isHit = isInPolygons(extractResutl.polygons, x, y) || isInPolygons(extractResutl.polylines, x, y);\n }\n }\n\n return isHit;\n };\n\n Path.prototype.createPath = function (context) {\n var attrs = this.attr();\n var paramsCache = this.get('paramsCache'); // 由于计算圆弧的参数成本很大,所以要缓存\n\n draw_1.drawPath(this, context, attrs, paramsCache);\n };\n\n Path.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get total length of path\n * @return {number} length\n */\n\n\n Path.prototype.getTotalLength = function () {\n var totalLength = this.get('totalLength');\n\n if (!util_1.isNil(totalLength)) {\n return totalLength;\n }\n\n this._calculateCurve();\n\n this._setTcache();\n\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Path.prototype.getPoint = function (ratio) {\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._calculateCurve();\n\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n var curve = this.get('curve');\n\n if (!tCache || tCache.length === 0) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2]\n };\n }\n\n return null;\n }\n\n util_1.each(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var seg = curve[index];\n\n if (util_1.isNil(seg) || util_1.isNil(index)) {\n return null;\n }\n\n var l = seg.length;\n var nextSeg = curve[index + 1];\n return g_math_1.Cubic.pointAt(seg[l - 2], seg[l - 1], nextSeg[1], nextSeg[2], nextSeg[3], nextSeg[4], nextSeg[5], nextSeg[6], subt);\n };\n\n Path.prototype._calculateCurve = function () {\n var path = this.attr().path;\n this.set('curve', path_1.default.pathToCurve(path));\n };\n\n Path.prototype._setTcache = function () {\n var totalLength = 0;\n var tempLength = 0; // 每段 curve 对应起止点的长度比例列表,形如: [[0, 0.25], [0.25, 0.6]. [0.6, 0.9], [0.9, 1]]\n\n var tCache = [];\n var segmentT;\n var segmentL;\n var segmentN;\n var l;\n var curve = this.get('curve');\n\n if (!curve) {\n return;\n }\n\n util_1.each(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n\n if (segmentN) {\n totalLength += g_math_1.Cubic.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]) || 0;\n }\n });\n this.set('totalLength', totalLength);\n\n if (totalLength === 0) {\n this.set('tCache', []);\n return;\n }\n\n util_1.each(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n\n if (segmentN) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = g_math_1.Cubic.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]); // 当 path 不连续时,segmentL 可能为空,为空时需要作为 0 处理\n\n tempLength += segmentL || 0;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n Path.prototype.getStartTangent = function () {\n var segments = this.getSegments();\n var result;\n\n if (segments.length > 1) {\n var startPoint = segments[0].currentPoint;\n var endPoint = segments[1].currentPoint;\n var tangent = segments[1].startTangent;\n result = [];\n\n if (tangent) {\n result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n result.push([startPoint[0], startPoint[1]]);\n } else {\n result.push([endPoint[0], endPoint[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n }\n\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n Path.prototype.getEndTangent = function () {\n var segments = this.getSegments();\n var length = segments.length;\n var result;\n\n if (length > 1) {\n var startPoint = segments[length - 2].currentPoint;\n var endPoint = segments[length - 1].currentPoint;\n var tangent = segments[length - 1].endTangent;\n result = [];\n\n if (tangent) {\n result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n result.push([endPoint[0], endPoint[1]]);\n } else {\n result.push([startPoint[0], startPoint[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n }\n\n return result;\n };\n\n return Path;\n}(base_1.default);\n\nexports.default = Path;\n\n/***/ }),\n/* 862 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n/**\n * @fileoverview path 的一些工具\n * @author dxq613@gmail.com\n */\n\n\nvar g_base_1 = __webpack_require__(27);\n\nvar g_math_1 = __webpack_require__(35);\n\nvar g_math_2 = __webpack_require__(35);\n\nvar matrix_util_1 = __webpack_require__(33);\n\nvar vec3 = __webpack_require__(176);\n\nvar util_1 = __webpack_require__(52);\n\nvar line_1 = __webpack_require__(188);\n\nvar arc_1 = __webpack_require__(431);\n\nvar transform = matrix_util_1.ext.transform;\n\nfunction hasArc(path) {\n var hasArc = false;\n var count = path.length;\n\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n\n if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n hasArc = true;\n break;\n }\n }\n\n return hasArc;\n}\n\nfunction isPointInStroke(segments, lineWidth, x, y, length) {\n var isHit = false;\n var halfWidth = lineWidth / 2;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint,\n params = segment.params,\n prePoint = segment.prePoint,\n box = segment.box; // 如果在前面已经生成过包围盒,直接按照包围盒计算\n\n if (box && !util_1.inBox(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, x, y)) {\n continue;\n }\n\n switch (segment.command) {\n // L 和 Z 都是直线, M 不进行拾取\n case 'L':\n case 'Z':\n isHit = line_1.default(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x, y);\n break;\n\n case 'Q':\n var qDistance = g_math_1.Quad.pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], x, y);\n isHit = qDistance <= lineWidth / 2;\n break;\n\n case 'C':\n var cDistance = g_math_2.Cubic.pointDistance(prePoint[0], // 上一段结束位置, 即 C 的起始点\n prePoint[1], params[1], // 'C' 的参数,1、2 为第一个控制点,3、4 为第二个控制点,5、6 为结束点\n params[2], params[3], params[4], params[5], params[6], x, y, length);\n isHit = cDistance <= lineWidth / 2;\n break;\n\n case 'A':\n // 计算点到椭圆圆弧的距离,暂时使用近似算法,后面可以改成切割法求最近距离\n var arcParams = segment.arcParams;\n var cx = arcParams.cx,\n cy = arcParams.cy,\n rx = arcParams.rx,\n ry = arcParams.ry,\n startAngle = arcParams.startAngle,\n endAngle = arcParams.endAngle,\n xRotation = arcParams.xRotation;\n var p = [x, y, 1];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var m = transform(null, [['t', -cx, -cy], ['r', -xRotation], ['s', 1 / scaleX, 1 / scaleY]]);\n vec3.transformMat3(p, p, m);\n isHit = arc_1.default(0, 0, r, startAngle, endAngle, lineWidth, p[0], p[1]);\n break;\n\n default:\n break;\n }\n\n if (isHit) {\n break;\n }\n }\n\n return isHit;\n}\n/**\n * 提取出内部的闭合多边形和非闭合的多边形,假设 path 不存在圆弧\n * @param {Array} path 路径\n * @returns {Array} 点的集合\n */\n\n\nfunction extractPolygons(path) {\n var count = path.length;\n var polygons = [];\n var polylines = [];\n var points = []; // 防止第一个命令不是 'M'\n\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n\n if (cmd === 'M') {\n // 遇到 'M' 判定是否是新数组,新数组中没有点\n if (points.length) {\n // 如果存在点,则说明没有遇到 'Z',开始了一个新的多边形\n polylines.push(points);\n points = []; // 创建新的点\n }\n\n points.push([params[1], params[2]]);\n } else if (cmd === 'Z') {\n if (points.length) {\n // 存在点\n polygons.push(points);\n points = []; // 开始新的点集合\n } // 如果不存在点,同时 'Z',则说明是错误,不处理\n\n } else {\n points.push([params[1], params[2]]);\n }\n } // 说明 points 未放入 polygons 或者 polyline\n // 仅当只有一个 M,没有 Z 时会发生这种情况\n\n\n if (points.length > 0) {\n polylines.push(points);\n }\n\n return {\n polygons: polygons,\n polylines: polylines\n };\n}\n\nexports.default = tslib_1.__assign({\n hasArc: hasArc,\n extractPolygons: extractPolygons,\n isPointInStroke: isPointInStroke\n}, g_base_1.PathUtil);\n\n/***/ }),\n/* 863 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70);\n\nvar polyline_1 = __webpack_require__(432);\n\nvar polygon_1 = __webpack_require__(430);\n\nvar Polygon =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Polygon, _super);\n\n function Polygon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Polygon.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var points = this.attr().points;\n var isHit = false;\n\n if (isStroke) {\n isHit = polyline_1.default(points, lineWidth, x, y, true);\n }\n\n if (!isHit && isFill) {\n isHit = polygon_1.default(points, x, y); // isPointInPath(shape, x, y);\n }\n\n return isHit;\n };\n\n Polygon.prototype.createPath = function (context) {\n var attrs = this.attr();\n var points = attrs.points;\n\n if (points.length < 2) {\n return;\n }\n\n context.beginPath();\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n\n if (i === 0) {\n context.moveTo(point[0], point[1]);\n } else {\n context.lineTo(point[0], point[1]);\n }\n }\n\n context.closePath();\n };\n\n return Polygon;\n}(base_1.default);\n\nexports.default = Polygon;\n\n/***/ }),\n/* 864 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g_math_1 = __webpack_require__(35);\n\nvar g_math_2 = __webpack_require__(35);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = __webpack_require__(70);\n\nvar polyline_1 = __webpack_require__(432);\n\nvar ArrowUtil = __webpack_require__(187);\n\nvar PolyLine =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(PolyLine, _super);\n\n function PolyLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n PolyLine.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n PolyLine.prototype.initAttrs = function (attrs) {\n this.setArrow();\n }; // 更新属性时,检测是否更改了 points\n\n\n PolyLine.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n this.setArrow();\n\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n\n PolyLine.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n\n PolyLine.prototype.setArrow = function () {\n var attrs = this.attr();\n var _a = this.attrs,\n points = _a.points,\n startArrow = _a.startArrow,\n endArrow = _a.endArrow;\n var length = points.length;\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, points[1][0], points[1][1], x1, y1);\n }\n\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, points[length - 2][0], points[length - 2][1], x2, y2);\n }\n }; // 不允许 fill\n\n\n PolyLine.prototype.isFill = function () {\n return false;\n };\n\n PolyLine.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n // 没有设置 stroke 不能被拾取, 没有线宽不能被拾取\n if (!isStroke || !lineWidth) {\n return false;\n }\n\n var points = this.attr().points;\n return polyline_1.default(points, lineWidth, x, y, false);\n }; // 始终填充\n\n\n PolyLine.prototype.isStroke = function () {\n return true;\n };\n\n PolyLine.prototype.createPath = function (context) {\n var _a = this.attr(),\n points = _a.points,\n startArrow = _a.startArrow,\n endArrow = _a.endArrow;\n\n var length = points.length;\n\n if (points.length < 2) {\n return;\n }\n\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1]; // 如果定义了箭头,并且是自定义箭头,线条相应缩进\n\n if (startArrow && startArrow.d) {\n var distance = ArrowUtil.getShortenOffset(x1, y1, points[1][0], points[1][1], startArrow.d);\n x1 += distance.dx;\n y1 += distance.dy;\n }\n\n if (endArrow && endArrow.d) {\n var distance = ArrowUtil.getShortenOffset(points[length - 2][0], points[length - 2][1], x2, y2, endArrow.d);\n x2 -= distance.dx;\n y2 -= distance.dy;\n }\n\n context.beginPath();\n context.moveTo(x1, y1);\n\n for (var i = 0; i < length - 1; i++) {\n var point = points[i];\n context.lineTo(point[0], point[1]);\n }\n\n context.lineTo(x2, y2);\n };\n\n PolyLine.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n\n\n PolyLine.prototype.getTotalLength = function () {\n var points = this.attr().points; // get totalLength from cache\n\n var totalLength = this.get('totalLength');\n\n if (!util_1.isNil(totalLength)) {\n return totalLength;\n }\n\n this.set('totalLength', g_math_2.Polyline.length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n PolyLine.prototype.getPoint = function (ratio) {\n var points = this.attr().points; // get tCache from cache\n\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n util_1.each(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return g_math_1.Line.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n\n PolyLine.prototype._setTcache = function () {\n var points = this.attr().points;\n\n if (!points || points.length === 0) {\n return;\n }\n\n var totalLength = this.getTotalLength();\n\n if (totalLength <= 0) {\n return;\n }\n\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n util_1.each(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = g_math_1.Line.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n PolyLine.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n PolyLine.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n\n return PolyLine;\n}(base_1.default);\n\nexports.default = PolyLine;\n\n/***/ }),\n/* 865 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 矩形\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70);\n\nvar parse_1 = __webpack_require__(427);\n\nvar util_1 = __webpack_require__(52);\n\nvar rect_1 = __webpack_require__(866);\n\nvar rect_radius_1 = __webpack_require__(867);\n\nvar point_in_path_1 = __webpack_require__(429);\n\nvar Rect =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Rect, _super);\n\n function Rect() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0\n });\n };\n\n Rect.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var minX = attrs.x;\n var minY = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius; // 无圆角时的策略\n\n if (!radius) {\n var halfWidth = lineWidth / 2; // 同时填充和带有边框\n\n if (isFill && isStroke) {\n return util_1.inBox(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);\n } // 仅填充\n\n\n if (isFill) {\n return util_1.inBox(minX, minY, width, height, x, y);\n }\n\n if (isStroke) {\n return rect_1.default(minX, minY, width, height, lineWidth, x, y);\n }\n } else {\n var isHit = false;\n\n if (isStroke) {\n isHit = rect_radius_1.default(minX, minY, width, height, radius, lineWidth, x, y);\n } // 仅填充时带有圆角的矩形直接通过图形拾取\n // 以后可以改成纯数学的近似拾取,将圆弧切割成多边形\n\n\n if (!isHit && isFill) {\n isHit = point_in_path_1.default(this, x, y);\n }\n\n return isHit;\n }\n };\n\n Rect.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n context.beginPath();\n\n if (radius === 0) {\n // 改成原生的rect方法\n context.rect(x, y, width, height);\n } else {\n var _a = parse_1.parseRadius(radius),\n r1 = _a[0],\n r2 = _a[1],\n r3 = _a[2],\n r4 = _a[3];\n\n context.moveTo(x + r1, y);\n context.lineTo(x + width - r2, y);\n r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n context.lineTo(x + width, y + height - r3);\n r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n context.lineTo(x + r4, y + height);\n r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n context.lineTo(x, y + r1);\n r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n context.closePath();\n }\n };\n\n return Rect;\n}(base_1.default);\n\nexports.default = Rect;\n\n/***/ }),\n/* 866 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(52);\n\nfunction inRect(minX, minY, width, height, lineWidth, x, y) {\n var halfWidth = lineWidth / 2; // 将四个边看做矩形来检测,比边的检测算法要快\n\n return util_1.inBox(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) || // 上边\n util_1.inBox(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) || // 右边\n util_1.inBox(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) || // 下边\n util_1.inBox(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y); // 左边\n}\n\nexports.default = inRect;\n\n/***/ }),\n/* 867 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar line_1 = __webpack_require__(188);\n\nvar arc_1 = __webpack_require__(431);\n\nfunction rectWithRadius(minX, minY, width, height, radius, lineWidth, x, y) {\n var halfWidth = lineWidth / 2;\n return line_1.default(minX + radius, minY, minX + width - radius, minY, lineWidth, x, y) || line_1.default(minX + width, minY + radius, minX + width, minY + height - radius, lineWidth, x, y) || line_1.default(minX + width - radius, minY + height, minX + radius, minY + height, lineWidth, x, y) || line_1.default(minX, minY + height - radius, minX, minY + radius, lineWidth, x, y) || arc_1.default(minX + width - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) || arc_1.default(minX + width - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x, y) || arc_1.default(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x, y) || arc_1.default(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x, y);\n}\n\nexports.default = rectWithRadius;\n\n/***/ }),\n/* 868 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview 文本\n * @author dxq613@gmail.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(70);\n\nvar util_1 = __webpack_require__(52);\n\nvar g_base_1 = __webpack_require__(27);\n\nvar Text =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Text, _super);\n\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n } // 默认文本属性\n\n\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n });\n }; // 仅仅使用包围盒检测来进行拾取\n\n\n Text.prototype.isOnlyHitBox = function () {\n return true;\n }; // 初始化时组合 font,同时判断 text 是否换行\n\n\n Text.prototype.initAttrs = function (attrs) {\n this._assembleFont();\n\n if (attrs.text) {\n this._setText(attrs.text);\n }\n }; // 组装字体\n\n\n Text.prototype._assembleFont = function () {\n var attrs = this.attrs;\n attrs.font = g_base_1.assembleFont(attrs);\n }; // 如果文本换行,则缓存数组\n\n\n Text.prototype._setText = function (text) {\n var textArr = null;\n\n if (util_1.isString(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n }\n\n this.set('textArr', textArr);\n }; // 更新属性时,检测是否更改了 font、text\n\n\n Text.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (name.startsWith('font')) {\n this._assembleFont();\n }\n\n if (name === 'text') {\n this._setText(value);\n }\n }; // 这个方法在 text 时没有可以做的事情,如果要支持文字背景时可以考虑\n // createPath(context) {\n // }\n // 如果文本多行,需要获取文本间距\n\n\n Text.prototype._getSpaceingY = function () {\n var attrs = this.attrs;\n var lineHeight = attrs.lineHeight;\n var fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n }; // 绘制文本,考虑多行的场景\n\n\n Text.prototype._drawTextArr = function (context, textArr, isFill) {\n var attrs = this.attrs;\n var textBaseline = attrs.textBaseline;\n var x = attrs.x;\n var y = attrs.y;\n var fontSize = attrs.fontSize * 1;\n\n var spaceingY = this._getSpaceingY();\n\n var height = g_base_1.getTextHeight(attrs.text, attrs.fontSize, attrs.lineHeight);\n var subY;\n util_1.each(textArr, function (subText, index) {\n subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n\n if (textBaseline === 'middle') subY += height - fontSize - (height - fontSize) / 2;\n if (textBaseline === 'top') subY += height - fontSize;\n\n if (isFill) {\n context.fillText(subText, x, subY);\n } else {\n context.strokeText(subText, x, subY);\n }\n });\n }; // 绘制文本,同时考虑填充和绘制边框\n\n\n Text.prototype._drawText = function (context, isFill) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var textArr = this.get('textArr');\n\n if (textArr) {\n this._drawTextArr(context, textArr, isFill);\n } else {\n var text = attrs.text;\n\n if (isFill) {\n context.fillText(text, x, y);\n } else {\n context.strokeText(text, x, y);\n }\n }\n }; // 复写绘制和填充的逻辑:对于文本,应该先绘制边框,再进行填充\n\n\n Text.prototype.strokeAndFill = function (context) {\n var _a = this.attrs,\n lineWidth = _a.lineWidth,\n opacity = _a.opacity,\n strokeOpacity = _a.strokeOpacity,\n fillOpacity = _a.fillOpacity;\n\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!util_1.isNil(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = opacity;\n }\n\n this.stroke(context);\n }\n }\n\n if (this.isFill()) {\n if (!util_1.isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n } else {\n this.fill(context);\n }\n }\n\n this.afterDrawPath(context);\n }; // 复写填充逻辑\n\n\n Text.prototype.fill = function (context) {\n this._drawText(context, true);\n }; // 复写绘制边框的逻辑\n\n\n Text.prototype.stroke = function (context) {\n this._drawText(context, false);\n };\n\n return Text;\n}(base_1.default);\n\nexports.default = Text;\n\n/***/ }),\n/* 869 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g_base_1 = __webpack_require__(27);\n\nvar hit_1 = __webpack_require__(870);\n\nvar Shape = __webpack_require__(142);\n\nvar group_1 = __webpack_require__(259);\n\nvar util_1 = __webpack_require__(52);\n\nvar draw_1 = __webpack_require__(143);\n\nvar Canvas =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Canvas, _super);\n\n function Canvas() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this); // 设置渲染引擎为 canvas,只读属性\n\n\n cfg['renderer'] = 'canvas'; // 是否自动绘制,不需要用户调用 draw 方法\n\n cfg['autoDraw'] = true; // 是否允许局部刷新图表\n\n cfg['localRefresh'] = true;\n cfg['refreshElements'] = []; // 是否在视图内自动裁剪\n\n cfg['clipView'] = true; // 是否使用快速拾取的方案,默认为 false,上层可以打开\n\n cfg['quickHit'] = false;\n return cfg;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n\n\n Canvas.prototype.onCanvasChange = function (changeType) {\n /**\n * 触发画布更新的三种 changeType\n * 1. attr: 修改画布的绘图属性\n * 2. sort: 画布排序,图形的层次会发生变化\n * 3. changeSize: 改变画布大小\n */\n if (changeType === 'attr' || changeType === 'sort' || changeType === 'changeSize') {\n this.set('refreshElements', [this]);\n this.draw();\n }\n };\n\n Canvas.prototype.getShapeBase = function () {\n return Shape;\n };\n\n Canvas.prototype.getGroupBase = function () {\n return group_1.default;\n };\n /**\n * 获取屏幕像素比\n */\n\n\n Canvas.prototype.getPixelRatio = function () {\n var pixelRatio = this.get('pixelRatio') || util_1.getPixelRatio(); // 不足 1 的取 1,超出 1 的取整\n\n return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n };\n\n Canvas.prototype.getViewRange = function () {\n return {\n minX: 0,\n minY: 0,\n maxX: this.cfg.width,\n maxY: this.cfg.height\n };\n }; // 复写基类的方法生成标签\n\n\n Canvas.prototype.createDom = function () {\n var element = document.createElement('canvas');\n var context = element.getContext('2d'); // 缓存 context 对象\n\n this.set('context', context);\n return element;\n };\n\n Canvas.prototype.setDOMSize = function (width, height) {\n _super.prototype.setDOMSize.call(this, width, height);\n\n var context = this.get('context');\n var el = this.get('el');\n var pixelRatio = this.getPixelRatio();\n el.width = pixelRatio * width;\n el.height = pixelRatio * height; // 设置 canvas 元素的宽度和高度,会重置缩放,因此 context.scale 需要在每次设置宽、高后调用\n\n if (pixelRatio > 1) {\n context.scale(pixelRatio, pixelRatio);\n }\n }; // 复写基类方法\n\n\n Canvas.prototype.clear = function () {\n _super.prototype.clear.call(this);\n\n this._clearFrame(); // 需要清理掉延迟绘制的帧\n\n\n var context = this.get('context');\n var element = this.get('el');\n context.clearRect(0, 0, element.width, element.height);\n };\n\n Canvas.prototype.getShape = function (x, y) {\n var shape;\n\n if (this.get('quickHit')) {\n shape = hit_1.getShape(this, x, y);\n } else {\n shape = _super.prototype.getShape.call(this, x, y, null);\n }\n\n return shape;\n }; // 对绘制区域边缘取整,避免浮点数问题\n\n\n Canvas.prototype._getRefreshRegion = function () {\n var elements = this.get('refreshElements');\n var viewRegion = this.getViewRange();\n var region; // 如果是当前画布整体发生了变化,则直接重绘整个画布\n\n if (elements.length && elements[0] === this) {\n region = viewRegion;\n } else {\n region = draw_1.getMergedRegion(elements);\n\n if (region) {\n region.minX = Math.floor(region.minX);\n region.minY = Math.floor(region.minY);\n region.maxX = Math.ceil(region.maxX);\n region.maxY = Math.ceil(region.maxY);\n region.maxY += 1; // 在很多环境下字体的高低会不一致,附加一像素,避免残影\n\n var clipView = this.get('clipView'); // 自动裁剪不在 view 内的区域\n\n if (clipView) {\n region = draw_1.mergeView(region, viewRegion);\n }\n }\n }\n\n return region;\n };\n /**\n * 刷新图形元素,这里仅仅是放入队列,下次绘制时进行绘制\n * @param {IElement} element 图形元素\n */\n\n\n Canvas.prototype.refreshElement = function (element) {\n var refreshElements = this.get('refreshElements');\n refreshElements.push(element); // if (this.get('autoDraw')) {\n // this._startDraw();\n // }\n }; // 清理还在进行的绘制\n\n\n Canvas.prototype._clearFrame = function () {\n var drawFrame = this.get('drawFrame');\n\n if (drawFrame) {\n // 如果全部渲染时,存在局部渲染,则抛弃掉局部渲染\n util_1.clearAnimationFrame(drawFrame);\n this.set('drawFrame', null);\n this.set('refreshElements', []);\n }\n }; // 手工调用绘制接口\n\n\n Canvas.prototype.draw = function () {\n var drawFrame = this.get('drawFrame');\n\n if (this.get('autoDraw') && drawFrame) {\n return;\n }\n\n this._startDraw();\n }; // 绘制所有图形\n\n\n Canvas.prototype._drawAll = function () {\n var context = this.get('context');\n var element = this.get('el');\n var children = this.getChildren();\n context.clearRect(0, 0, element.width, element.height);\n draw_1.applyAttrsToContext(context, this);\n draw_1.drawChildren(context, children); // 对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也会记录更新的元素队列,因此全局渲染完后也需要置空\n\n this.set('refreshElements', []);\n }; // 绘制局部\n\n\n Canvas.prototype._drawRegion = function () {\n var context = this.get('context');\n var refreshElements = this.get('refreshElements');\n var children = this.getChildren();\n\n var region = this._getRefreshRegion(); // 需要注意可能没有 region 的场景\n // 一般发生在设置了 localRefresh ,在没有图形发生变化的情况下,用户调用了 draw\n\n\n if (region) {\n // 清理指定区域\n context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY); // 保存上下文,设置 clip\n\n context.save();\n context.beginPath();\n context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n context.clip();\n draw_1.applyAttrsToContext(context, this); // 确认更新的元素,这个优化可以提升 10 倍左右的性能,10W 个带有 group 的节点,局部渲染会从 90ms 下降到 5-6 ms\n\n draw_1.checkRefresh(this, children, region); // 绘制子元素\n\n draw_1.drawChildren(context, children, region);\n context.restore();\n } else if (refreshElements.length) {\n // 防止发生改变的 elements 没有 region 的场景,这会发生在多个情况下\n // 1. 空的 group\n // 2. 所有 elements 没有在绘图区域\n // 3. group 下面的 elements 隐藏掉\n // 如果不进行清理 hasChanged 的状态会不正确\n draw_1.clearChanged(refreshElements);\n }\n\n util_1.each(refreshElements, function (element) {\n if (element.get('hasChanged')) {\n // 在视窗外的 Group 元素会加入到更新队列里,但实际却没有执行 draw() 逻辑,也就没有清除 hasChanged 标记\n // 即已经重绘完、但 hasChanged 标记没有清除的元素,需要统一清除掉。主要是 Group 存在问题,具体原因待排查\n element.set('hasChanged', false);\n }\n });\n this.set('refreshElements', []);\n }; // 触发绘制\n\n\n Canvas.prototype._startDraw = function () {\n var _this = this;\n\n var drawFrame = this.get('drawFrame');\n\n if (!drawFrame) {\n drawFrame = util_1.requestAnimationFrame(function () {\n if (_this.get('localRefresh')) {\n _this._drawRegion();\n } else {\n _this._drawAll();\n }\n\n _this.set('drawFrame', null);\n });\n this.set('drawFrame', drawFrame);\n }\n };\n\n Canvas.prototype.skipDraw = function () {};\n\n return Canvas;\n}(g_base_1.AbstractCanvas);\n\nexports.default = Canvas;\n\n/***/ }),\n/* 870 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getShape = void 0;\n\nvar g_base_1 = __webpack_require__(27);\n\nfunction invertFromMatrix(v, matrix) {\n if (matrix) {\n var invertMatrix = g_base_1.invert(matrix);\n return g_base_1.multiplyVec2(invertMatrix, v);\n }\n\n return v;\n}\n\nfunction getRefXY(element, x, y) {\n // @ts-ignore\n var totalMatrix = element.getTotalMatrix();\n\n if (totalMatrix) {\n var _a = invertFromMatrix([x, y, 1], totalMatrix),\n refX = _a[0],\n refY = _a[1];\n\n return [refX, refY];\n }\n\n return [x, y];\n} // 拾取前的检测,只有通过检测才能继续拾取\n\n\nfunction preTest(element, x, y) {\n // @ts-ignore\n if (element.isCanvas && element.isCanvas()) {\n return true;\n } // 不允许被拾取,则返回 null\n // @ts-ignore\n\n\n if (!g_base_1.isAllowCapture(element) || element.cfg.isInView === false) {\n return false;\n }\n\n if (element.cfg.clipShape) {\n // 如果存在 clip\n var _a = getRefXY(element, x, y),\n refX = _a[0],\n refY = _a[1];\n\n if (element.isClipped(refX, refY)) {\n return false;\n }\n } // @ts-ignore ,这个地方调用过于频繁\n\n\n var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox(); // 如果没有缓存 bbox,则说明不可见\n // 注释掉的这段可能会加速拾取,上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;\n // 这时候的拾取假设图形/分组在上一次绘制都在视窗内,但是上面已经判定了 isInView 所以意义不大\n // 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试\n // if (!bbox) {\n // return false;\n // }\n\n if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {\n return false;\n }\n\n return true;\n} // 这个方法复写了 g-base 的 getShape\n\n\nfunction getShape(container, x, y) {\n // 没有通过检测,则返回 null\n if (!preTest(container, x, y)) {\n return null;\n }\n\n var shape = null;\n var children = container.getChildren();\n var count = children.length;\n\n for (var i = count - 1; i >= 0; i--) {\n var child = children[i];\n\n if (child.isGroup()) {\n shape = getShape(child, x, y);\n } else if (preTest(child, x, y)) {\n var curShape = child;\n\n var _a = getRefXY(child, x, y),\n refX = _a[0],\n refY = _a[1]; // @ts-ignore\n\n\n if (curShape.isInShape(refX, refY)) {\n shape = child;\n }\n }\n\n if (shape) {\n break;\n }\n }\n\n return shape;\n}\n\nexports.getShape = getShape;\n\n/***/ }),\n/* 871 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview circle\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Circle =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Circle, _super);\n\n function Circle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'circle';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n r: 0\n });\n };\n\n Circle.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Circle;\n}(base_1.default);\n\nexports.default = Circle;\n\n/***/ }),\n/* 872 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview dom\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Dom =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Dom, _super);\n\n function Dom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'dom';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n\n Dom.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n\n if (typeof attrs['html'] === 'function') {\n var element = attrs['html'].call(this, attrs);\n\n if (element instanceof Element || element instanceof HTMLDocument) {\n var children = el.childNodes;\n\n for (var i = children.length - 1; i >= 0; i--) {\n el.removeChild(children[i]);\n }\n\n el.appendChild(element); // append to el if it's an element\n } else {\n el.innerHTML = element; // set innerHTML\n }\n } else {\n el.innerHTML = attrs['html']; // set innerHTML\n }\n };\n\n return Dom;\n}(base_1.default);\n\nexports.default = Dom;\n\n/***/ }),\n/* 873 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview ellipse\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Ellipse =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Ellipse, _super);\n\n function Ellipse() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'ellipse';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n rx: 0,\n ry: 0\n });\n };\n\n Ellipse.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Ellipse;\n}(base_1.default);\n\nexports.default = Ellipse;\n\n/***/ }),\n/* 874 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview image\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Image =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Image, _super);\n\n function Image() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'image';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n\n Image.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n };\n\n Image.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'img') {\n _this._setImage(attrs.img);\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Image.prototype.setAttr = function (name, value) {\n this.attrs[name] = value;\n\n if (name === 'img') {\n this._setImage(value);\n }\n };\n\n Image.prototype._setImage = function (img) {\n var attrs = this.attr();\n var el = this.get('el');\n\n if (util_1.isString(img)) {\n el.setAttribute('href', img);\n } else if (img instanceof window.Image) {\n if (!attrs.width) {\n el.setAttribute('width', img.width);\n this.attr('width', img.width);\n }\n\n if (!attrs.height) {\n el.setAttribute('height', img.height);\n this.attr('height', img.height);\n }\n\n el.setAttribute('href', img.src);\n } else if (img instanceof HTMLElement && util_1.isString(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n // @ts-ignore\n el.setAttribute('href', img.toDataURL());\n } else if (img instanceof ImageData) {\n var canvas = document.createElement('canvas');\n canvas.setAttribute('width', \"\" + img.width);\n canvas.setAttribute('height', \"\" + img.height);\n canvas.getContext('2d').putImageData(img, 0, 0);\n\n if (!attrs.width) {\n el.setAttribute('width', \"\" + img.width);\n this.attr('width', img.width);\n }\n\n if (!attrs.height) {\n el.setAttribute('height', \"\" + img.height);\n this.attr('height', img.height);\n }\n\n el.setAttribute('href', canvas.toDataURL());\n }\n };\n\n return Image;\n}(base_1.default);\n\nexports.default = Image;\n\n/***/ }),\n/* 875 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n/**\n * @fileoverview line\n * @author dengfuping_develop@163.com\n */\n\n\nvar g_math_1 = __webpack_require__(35);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Line =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Line, _super);\n\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'line';\n _this.canFill = false;\n _this.canStroke = true;\n return _this;\n }\n\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n startArrow: false,\n endArrow: false\n });\n };\n\n Line.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = util_1.isObject(value) ? context.addArrow(attrs, constant_1.SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, constant_1.SVG_ATTR_MAP[attr]);\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n } else {\n el.removeAttribute(constant_1.SVG_ATTR_MAP[attr]);\n }\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n /**\n * Use math calculation to get length of line\n * @return {number} length\n */\n\n\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return g_math_1.Line.length(x1, y1, x2, y2);\n };\n /**\n * Use math calculation to get point according to ratio as same sa Canvas version\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return g_math_1.Line.pointAt(x1, y1, x2, y2, ratio);\n };\n\n return Line;\n}(base_1.default);\n\nexports.default = Line;\n\n/***/ }),\n/* 876 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview marker\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = __webpack_require__(63);\n\nvar symbols_1 = __webpack_require__(877);\n\nvar Marker =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Marker, _super);\n\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'marker';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Marker.prototype.createPath = function (context) {\n var el = this.get('el');\n el.setAttribute('d', this._assembleMarker());\n };\n\n Marker.prototype._assembleMarker = function () {\n var d = this._getPath();\n\n if (util_1.isArray(d)) {\n return d.map(function (path) {\n return path.join(' ');\n }).join('');\n }\n\n return d;\n };\n\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y; // 兼容 r 和 radius 两种写法,推荐使用 r\n\n var r = attrs.r || attrs.radius;\n var symbol = attrs.symbol || 'circle';\n var method;\n\n if (util_1.isFunction(symbol)) {\n method = symbol;\n } else {\n method = symbols_1.default.get(symbol);\n }\n\n if (!method) {\n console.warn(method + \" symbol is not exist.\");\n return null;\n }\n\n return method(x, y, r);\n }; // 作为其静态属性\n\n\n Marker.symbolsFactory = symbols_1.default;\n return Marker;\n}(base_1.default);\n\nexports.default = Marker;\n\n/***/ }),\n/* 877 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return [['M', x, y], ['m', -r, 0], ['a', r, r, 0, 1, 0, r * 2, 0], ['a', r, r, 0, 1, 0, -r * 2, 0]];\n },\n // 正方形\n square: function square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function triangle(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['z']];\n },\n // 倒三角形\n triangleDown: function triangleDown(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n }\n};\nexports.default = {\n get: function get(type) {\n return Symbols[type];\n },\n register: function register(type, func) {\n Symbols[type] = func;\n },\n remove: function remove(type) {\n delete Symbols[type];\n },\n getAll: function getAll() {\n return Symbols;\n }\n};\n\n/***/ }),\n/* 878 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Path =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Path, _super);\n\n function Path() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'path';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n Path.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'path' && util_1.isArray(value)) {\n el.setAttribute('d', _this._formatPath(value));\n } else if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = util_1.isObject(value) ? context.addArrow(attrs, constant_1.SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, constant_1.SVG_ATTR_MAP[attr]);\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n } else {\n el.removeAttribute(constant_1.SVG_ATTR_MAP[attr]);\n }\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Path.prototype._formatPath = function (value) {\n var newValue = value.map(function (path) {\n return path.join(' ');\n }).join('');\n\n if (~newValue.indexOf('NaN')) {\n return '';\n }\n\n return newValue;\n };\n /**\n * Get total length of path\n * 尽管通过浏览器的 SVGPathElement.getTotalLength() 接口获取的 path 长度,\n * 与 Canvas 版本通过数学计算的方式得到的长度有一些细微差异,但最大误差在个位数像素,精度上可以能接受\n * @return {number} length\n */\n\n\n Path.prototype.getTotalLength = function () {\n var el = this.get('el');\n return el ? el.getTotalLength() : null;\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Path.prototype.getPoint = function (ratio) {\n var el = this.get('el');\n var totalLength = this.getTotalLength(); // @see https://github.com/antvis/g/issues/634\n\n if (totalLength === 0) {\n return null;\n }\n\n var point = el ? el.getPointAtLength(ratio * totalLength) : null;\n return point ? {\n x: point.x,\n y: point.y\n } : null;\n };\n\n return Path;\n}(base_1.default);\n\nexports.default = Path;\n\n/***/ }),\n/* 879 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n/**\n * @fileoverview polygon\n * @author dengfuping_develop@163.com\n */\n\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Polygon =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Polygon, _super);\n\n function Polygon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'polygon';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Polygon.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && util_1.isArray(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) {\n return point[0] + \",\" + point[1];\n }).join(' '));\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Polygon;\n}(base_1.default);\n\nexports.default = Polygon;\n\n/***/ }),\n/* 880 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g_math_1 = __webpack_require__(35);\n\nvar g_math_2 = __webpack_require__(35);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar Polyline =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Polyline, _super);\n\n function Polyline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'polyline';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Polyline.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n }; // 更新属性时,检测是否更改了 points\n\n\n Polyline.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n\n Polyline.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n\n Polyline.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && util_1.isArray(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) {\n return point[0] + \",\" + point[1];\n }).join(' '));\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n\n\n Polyline.prototype.getTotalLength = function () {\n var points = this.attr().points; // get totalLength from cache\n\n var totalLength = this.get('totalLength');\n\n if (!util_1.isNil(totalLength)) {\n return totalLength;\n }\n\n this.set('totalLength', g_math_1.Polyline.length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Polyline.prototype.getPoint = function (ratio) {\n var points = this.attr().points; // get tCache from cache\n\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n util_1.each(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return g_math_2.Line.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n\n Polyline.prototype._setTcache = function () {\n var points = this.attr().points;\n\n if (!points || points.length === 0) {\n return;\n }\n\n var totalLength = this.getTotalLength();\n\n if (totalLength <= 0) {\n return;\n }\n\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n util_1.each(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = g_math_2.Line.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n Polyline.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n Polyline.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n\n return Polyline;\n}(base_1.default);\n\nexports.default = Polyline;\n\n/***/ }),\n/* 881 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview rect\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = __webpack_require__(63);\n\nvar constant_1 = __webpack_require__(53);\n\nvar format_1 = __webpack_require__(882);\n\nvar Rect =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Rect, _super);\n\n function Rect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'rect';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0\n });\n };\n\n Rect.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el'); // 加上状态量,用来标记 path 是否已组装\n\n var completed = false; // 和组装 path 相关的绘图属性\n\n var pathRelatedAttrs = ['x', 'y', 'width', 'height', 'radius'];\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (pathRelatedAttrs.indexOf(attr) !== -1 && !completed) {\n el.setAttribute('d', _this._assembleRect(attrs));\n completed = true;\n } else if (pathRelatedAttrs.indexOf(attr) === -1 && constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Rect.prototype._assembleRect = function (attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n var radius = attrs.radius;\n\n if (!radius) {\n return \"M \" + x + \",\" + y + \" l \" + w + \",0 l 0,\" + h + \" l\" + -w + \" 0 z\";\n }\n\n var r = format_1.parseRadius(radius);\n\n if (util_1.isArray(radius)) {\n if (radius.length === 1) {\n r.r1 = r.r2 = r.r3 = r.r4 = radius[0];\n } else if (radius.length === 2) {\n r.r1 = r.r3 = radius[0];\n r.r2 = r.r4 = radius[1];\n } else if (radius.length === 3) {\n r.r1 = radius[0];\n r.r2 = r.r4 = radius[1];\n r.r3 = radius[2];\n } else {\n r.r1 = radius[0];\n r.r2 = radius[1];\n r.r3 = radius[2];\n r.r4 = radius[3];\n }\n } else {\n r.r1 = r.r2 = r.r3 = r.r4 = radius;\n }\n\n var d = [[\"M \" + (x + r.r1) + \",\" + y], [\"l \" + (w - r.r1 - r.r2) + \",0\"], [\"a \" + r.r2 + \",\" + r.r2 + \",0,0,1,\" + r.r2 + \",\" + r.r2], [\"l 0,\" + (h - r.r2 - r.r3)], [\"a \" + r.r3 + \",\" + r.r3 + \",0,0,1,\" + -r.r3 + \",\" + r.r3], [\"l \" + (r.r3 + r.r4 - w) + \",0\"], [\"a \" + r.r4 + \",\" + r.r4 + \",0,0,1,\" + -r.r4 + \",\" + -r.r4], [\"l 0,\" + (r.r4 + r.r1 - h)], [\"a \" + r.r1 + \",\" + r.r1 + \",0,0,1,\" + r.r1 + \",\" + -r.r1], ['z']];\n return d.join(' ');\n };\n\n return Rect;\n}(base_1.default);\n\nexports.default = Rect;\n\n/***/ }),\n/* 882 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parsePath = exports.parseRadius = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi;\nvar regexDot = /[^\\s,]+/gi;\n\nfunction parseRadius(radius) {\n var r1 = 0;\n var r2 = 0;\n var r3 = 0;\n var r4 = 0;\n\n if (util_1.isArray(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n } else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n } else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n } else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n } else {\n r1 = r2 = r3 = r4 = radius;\n }\n\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4\n };\n}\n\nexports.parseRadius = parseRadius;\n\nfunction parsePath(path) {\n path = path || [];\n\n if (util_1.isArray(path)) {\n return path;\n }\n\n if (util_1.isString(path)) {\n path = path.match(regexTags);\n util_1.each(path, function (item, index) {\n item = item.match(regexDot);\n\n if (item[0].length > 1) {\n var tag = item[0].charAt(0);\n item.splice(1, 0, item[0].substr(1));\n item[0] = tag;\n }\n\n util_1.each(item, function (sub, i) {\n if (!isNaN(sub)) {\n item[i] = +sub;\n }\n });\n path[index] = item;\n });\n return path;\n }\n}\n\nexports.parsePath = parsePath;\n\n/***/ }),\n/* 883 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview text\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar detect_browser_1 = __webpack_require__(240);\n\nvar svg_1 = __webpack_require__(144);\n\nvar constant_1 = __webpack_require__(53);\n\nvar base_1 = __webpack_require__(63);\n\nvar LETTER_SPACING = 0.3;\nvar BASELINE_MAP = {\n top: 'before-edge',\n middle: 'central',\n bottom: 'after-edge',\n alphabetic: 'baseline',\n hanging: 'hanging'\n}; // for FireFox\n\nvar BASELINE_MAP_FOR_FIREFOX = {\n top: 'text-before-edge',\n middle: 'central',\n bottom: 'text-after-edge',\n alphabetic: 'alphabetic',\n hanging: 'hanging'\n};\nvar ANCHOR_MAP = {\n left: 'left',\n start: 'left',\n center: 'middle',\n right: 'end',\n end: 'end'\n};\n\nvar Text =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Text, _super);\n\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'text';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return tslib_1.__assign(tslib_1.__assign({}, attrs), {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n });\n };\n\n Text.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n\n this._setFont();\n\n util_1.each(targetAttrs || attrs, function (value, attr) {\n if (attr === 'text') {\n _this._setText(\"\" + value);\n } else if (attr === 'matrix' && value) {\n svg_1.setTransform(_this);\n } else if (constant_1.SVG_ATTR_MAP[attr]) {\n el.setAttribute(constant_1.SVG_ATTR_MAP[attr], value);\n }\n });\n el.setAttribute('paint-order', 'stroke');\n el.setAttribute('style', 'stroke-linecap:butt; stroke-linejoin:miter;');\n };\n\n Text.prototype._setFont = function () {\n var el = this.get('el');\n\n var _a = this.attr(),\n textBaseline = _a.textBaseline,\n textAlign = _a.textAlign;\n\n var browser = detect_browser_1.detect();\n\n if (browser && browser.name === 'firefox') {\n // compatible with FireFox browser, ref: https://github.com/antvis/g/issues/119\n el.setAttribute('dominant-baseline', BASELINE_MAP_FOR_FIREFOX[textBaseline] || 'alphabetic');\n } else {\n el.setAttribute('alignment-baseline', BASELINE_MAP[textBaseline] || 'baseline');\n }\n\n el.setAttribute('text-anchor', ANCHOR_MAP[textAlign] || 'left');\n };\n\n Text.prototype._setText = function (text) {\n var el = this.get('el');\n\n var _a = this.attr(),\n x = _a.x,\n _b = _a.textBaseline,\n baseline = _b === void 0 ? 'bottom' : _b;\n\n if (!text) {\n el.innerHTML = '';\n } else if (~text.indexOf('\\n')) {\n var textArr = text.split('\\n');\n var textLen_1 = textArr.length - 1;\n var arr_1 = '';\n util_1.each(textArr, function (segment, i) {\n if (i === 0) {\n if (baseline === 'alphabetic') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'top') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'middle') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'bottom') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'hanging') {\n arr_1 += \"\" + segment + \"\";\n }\n } else {\n arr_1 += \"\" + segment + \"\";\n }\n });\n el.innerHTML = arr_1;\n } else {\n el.innerHTML = text;\n }\n };\n\n return Text;\n}(base_1.default);\n\nexports.default = Text;\n\n/***/ }),\n/* 884 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g_base_1 = __webpack_require__(27);\n\nvar constant_1 = __webpack_require__(53);\n\nvar draw_1 = __webpack_require__(260);\n\nvar svg_1 = __webpack_require__(144);\n\nvar dom_1 = __webpack_require__(71);\n\nvar Shape = __webpack_require__(189);\n\nvar group_1 = __webpack_require__(261);\n\nvar defs_1 = __webpack_require__(885);\n\nvar Canvas =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Canvas, _super);\n\n function Canvas(cfg) {\n return _super.call(this, tslib_1.__assign(tslib_1.__assign({}, cfg), {\n autoDraw: true,\n // 设置渲染引擎为 canvas,只读属性\n renderer: 'svg'\n })) || this;\n }\n\n Canvas.prototype.getShapeBase = function () {\n return Shape;\n };\n\n Canvas.prototype.getGroupBase = function () {\n return group_1.default;\n }; // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑,直接走 SVG 的 dom 拾取即可\n\n\n Canvas.prototype.getShape = function (x, y, ev) {\n var target = ev.target || ev.srcElement;\n\n if (!constant_1.SHAPE_TO_TAGS[target.tagName]) {\n var parent_1 = target.parentNode;\n\n while (parent_1 && !constant_1.SHAPE_TO_TAGS[parent_1.tagName]) {\n parent_1 = parent_1.parentNode;\n }\n\n target = parent_1;\n }\n\n return this.find(function (child) {\n return child.get('el') === target;\n });\n }; // 复写基类的方法生成标签\n\n\n Canvas.prototype.createDom = function () {\n var element = dom_1.createSVGElement('svg');\n var context = new defs_1.default(element);\n element.setAttribute('width', \"\" + this.get('width'));\n element.setAttribute('height', \"\" + this.get('height')); // 缓存 context 对象\n\n this.set('context', context);\n return element;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n\n\n Canvas.prototype.onCanvasChange = function (changeType) {\n var context = this.get('context');\n var el = this.get('el');\n\n if (changeType === 'sort') {\n var children_1 = this.get('children');\n\n if (children_1 && children_1.length) {\n dom_1.sortDom(this, function (a, b) {\n return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n });\n }\n } else if (changeType === 'clear') {\n // el maybe null for canvas\n if (el) {\n // 清空 SVG 元素\n el.innerHTML = '';\n var defsEl = context.el; // 清空 defs 元素\n\n defsEl.innerHTML = ''; // 将清空后的 defs 元素挂载到 el 下\n\n el.appendChild(defsEl);\n }\n } else if (changeType === 'matrix') {\n svg_1.setTransform(this);\n } else if (changeType === 'clip') {\n svg_1.setClip(this, context);\n } else if (changeType === 'changeSize') {\n el.setAttribute('width', \"\" + this.get('width'));\n el.setAttribute('height', \"\" + this.get('height'));\n }\n }; // 复写基类的 draw 方法\n\n\n Canvas.prototype.draw = function () {\n var context = this.get('context');\n var children = this.getChildren();\n svg_1.setClip(this, context);\n\n if (children.length) {\n draw_1.drawChildren(context, children);\n }\n };\n\n return Canvas;\n}(g_base_1.AbstractCanvas);\n\nexports.default = Canvas;\n\n/***/ }),\n/* 885 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview defs\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar gradient_1 = __webpack_require__(886);\n\nvar shadow_1 = __webpack_require__(887);\n\nvar arrow_1 = __webpack_require__(888);\n\nvar clip_1 = __webpack_require__(889);\n\nvar pattern_1 = __webpack_require__(890);\n\nvar dom_1 = __webpack_require__(71);\n\nvar Defs =\n/** @class */\nfunction () {\n function Defs(canvas) {\n var el = dom_1.createSVGElement('defs');\n var id = util_1.uniqueId('defs_');\n el.id = id;\n canvas.appendChild(el);\n this.children = [];\n this.defaultArrow = {};\n this.el = el;\n this.canvas = canvas;\n }\n\n Defs.prototype.find = function (type, attr) {\n var children = this.children;\n var result = null;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].match(type, attr)) {\n result = children[i].id;\n break;\n }\n }\n\n return result;\n };\n\n Defs.prototype.findById = function (id) {\n var children = this.children;\n var flag = null;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].id === id) {\n flag = children[i];\n break;\n }\n }\n\n return flag;\n };\n\n Defs.prototype.add = function (item) {\n this.children.push(item);\n item.canvas = this.canvas;\n item.parent = this;\n };\n\n Defs.prototype.getDefaultArrow = function (attrs, name) {\n var stroke = attrs.stroke || attrs.strokeStyle;\n\n if (this.defaultArrow[stroke]) {\n return this.defaultArrow[stroke].id;\n }\n\n var arrow = new arrow_1.default(attrs, name);\n this.defaultArrow[stroke] = arrow;\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n\n Defs.prototype.addGradient = function (cfg) {\n var gradient = new gradient_1.default(cfg);\n this.el.appendChild(gradient.el);\n this.add(gradient);\n return gradient.id;\n };\n\n Defs.prototype.addArrow = function (attrs, name) {\n var arrow = new arrow_1.default(attrs, name);\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n\n Defs.prototype.addShadow = function (cfg) {\n var shadow = new shadow_1.default(cfg);\n this.el.appendChild(shadow.el);\n this.add(shadow);\n return shadow.id;\n };\n\n Defs.prototype.addPattern = function (cfg) {\n var pattern = new pattern_1.default(cfg);\n this.el.appendChild(pattern.el);\n this.add(pattern);\n return pattern.id;\n };\n\n Defs.prototype.addClip = function (cfg) {\n var clip = new clip_1.default(cfg);\n this.el.appendChild(clip.el);\n this.add(clip);\n return clip.id;\n };\n\n return Defs;\n}();\n\nexports.default = Defs;\n\n/***/ }),\n/* 886 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview gradient\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar dom_1 = __webpack_require__(71);\n\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^)]+\\))/gi;\n\nfunction addStop(steps) {\n var arr = steps.match(regexColorStop);\n\n if (!arr) {\n return '';\n }\n\n var stops = '';\n arr.sort(function (a, b) {\n a = a.split(':');\n b = b.split(':');\n return Number(a[0]) - Number(b[0]);\n });\n util_1.each(arr, function (item) {\n item = item.split(':');\n stops += \"\";\n });\n return stops;\n}\n\nfunction parseLineGradient(color, el) {\n var arr = regexLG.exec(color);\n var angle = util_1.mod(util_1.toRadian(parseFloat(arr[1])), Math.PI * 2);\n var steps = arr[2];\n var start;\n var end;\n\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 1,\n y: 1\n };\n } else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: 1,\n y: 0\n };\n end = {\n x: 0,\n y: 1\n };\n } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: 1,\n y: 1\n };\n end = {\n x: 0,\n y: 0\n };\n } else {\n start = {\n x: 0,\n y: 1\n };\n end = {\n x: 1,\n y: 0\n };\n }\n\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;\n el.setAttribute('x1', start.x);\n el.setAttribute('y1', start.y);\n el.setAttribute('x2', x);\n el.setAttribute('y2', y);\n el.innerHTML = addStop(steps);\n}\n\nfunction parseRadialGradient(color, self) {\n var arr = regexRG.exec(color);\n var cx = parseFloat(arr[1]);\n var cy = parseFloat(arr[2]);\n var r = parseFloat(arr[3]);\n var steps = arr[4];\n self.setAttribute('cx', cx);\n self.setAttribute('cy', cy);\n self.setAttribute('r', r);\n self.innerHTML = addStop(steps);\n}\n\nvar Gradient =\n/** @class */\nfunction () {\n function Gradient(cfg) {\n this.cfg = {};\n var el = null;\n var id = util_1.uniqueId('gradient_');\n\n if (cfg.toLowerCase()[0] === 'l') {\n el = dom_1.createSVGElement('linearGradient');\n parseLineGradient(cfg, el);\n } else {\n el = dom_1.createSVGElement('radialGradient');\n parseRadialGradient(cfg, el);\n }\n\n el.setAttribute('id', id);\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n return this;\n }\n\n Gradient.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n\n return Gradient;\n}();\n\nexports.default = Gradient;\n\n/***/ }),\n/* 887 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview shadow\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar dom_1 = __webpack_require__(71);\n\nvar ATTR_MAP = {\n shadowColor: 'color',\n shadowOpacity: 'opacity',\n shadowBlur: 'blur',\n shadowOffsetX: 'dx',\n shadowOffsetY: 'dy'\n};\nvar SHADOW_DIMENSION = {\n x: '-40%',\n y: '-40%',\n width: '200%',\n height: '200%'\n};\n\nvar Shadow =\n/** @class */\nfunction () {\n function Shadow(cfg) {\n this.type = 'filter';\n this.cfg = {};\n this.type = 'filter';\n var el = dom_1.createSVGElement('filter'); // expand the filter region to fill in shadows\n\n util_1.each(SHADOW_DIMENSION, function (v, k) {\n el.setAttribute(k, v);\n });\n this.el = el;\n this.id = util_1.uniqueId('filter_');\n this.el.id = this.id;\n this.cfg = cfg;\n\n this._parseShadow(cfg, el);\n\n return this;\n }\n\n Shadow.prototype.match = function (type, cfg) {\n if (this.type !== type) {\n return false;\n }\n\n var flag = true;\n var config = this.cfg;\n util_1.each(Object.keys(config), function (attr) {\n if (config[attr] !== cfg[attr]) {\n flag = false;\n return false;\n }\n });\n return flag;\n };\n\n Shadow.prototype.update = function (name, value) {\n var config = this.cfg;\n config[ATTR_MAP[name]] = value;\n\n this._parseShadow(config, this.el);\n\n return this;\n };\n\n Shadow.prototype._parseShadow = function (config, el) {\n var child = \"\";\n el.innerHTML = child;\n };\n\n return Shadow;\n}();\n\nexports.default = Shadow;\n\n/***/ }),\n/* 888 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview arrow\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar dom_1 = __webpack_require__(71);\n\nvar Arrow =\n/** @class */\nfunction () {\n function Arrow(attrs, type) {\n this.cfg = {};\n var el = dom_1.createSVGElement('marker');\n var id = util_1.uniqueId('marker_');\n el.setAttribute('id', id);\n var shape = dom_1.createSVGElement('path');\n shape.setAttribute('stroke', attrs.stroke || 'none');\n shape.setAttribute('fill', attrs.fill || 'none');\n el.appendChild(shape);\n el.setAttribute('overflow', 'visible');\n el.setAttribute('orient', 'auto-start-reverse');\n this.el = el;\n this.child = shape;\n this.id = id;\n var cfg = attrs[type === 'marker-start' ? 'startArrow' : 'endArrow'];\n this.stroke = attrs.stroke || '#000';\n\n if (cfg === true) {\n this._setDefaultPath(type, shape);\n } else {\n this.cfg = cfg; // when arrow config exists\n\n this._setMarker(attrs.lineWidth, shape);\n }\n\n return this;\n }\n\n Arrow.prototype.match = function () {\n return false;\n };\n\n Arrow.prototype._setDefaultPath = function (type, el) {\n var parent = this.el; // 默认箭头的边长为 10,夹角为 60 度\n\n el.setAttribute('d', \"M0,0 L\" + 10 * Math.cos(Math.PI / 6) + \",5 L0,10\");\n parent.setAttribute('refX', \"\" + 10 * Math.cos(Math.PI / 6));\n parent.setAttribute('refY', \"\" + 5);\n };\n\n Arrow.prototype._setMarker = function (r, el) {\n var parent = this.el;\n var path = this.cfg.path;\n var d = this.cfg.d;\n\n if (util_1.isArray(path)) {\n path = path.map(function (segment) {\n return segment.join(' ');\n }).join('');\n }\n\n el.setAttribute('d', path);\n parent.appendChild(el);\n\n if (d) {\n parent.setAttribute('refX', \"\" + d / r);\n }\n };\n\n Arrow.prototype.update = function (fill) {\n var child = this.child;\n\n if (child.attr) {\n child.attr('fill', fill);\n } else {\n child.setAttribute('fill', fill);\n }\n };\n\n return Arrow;\n}();\n\nexports.default = Arrow;\n\n/***/ }),\n/* 889 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview clip\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar dom_1 = __webpack_require__(71);\n\nvar Clip =\n/** @class */\nfunction () {\n function Clip(cfg) {\n this.type = 'clip';\n this.cfg = {};\n var el = dom_1.createSVGElement('clipPath');\n this.el = el;\n this.id = util_1.uniqueId('clip_');\n el.id = this.id;\n var shapeEl = cfg.cfg.el;\n el.appendChild(shapeEl);\n this.cfg = cfg;\n return this;\n }\n\n Clip.prototype.match = function () {\n return false;\n };\n\n Clip.prototype.remove = function () {\n var el = this.el;\n el.parentNode.removeChild(el);\n };\n\n return Clip;\n}();\n\nexports.default = Clip;\n\n/***/ }),\n/* 890 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * @fileoverview pattern\n * @author dengfuping_develop@163.com\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar dom_1 = __webpack_require__(71);\n\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\n\nvar Pattern =\n/** @class */\nfunction () {\n function Pattern(cfg) {\n this.cfg = {};\n var el = dom_1.createSVGElement('pattern');\n el.setAttribute('patternUnits', 'userSpaceOnUse');\n var child = dom_1.createSVGElement('image');\n el.appendChild(child);\n var id = util_1.uniqueId('pattern_');\n el.id = id;\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n var arr = regexPR.exec(cfg);\n var source = arr[2];\n child.setAttribute('href', source);\n var img = new Image();\n\n if (!source.match(/^data:/i)) {\n img.crossOrigin = 'Anonymous';\n }\n\n img.src = source;\n\n function onload() {\n el.setAttribute('width', \"\" + img.width);\n el.setAttribute('height', \"\" + img.height);\n }\n\n if (img.complete) {\n onload();\n } else {\n img.onload = onload; // Fix onload() bug in IE9\n\n img.src = img.src;\n }\n\n return this;\n }\n\n Pattern.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n\n return Pattern;\n}();\n\nexports.default = Pattern;\n\n/***/ }),\n/* 891 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(20);\n\nvar engine_1 = __webpack_require__(433);\n\nvar dom_1 = __webpack_require__(312);\n\nvar view_1 = tslib_1.__importDefault(__webpack_require__(434));\n/**\n * Chart 类,是使用 G2 进行绘图的入口。\n */\n\n\nvar Chart =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Chart, _super); // @ts-ignore\n\n\n function Chart(props) {\n var _this = this;\n\n var container = props.container,\n width = props.width,\n height = props.height,\n _a = props.autoFit,\n autoFit = _a === void 0 ? false : _a,\n padding = props.padding,\n appendPadding = props.appendPadding,\n _b = props.renderer,\n renderer = _b === void 0 ? 'canvas' : _b,\n pixelRatio = props.pixelRatio,\n _c = props.localRefresh,\n localRefresh = _c === void 0 ? true : _c,\n _d = props.visible,\n visible = _d === void 0 ? true : _d,\n _e = props.supportCSSTransform,\n supportCSSTransform = _e === void 0 ? false : _e,\n _f = props.defaultInteractions,\n defaultInteractions = _f === void 0 ? ['tooltip', 'legend-filter', 'legend-active', 'continuous-filter', 'ellipsis-text'] : _f,\n options = props.options,\n limitInPlot = props.limitInPlot,\n theme = props.theme,\n syncViewPadding = props.syncViewPadding;\n var ele = util_1.isString(container) ? document.getElementById(container) : container; // 生成内部正式绘制的 div 元素\n\n var wrapperElement = dom_1.createDom('');\n ele.appendChild(wrapperElement); // if autoFit, use the container size, to avoid the graph render twice.\n\n var size = dom_1.getChartSize(ele, autoFit, width, height);\n var G = engine_1.getEngine(renderer);\n var canvas = new G.Canvas(tslib_1.__assign({\n container: wrapperElement,\n pixelRatio: pixelRatio,\n localRefresh: localRefresh,\n supportCSSTransform: supportCSSTransform\n }, size)); // 调用 view 的创建\n\n _this = _super.call(this, {\n parent: null,\n canvas: canvas,\n // create 3 group layers for views.\n backgroundGroup: canvas.addGroup({\n zIndex: constant_1.GROUP_Z_INDEX.BG\n }),\n middleGroup: canvas.addGroup({\n zIndex: constant_1.GROUP_Z_INDEX.MID\n }),\n foregroundGroup: canvas.addGroup({\n zIndex: constant_1.GROUP_Z_INDEX.FORE\n }),\n padding: padding,\n appendPadding: appendPadding,\n visible: visible,\n options: options,\n limitInPlot: limitInPlot,\n theme: theme,\n syncViewPadding: syncViewPadding\n }) || this;\n /**\n * when container size changed, change chart size props, and re-render.\n */\n\n _this.onResize = util_1.debounce(function () {\n _this.forceFit();\n }, 300);\n _this.ele = ele;\n _this.canvas = canvas;\n _this.width = size.width;\n _this.height = size.height;\n _this.autoFit = autoFit;\n _this.localRefresh = localRefresh;\n _this.renderer = renderer;\n _this.wrapperElement = wrapperElement; // 自适应大小\n\n _this.updateCanvasStyle();\n\n _this.bindAutoFit();\n\n _this.initDefaultInteractions(defaultInteractions);\n\n return _this;\n }\n\n Chart.prototype.initDefaultInteractions = function (interactions) {\n var _this = this;\n\n util_1.each(interactions, function (interaction) {\n _this.interaction(interaction);\n });\n };\n /**\n * 改变图表大小,同时重新渲染。\n * @param width 图表宽度\n * @param height 图表高度\n * @returns\n */\n\n\n Chart.prototype.changeSize = function (width, height) {\n // 如果宽高一致,那么 changeSize 不执行任何操作\n if (this.width === width && this.height === height) {\n return this;\n }\n\n this.emit(constant_1.VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE);\n this.width = width;\n this.height = height;\n this.canvas.changeSize(width, height); // 重新渲染\n\n this.render(true);\n this.emit(constant_1.VIEW_LIFE_CIRCLE.AFTER_CHANGE_SIZE);\n return this;\n };\n /**\n * 销毁图表,同时解绑事件,销毁创建的 G.Canvas 实例。\n * @returns void\n */\n\n\n Chart.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this.unbindAutoFit();\n this.canvas.destroy();\n dom_1.removeDom(this.wrapperElement);\n this.wrapperElement = null;\n };\n /**\n * 显示或隐藏图表\n * @param visible 是否可见,true 表示显示,false 表示隐藏\n * @returns\n */\n\n\n Chart.prototype.changeVisible = function (visible) {\n _super.prototype.changeVisible.call(this, visible); // 需要更新 visible 变量\n\n\n this.wrapperElement.style.display = visible ? '' : 'none';\n return this;\n };\n /**\n * 自动根据容器大小 resize 画布\n */\n\n\n Chart.prototype.forceFit = function () {\n // skip if already destroyed\n if (!this.destroyed) {\n // 注意第二参数用 true,意思是即时 autoFit = false,forceFit() 调用之后一样是适配容器\n var _a = dom_1.getChartSize(this.ele, true, this.width, this.height),\n width = _a.width,\n height = _a.height;\n\n this.changeSize(width, height);\n }\n };\n\n Chart.prototype.updateCanvasStyle = function () {\n dom_1.modifyCSS(this.canvas.get('el'), {\n display: 'inline-block',\n verticalAlign: 'middle'\n });\n };\n\n Chart.prototype.bindAutoFit = function () {\n if (this.autoFit) {\n window.addEventListener('resize', this.onResize);\n }\n };\n\n Chart.prototype.unbindAutoFit = function () {\n if (this.autoFit) {\n window.removeEventListener('resize', this.onResize);\n }\n };\n\n return Chart;\n}(view_1.default);\n\nexports.default = Chart;\n\n/***/ }),\n/* 892 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar register_1 = __webpack_require__(203);\n\nvar context_1 = tslib_1.__importDefault(__webpack_require__(894));\n\nvar interaction_1 = tslib_1.__importDefault(__webpack_require__(435)); // 将字符串转换成 action\n\n\nfunction parseAction(actionStr, context) {\n var arr = actionStr.split(':');\n var actionName = arr[0]; // 如果已经初始化过 action ,则直接引用之前的 action\n\n var action = context.getAction(actionName) || register_1.createAction(actionName, context);\n\n if (!action) {\n throw new Error(\"There is no action named \" + actionName);\n }\n\n var methodName = arr[1];\n return {\n action: action,\n methodName: methodName\n };\n} // 执行 Action\n\n\nfunction executeAction(actionObject) {\n var action = actionObject.action,\n methodName = actionObject.methodName;\n\n if (action[methodName]) {\n action[methodName]();\n } else {\n throw new Error(\"Action(\" + action.name + \") doesn't have a method called \" + methodName);\n }\n}\n\nvar STEP_NAMES = {\n START: 'start',\n SHOW_ENABLE: 'showEnable',\n END: 'end',\n ROLLBACK: 'rollback',\n PROCESSING: 'processing'\n};\n/**\n * 支持语法的交互类\n */\n\nvar GrammarInteraction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(GrammarInteraction, _super);\n\n function GrammarInteraction(view, steps) {\n var _this = _super.call(this, view, steps) || this;\n\n _this.callbackCaches = {}; // 某个触发和反馈在本环节是否执行或\n\n _this.emitCaches = {};\n _this.steps = steps;\n return _this;\n }\n /**\n * 初始化\n */\n\n\n GrammarInteraction.prototype.init = function () {\n this.initContext();\n\n _super.prototype.init.call(this);\n };\n /**\n * 清理资源\n */\n\n\n GrammarInteraction.prototype.destroy = function () {\n _super.prototype.destroy.call(this); // 先清理事件\n\n\n this.steps = null;\n\n if (this.context) {\n this.context.destroy();\n this.context = null;\n }\n\n this.callbackCaches = null;\n this.view = null;\n };\n /**\n * 绑定事件\n */\n\n\n GrammarInteraction.prototype.initEvents = function () {\n var _this = this;\n\n util_1.each(this.steps, function (stepArr, stepName) {\n util_1.each(stepArr, function (step) {\n var callback = _this.getActionCallback(stepName, step);\n\n if (callback) {\n // 如果存在 callback,才绑定,有时候会出现无 callback 的情况\n _this.bindEvent(step.trigger, callback);\n }\n });\n });\n };\n /**\n * 清理绑定的事件\n */\n\n\n GrammarInteraction.prototype.clearEvents = function () {\n var _this = this;\n\n util_1.each(this.steps, function (stepArr, stepName) {\n util_1.each(stepArr, function (step) {\n var callback = _this.getActionCallback(stepName, step);\n\n if (callback) {\n _this.offEvent(step.trigger, callback);\n }\n });\n });\n }; // 初始化上下文,并初始化 action\n\n\n GrammarInteraction.prototype.initContext = function () {\n var view = this.view;\n var context = new context_1.default(view);\n this.context = context;\n var steps = this.steps; // 生成具体的 Action\n\n util_1.each(steps, function (subSteps) {\n util_1.each(subSteps, function (step) {\n if (util_1.isFunction(step.action)) {\n // 如果传入回调函数,则直接生成 CallbackAction\n step.actionObject = {\n action: register_1.createCallbackAction(step.action, context),\n methodName: 'execute'\n };\n } else if (util_1.isString(step.action)) {\n // 如果是字符串\n step.actionObject = parseAction(step.action, context);\n } else if (util_1.isArray(step.action)) {\n // 如果是数组\n var actionArr = step.action;\n step.actionObject = [];\n util_1.each(actionArr, function (actionStr) {\n step.actionObject.push(parseAction(actionStr, context));\n });\n } // 如果 action 既不是字符串,也不是函数,则不会生成 actionObject\n\n });\n });\n }; // 是否允许指定阶段名称执行\n\n\n GrammarInteraction.prototype.isAllowStep = function (stepName) {\n var currentStepName = this.currentStepName;\n var steps = this.steps; // 相同的阶段允许同时执行\n\n if (currentStepName === stepName) {\n return true;\n }\n\n if (stepName === STEP_NAMES.SHOW_ENABLE) {\n // 示能在整个过程中都可用\n return true;\n }\n\n if (stepName === STEP_NAMES.PROCESSING) {\n // 只有当前是 start 时,才允许 processing\n return currentStepName === STEP_NAMES.START;\n }\n\n if (stepName === STEP_NAMES.START) {\n // 如果当前是 processing,则无法 start,必须等待 end 后才能执行\n return currentStepName !== STEP_NAMES.PROCESSING;\n }\n\n if (stepName === STEP_NAMES.END) {\n return currentStepName === STEP_NAMES.PROCESSING || currentStepName === STEP_NAMES.START;\n }\n\n if (stepName === STEP_NAMES.ROLLBACK) {\n if (steps[STEP_NAMES.END]) {\n // 如果定义了 end, 只有 end 时才允许回滚\n return currentStepName === STEP_NAMES.END;\n } else if (currentStepName === STEP_NAMES.START) {\n // 如果未定义 end, 则判断是否是开始\n return true;\n }\n }\n\n return false;\n }; // 具体的指定阶段是否允许执行\n\n\n GrammarInteraction.prototype.isAllowExecute = function (stepName, step) {\n if (this.isAllowStep(stepName)) {\n var key = this.getKey(stepName, step); // 如果是在本环节内仅允许触发一次,同时已经触发过,则不允许再触发\n\n if (step.once && this.emitCaches[key]) {\n return false;\n } // 如果是允许的阶段,则验证 isEnable 方法\n\n\n if (step.isEnable) {\n return step.isEnable(this.context);\n }\n\n return true; // 如果没有 isEnable 则允许执行\n }\n\n return false;\n };\n\n GrammarInteraction.prototype.enterStep = function (stepName) {\n this.currentStepName = stepName;\n this.emitCaches = {}; // 清除所有本环节触发的缓存\n }; // 执行完某个触发和反馈(子环节)\n\n\n GrammarInteraction.prototype.afterExecute = function (stepName, step) {\n // show enable 不计入正常的流程,其他情况则设置当前的 step\n if (stepName !== STEP_NAMES.SHOW_ENABLE && this.currentStepName !== stepName) {\n this.enterStep(stepName);\n }\n\n var key = this.getKey(stepName, step); // 一旦执行,则缓存标记为,一直保持到跳出改环节\n\n this.emitCaches[key] = true;\n }; // 获取某个环节的唯一的键值\n\n\n GrammarInteraction.prototype.getKey = function (stepName, step) {\n return stepName + step.trigger + step.action;\n }; // 获取 step 的回调函数,如果已经生成,则直接返回,如果未生成,则创建\n\n\n GrammarInteraction.prototype.getActionCallback = function (stepName, step) {\n var _this = this;\n\n var context = this.context;\n var callbackCaches = this.callbackCaches;\n var actionObject = step.actionObject;\n\n if (step.action && actionObject) {\n var key = this.getKey(stepName, step);\n\n if (!callbackCaches[key]) {\n // 动态生成执行的方法,执行对应 action 的名称\n var actionCallback = function actionCallback(event) {\n context.event = event; // 保证检测时的 event\n\n if (_this.isAllowExecute(stepName, step)) {\n // 如果是数组时,则依次执行\n if (util_1.isArray(actionObject)) {\n util_1.each(actionObject, function (obj) {\n context.event = event; // 可能触发新的事件,保证执行前的 context.event 是正确的\n\n executeAction(obj);\n });\n } else {\n context.event = event; // 保证执行前的 context.event 是正确的\n\n executeAction(actionObject);\n }\n\n _this.afterExecute(stepName, step);\n\n if (step.callback) {\n context.event = event; // 保证执行前的 context.event 是正确的\n\n step.callback(context);\n }\n } else {\n // 如果未通过验证,则事件不要绑定在上面\n context.event = null;\n }\n }; // 如果设置了 debounce\n\n\n if (step.debounce) {\n callbackCaches[key] = util_1.debounce(actionCallback, step.debounce.wait, step.debounce.immediate);\n } else if (step.throttle) {\n // 设置 throttle\n callbackCaches[key] = util_1.throttle(actionCallback, step.throttle.wait, {\n leading: step.throttle.leading,\n trailing: step.throttle.trailing\n });\n } else {\n // 直接设置\n callbackCaches[key] = actionCallback;\n }\n }\n\n return callbackCaches[key];\n }\n\n return null;\n };\n\n GrammarInteraction.prototype.bindEvent = function (eventName, callback) {\n var nameArr = eventName.split(':');\n\n if (nameArr[0] === 'window') {\n window.addEventListener(nameArr[1], callback);\n } else if (nameArr[0] === 'document') {\n document.addEventListener(nameArr[1], callback);\n } else {\n this.view.on(eventName, callback);\n }\n };\n\n GrammarInteraction.prototype.offEvent = function (eventName, callback) {\n var nameArr = eventName.split(':');\n\n if (nameArr[0] === 'window') {\n window.removeEventListener(nameArr[1], callback);\n } else if (nameArr[0] === 'document') {\n document.removeEventListener(nameArr[1], callback);\n } else {\n this.view.off(eventName, callback);\n }\n };\n\n return GrammarInteraction;\n}(interaction_1.default);\n\nexports.default = GrammarInteraction;\n\n/***/ }),\n/* 893 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(47));\n/** 回调函数构建的 Action */\n\n\nvar CallbackAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(CallbackAction, _super);\n\n function CallbackAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 执行\n */\n\n\n CallbackAction.prototype.execute = function () {\n if (this.callback) {\n this.callback(this.context);\n }\n };\n /**\n * 销毁\n */\n\n\n CallbackAction.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this.callback = null;\n };\n\n return CallbackAction;\n}(base_1.default);\n\nexports.default = CallbackAction;\n\n/***/ }),\n/* 894 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(30);\n/**\n * 交互的上下文\n */\n\n\nvar Context =\n/** @class */\nfunction () {\n function Context(view) {\n /** 当前所有的 Action */\n this.actions = [];\n /** 当前事件对象 */\n\n this.event = null;\n this.cacheMap = {};\n this.view = view;\n }\n /**\n * 缓存信息\n * @param params 缓存的字段\n * - 如果一个字段则获取缓存\n * - 两个字段则设置缓存\n */\n\n\n Context.prototype.cache = function () {\n var params = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n params[_i] = arguments[_i];\n }\n\n if (params.length === 1) {\n return this.cacheMap[params[0]];\n } else if (params.length === 2) {\n this.cacheMap[params[0]] = params[1];\n }\n };\n /**\n * 获取 Action\n * @param name Action 的名称\n */\n\n\n Context.prototype.getAction = function (name) {\n return this.actions.find(function (action) {\n return action.name === name;\n });\n };\n /**\n * 获取 Action\n * @param action Action 对象\n */\n\n\n Context.prototype.addAction = function (action) {\n this.actions.push(action);\n };\n /**\n * 移除 Action\n * @param action Action 对象\n */\n\n\n Context.prototype.removeAction = function (action) {\n var actions = this.actions;\n var index = this.actions.indexOf(action);\n\n if (index >= 0) {\n actions.splice(index, 1);\n }\n };\n /**\n * 获取当前的点\n */\n\n\n Context.prototype.getCurrentPoint = function () {\n var event = this.event;\n\n if (event) {\n if (event.target instanceof HTMLElement) {\n var canvas = this.view.getCanvas();\n var point = canvas.getPointByClient(event.clientX, event.clientY);\n return point;\n } else {\n return {\n x: event.x,\n y: event.y\n };\n }\n }\n\n return null;\n };\n /**\n * 获取当前 shape\n * @returns current shape\n */\n\n\n Context.prototype.getCurrentShape = function () {\n return util_1.get(this.event, ['gEvent', 'shape']);\n };\n /**\n * 当前的触发是否在 View 内\n */\n\n\n Context.prototype.isInPlot = function () {\n var point = this.getCurrentPoint();\n\n if (point) {\n return this.view.isPointInPlot(point);\n }\n\n return false;\n };\n /**\n * 是否在指定的图形内\n * @param name shape 的 name\n */\n\n\n Context.prototype.isInShape = function (name) {\n var shape = this.getCurrentShape(); // 不再考虑在 shape 的 parent 内的情况\n\n if (shape) {\n return shape.get('name') === name;\n }\n\n return false;\n };\n /**\n * 当前的触发是组件内部\n * @param name 组件名,可以为空\n */\n\n\n Context.prototype.isInComponent = function (name) {\n var components = util_2.getComponents(this.view);\n var point = this.getCurrentPoint();\n\n if (point) {\n return !!components.find(function (component) {\n var bbox = component.getBBox();\n\n if (name) {\n return component.get('name') === name && util_2.isInBox(bbox, point);\n } else {\n return util_2.isInBox(bbox, point);\n }\n });\n }\n\n return false;\n };\n /**\n * 销毁\n */\n\n\n Context.prototype.destroy = function () {\n this.view = null;\n this.event = null; // 先销毁 action 再清空,一边遍历,一边删除,所以数组需要更新引用\n\n util_1.each(this.actions.slice(), function (action) {\n action.destroy();\n });\n this.actions = null;\n this.cacheMap = null;\n };\n\n return Context;\n}();\n\nexports.default = Context;\n\n/***/ }),\n/* 895 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createTheme = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar create_by_style_sheet_1 = __webpack_require__(109);\n\nvar light_1 = __webpack_require__(131);\n\nfunction createTheme(themeCfg) {\n var _a = themeCfg.styleSheet,\n styleSheetCfg = _a === void 0 ? {} : _a,\n themeObject = tslib_1.__rest(themeCfg, [\"styleSheet\"]); // ① 创建样式表 (默认创建 light 的样式表)\n\n\n var styleSheet = light_1.createLightStyleSheet(styleSheetCfg); // ② 创建主题\n\n return util_1.deepMix({}, create_by_style_sheet_1.createThemeByStyleSheet(styleSheet), themeObject);\n}\n\nexports.createTheme = createTheme;\n\n/***/ }),\n/* 896 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar dependents_1 = __webpack_require__(68);\n/**\n * coordinate controller,职责:\n * 1. 创建实例\n * 2. 暂存配置\n */\n\n\nvar CoordinateController =\n/** @class */\nfunction () {\n function CoordinateController(option) {\n // 设置默认值,并存储配置\n this.option = this.wrapperOption(option);\n }\n /**\n * 更新配置\n * @param option\n */\n\n\n CoordinateController.prototype.update = function (option) {\n this.option = this.wrapperOption(option);\n return this;\n };\n /**\n * 是否存在某一个 action\n * @param actionName\n */\n\n\n CoordinateController.prototype.hasAction = function (actionName) {\n var actions = this.option.actions;\n return util_1.some(actions, function (action) {\n return action[0] === actionName;\n });\n };\n /**\n * 创建坐标系对象\n * @param start 起始位置\n * @param end 结束位置\n * @return 坐标系实例\n */\n\n\n CoordinateController.prototype.create = function (start, end) {\n var _a = this.option,\n type = _a.type,\n cfg = _a.cfg;\n var isTheta = type === 'theta'; // 1. 起始位置\n\n var props = tslib_1.__assign({\n start: start,\n end: end\n }, cfg); // 2. 创建实例\n\n\n var C = dependents_1.getCoordinate(isTheta ? 'polar' : type);\n this.coordinate = new C(props); // @ts-ignore FIXME coordinate 包问题导致 type 不正确\n\n this.coordinate.type = type; // 3. 添加默认 action\n\n if (isTheta) {\n // 不存在 transpose,为其自动设置一个 action\n if (!this.hasAction('transpose')) {\n this.transpose();\n }\n } // 4. 执行 action\n\n\n this.execActions();\n return this.coordinate;\n };\n /**\n * 更新坐标系对象\n * @param start 起始位置\n * @param end 结束位置\n * @return 坐标系实例\n */\n\n\n CoordinateController.prototype.adjust = function (start, end) {\n this.coordinate.update({\n start: start,\n end: end\n }); // 更新坐标系大小的时候,需要:\n // 1. 重置 matrix\n // 2. 重新执行作用于 matrix 的 action\n\n this.coordinate.resetMatrix();\n this.execActions(['scale', 'rotate', 'translate']);\n return this.coordinate;\n };\n /**\n * 旋转弧度\n * @param angle\n */\n\n\n CoordinateController.prototype.rotate = function (angle) {\n this.option.actions.push(['rotate', angle]);\n return this;\n };\n /**\n * 镜像\n * @param dim\n */\n\n\n CoordinateController.prototype.reflect = function (dim) {\n this.option.actions.push(['reflect', dim]);\n return this;\n };\n /**\n * scale\n * @param sx\n * @param sy\n */\n\n\n CoordinateController.prototype.scale = function (sx, sy) {\n this.option.actions.push(['scale', sx, sy]);\n return this;\n };\n /**\n * 对角变换\n */\n\n\n CoordinateController.prototype.transpose = function () {\n this.option.actions.push(['transpose']);\n return this;\n };\n /**\n * 获取配置\n */\n\n\n CoordinateController.prototype.getOption = function () {\n return this.option;\n };\n /**\n * 获得 coordinate 实例\n */\n\n\n CoordinateController.prototype.getCoordinate = function () {\n return this.coordinate;\n };\n /**\n * 包装配置的默认值\n * @param option\n */\n\n\n CoordinateController.prototype.wrapperOption = function (option) {\n return tslib_1.__assign({\n type: 'rect',\n actions: [],\n cfg: {}\n }, option);\n };\n /**\n * coordinate 实例执行 actions\n * @params includeActions 如果没有指定,则执行全部,否则,执行指定的 action\n */\n\n\n CoordinateController.prototype.execActions = function (includeActions) {\n var _this = this;\n\n var actions = this.option.actions;\n util_1.each(actions, function (action) {\n var _a;\n\n var actionName = action[0],\n args = action.slice(1);\n var shouldExec = util_1.isNil(includeActions) ? true : includeActions.includes(actionName);\n\n if (shouldExec) {\n (_a = _this.coordinate)[actionName].apply(_a, args);\n }\n });\n };\n\n return CoordinateController;\n}();\n\nexports.default = CoordinateController;\n\n/***/ }),\n/* 897 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * @ignore\n * G2 默认提供的 layout 函数\n * 内置布局函数处理的逻辑:\n *\n * 1. 如果 padding = 'auto',那么自动根据组件的 direction 来计算 padding 数组\n * 2. 根据 padding 和 direction 去分配对应方向的 padding 数值\n * 3. 移动组件位置\n *\n * 前面 1,2 步骤在 view 中已经做掉了。对于组件响应式布局,可以尝试使用约束布局的方式去求解位置信息。\n * @param view\n */\n\nfunction defaultLayout(view) {\n var axis = view.getController('axis');\n var legend = view.getController('legend');\n var annotation = view.getController('annotation');\n var slider = view.getController('slider');\n var scrollbar = view.getController('scrollbar'); // 根据最新的 coordinate 重新布局组件\n\n [axis, slider, scrollbar, legend, annotation].forEach(function (controller) {\n if (controller) {\n controller.layout();\n }\n });\n}\n\nexports.default = defaultLayout;\n\n/***/ }),\n/* 898 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ScalePool = void 0;\n/**\n * view 中缓存 scale 的类\n */\n\nvar util_1 = __webpack_require__(0);\n\nvar scale_1 = __webpack_require__(145);\n/** @ignore */\n\n\nvar ScalePool =\n/** @class */\nfunction () {\n function ScalePool() {\n /** 所有的 scales */\n this.scales = new Map();\n /** 需要同步的 scale 分组, key: scaleKeyArray */\n\n this.syncScales = new Map();\n }\n /**\n * 创建 scale\n * @param field\n * @param data\n * @param scaleDef\n * @param key\n */\n\n\n ScalePool.prototype.createScale = function (field, data, scaleDef, key) {\n var finalScaleDef = scaleDef;\n var cacheScaleMeta = this.getScaleMeta(key);\n\n if (data.length === 0 && cacheScaleMeta) {\n // 在更新过程中数据变为空,同时 key 对应的 scale 已存在则保持 scale 同类型\n var cacheScale = cacheScaleMeta.scale;\n var cacheScaleDef = {\n type: cacheScale.type\n };\n\n if (cacheScale.isCategory) {\n // 如果是分类类型,保持 values\n cacheScaleDef.values = cacheScale.values;\n }\n\n finalScaleDef = util_1.deepMix(cacheScaleDef, cacheScaleMeta.scaleDef, scaleDef);\n }\n\n var scale = scale_1.createScaleByField(field, data, finalScaleDef); // 缓存起来\n\n this.cacheScale(scale, scaleDef, key);\n return scale;\n };\n /**\n * 同步 scale\n */\n\n\n ScalePool.prototype.sync = function (coordinate, theme) {\n var _this = this; // 对于 syncScales 中每一个 syncKey 下面的 scale 数组进行同步处理\n\n\n this.syncScales.forEach(function (scaleKeys, syncKey) {\n // min, max, values, ranges\n var min = Number.MAX_SAFE_INTEGER;\n var max = Number.MIN_SAFE_INTEGER;\n var values = []; // 1. 遍历求得最大最小值,values 等\n\n util_1.each(scaleKeys, function (key) {\n var scale = _this.getScale(key);\n\n max = util_1.isNumber(scale.max) ? Math.max(max, scale.max) : max;\n min = util_1.isNumber(scale.min) ? Math.min(min, scale.min) : min; // 去重\n\n util_1.each(scale.values, function (v) {\n if (!values.includes(v)) {\n values.push(v);\n }\n });\n }); // 2. 同步\n\n util_1.each(scaleKeys, function (key) {\n var scale = _this.getScale(key);\n\n if (scale.isContinuous) {\n scale.change({\n min: min,\n max: max,\n values: values\n });\n } else if (scale.isCategory) {\n var range = scale.range;\n\n var cacheScaleMeta = _this.getScaleMeta(key); // 存在 value 值,且用户没有配置 range 配置 to fix https://github.com/antvis/G2/issues/2996\n\n\n if (values && !util_1.get(cacheScaleMeta, ['scaleDef', 'range'])) {\n // 更新 range\n range = scale_1.getDefaultCategoryScaleRange(util_1.deepMix({}, scale, {\n values: values\n }), coordinate, theme);\n }\n\n scale.change({\n values: values,\n range: range\n });\n }\n });\n });\n };\n /**\n * 缓存一个 scale\n * @param scale\n * @param scaleDef\n * @param key\n */\n\n\n ScalePool.prototype.cacheScale = function (scale, scaleDef, key) {\n // 1. 缓存到 scales\n var sm = this.getScaleMeta(key); // 存在则更新,同时检测类型是否一致\n\n if (sm && sm.scale.type === scale.type) {\n scale_1.syncScale(sm.scale, scale);\n sm.scaleDef = scaleDef; // 更新 scaleDef\n } else {\n sm = {\n key: key,\n scale: scale,\n scaleDef: scaleDef\n };\n this.scales.set(key, sm);\n } // 2. 缓存到 syncScales,构造 Record 数据结构\n\n\n var syncKey = this.getSyncKey(sm);\n sm.syncKey = syncKey; // 设置 sync 同步的 key\n // 因为存在更新 scale 机制,所以在缓存之前,先从原 syncScales 中去除 sync 的缓存引用\n\n this.removeFromSyncScales(key); // 存在 sync 标记才进行 sync\n\n if (syncKey) {\n // 不存在这个 syncKey,则创建一个空数组\n var scaleKeys = this.syncScales.get(syncKey);\n\n if (!scaleKeys) {\n scaleKeys = [];\n this.syncScales.set(syncKey, scaleKeys);\n }\n\n scaleKeys.push(key);\n }\n };\n /**\n * 通过 key 获取 scale\n * @param key\n */\n\n\n ScalePool.prototype.getScale = function (key) {\n var scaleMeta = this.getScaleMeta(key);\n\n if (!scaleMeta) {\n var field = util_1.last(key.split('-'));\n var scaleKeys = this.syncScales.get(field);\n\n if (scaleKeys && scaleKeys.length) {\n scaleMeta = this.getScaleMeta(scaleKeys[0]);\n }\n }\n\n return scaleMeta && scaleMeta.scale;\n };\n /**\n * 在 view 销毁的时候,删除 scale 实例,防止内存泄露\n * @param key\n */\n\n\n ScalePool.prototype.deleteScale = function (key) {\n var scaleMeta = this.getScaleMeta(key);\n\n if (scaleMeta) {\n var syncKey = scaleMeta.syncKey;\n var scaleKeys = this.syncScales.get(syncKey); // 移除同步的关系\n\n if (scaleKeys && scaleKeys.length) {\n var idx = scaleKeys.indexOf(key);\n\n if (idx !== -1) {\n scaleKeys.splice(idx, 1);\n }\n }\n } // 删除 scale 实例\n\n\n this.scales.delete(key);\n };\n /**\n * 清空\n */\n\n\n ScalePool.prototype.clear = function () {\n this.scales.clear();\n this.syncScales.clear();\n };\n /**\n * 删除 sync scale 引用\n * @param key\n */\n\n\n ScalePool.prototype.removeFromSyncScales = function (key) {\n var _this = this;\n\n this.syncScales.forEach(function (scaleKeys, syncKey) {\n var idx = scaleKeys.indexOf(key);\n\n if (idx !== -1) {\n scaleKeys.splice(idx, 1); // 删除空数组值\n\n if (scaleKeys.length === 0) {\n _this.syncScales.delete(syncKey);\n }\n\n return false; // 跳出循环\n }\n });\n };\n /**\n * get sync key\n * @param sm\n */\n\n\n ScalePool.prototype.getSyncKey = function (sm) {\n var scale = sm.scale,\n scaleDef = sm.scaleDef;\n var field = scale.field;\n var sync = util_1.get(scaleDef, ['sync']); // 如果 sync = true,则直接使用字段名作为 syncKey\n\n return sync === true ? field : sync === false ? undefined : sync;\n };\n /**\n * 通过 key 获取 scale\n * @param key\n */\n\n\n ScalePool.prototype.getScaleMeta = function (key) {\n return this.scales.get(key);\n };\n\n return ScalePool;\n}();\n\nexports.ScalePool = ScalePool;\n\n/***/ }),\n/* 899 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.calculatePadding = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar constant_1 = __webpack_require__(20);\n\nvar bbox_1 = __webpack_require__(77);\n\nvar padding_1 = __webpack_require__(268);\n\nvar padding_cal_1 = __webpack_require__(438);\n/**\n * @ignore\n * 根据 view 中的组件,计算实际的 padding 数值\n * @param view\n */\n\n\nfunction calculatePadding(view) {\n var padding = view.padding; // 如果不是 auto padding,那么直接解析之后返回\n\n if (!padding_1.isAutoPadding(padding)) {\n return new (padding_cal_1.PaddingCal.bind.apply(padding_cal_1.PaddingCal, tslib_1.__spreadArrays([void 0], padding_1.parsePadding(padding))))();\n } // 是 auto padding,根据组件的情况,来计算 padding\n\n\n var viewBBox = view.viewBBox;\n var paddingCal = new padding_cal_1.PaddingCal();\n var axisComponents = [];\n var paddingComponents = [];\n var otherComponents = [];\n util_1.each(view.getComponents(), function (co) {\n var type = co.type;\n\n if (type === constant_1.COMPONENT_TYPE.AXIS) {\n axisComponents.push(co);\n } else if ([constant_1.COMPONENT_TYPE.LEGEND, constant_1.COMPONENT_TYPE.SLIDER, constant_1.COMPONENT_TYPE.SCROLLBAR].includes(type)) {\n paddingComponents.push(co);\n } else if (type !== constant_1.COMPONENT_TYPE.GRID && type !== constant_1.COMPONENT_TYPE.TOOLTIP) {\n otherComponents.push(co);\n }\n }); // 进行坐标轴布局,应该是取 padding 的并集,而不是进行相加\n\n util_1.each(axisComponents, function (co) {\n var component = co.component;\n var bboxObject = component.getLayoutBBox();\n var componentBBox = new bbox_1.BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height);\n var exceed = componentBBox.exceed(viewBBox); // 在对组件分组之后,先对 axis 进行处理,然后取最大的超出即可。\n\n paddingCal.max(exceed);\n }); // 有 padding 的组件布局\n\n util_1.each(paddingComponents, function (co) {\n var component = co.component,\n direction = co.direction;\n var bboxObject = component.getLayoutBBox();\n var componentPadding = component.get('padding');\n var componentBBox = new bbox_1.BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(componentPadding); // 按照方向计算 padding\n\n paddingCal.inc(componentBBox, direction);\n }); // 其他组件布局\n\n util_1.each(otherComponents, function (co) {\n var component = co.component,\n direction = co.direction;\n var bboxObject = component.getLayoutBBox();\n var componentBBox = new bbox_1.BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height); // 按照方向计算 padding\n\n paddingCal.inc(componentBBox, direction);\n });\n return paddingCal;\n}\n\nexports.calculatePadding = calculatePadding;\n\n/***/ }),\n/* 900 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultSyncViewPadding = void 0;\n/**\n * 默认的 syncViewPadding 逻辑\n * @param chart\n * @param views\n * @param PC: PaddingCalCtor\n */\n\nfunction defaultSyncViewPadding(chart, views, PC) {\n var syncPadding = PC.instance(); // 所有的 view 的 autoPadding 指向同一个引用\n\n views.forEach(function (v) {\n v.autoPadding = syncPadding.max(v.autoPadding.getPadding());\n });\n}\n\nexports.defaultSyncViewPadding = defaultSyncViewPadding;\n\n/***/ }),\n/* 901 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.group = void 0;\n\nvar util_1 = __webpack_require__(0);\n/** @ignore */\n\n\nfunction group(data, fields, appendConditions) {\n if (appendConditions === void 0) {\n appendConditions = {};\n }\n\n if (!fields) {\n return [data];\n }\n\n var groups = util_1.groupToMap(data, fields);\n var array = [];\n\n if (fields.length === 1 && appendConditions[fields[0]]) {\n var values = appendConditions[fields[0]];\n\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n var arr = groups[\"_\" + value];\n\n if (arr) {\n // 可能存在用户设置 values ,但是数据中没有对应的字段,则这时候 arr 就为 null\n array.push(arr);\n }\n }\n } else {\n for (var k in groups) {\n if (groups.hasOwnProperty(k)) {\n var eachGroup = groups[k];\n array.push(eachGroup);\n }\n }\n }\n\n return array;\n}\n\nexports.group = group;\n\n/***/ }),\n/* 902 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseFields = void 0;\n\nvar util_1 = __webpack_require__(0);\n/** @ignore */\n\n\nfunction parseFields(field) {\n if (util_1.isArray(field)) {\n return field;\n }\n\n return field.split('*');\n}\n\nexports.parseFields = parseFields;\n\n/***/ }),\n/* 903 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar animate_1 = __webpack_require__(96);\n\nvar label_1 = __webpack_require__(272);\n\nvar util_2 = __webpack_require__(114);\n\nvar graphics_1 = __webpack_require__(45);\n\nvar transform_1 = __webpack_require__(115);\n\nvar constant_1 = __webpack_require__(20);\n\nvar update_label_1 = __webpack_require__(904);\n/**\n * Geometry labels 渲染组件\n */\n\n\nvar Labels =\n/** @class */\nfunction () {\n function Labels(cfg) {\n /** 存储当前 shape 的映射表,键值为 shape id */\n this.shapesMap = {};\n this.lastShapesMap = {};\n var layout = cfg.layout,\n container = cfg.container;\n this.layout = layout;\n this.container = container;\n }\n /**\n * 渲染文本\n */\n\n\n Labels.prototype.render = function (items, shapes, isUpdate) {\n var _this = this;\n\n if (isUpdate === void 0) {\n isUpdate = false;\n }\n\n this.shapesMap = {};\n var container = this.container;\n var offscreenGroup = this.createOffscreenGroup(); // 创建虚拟分组\n\n if (items.length) {\n // 如果 items 空的话就不进行绘制调整操作\n // step 1: 在虚拟 group 中创建 shapes\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n\n if (item) {\n this.renderLabel(item, offscreenGroup);\n }\n } // step 2: 根据布局,调整 labels\n\n\n this.doLayout(items, shapes); // step 3.1: 绘制 labelLine\n\n this.renderLabelLine(items); // step 3.2: 绘制 labelBackground\n\n this.renderLabelBackground(items); // step 4: 根据用户设置的偏移量调整 label\n\n this.adjustLabel(items);\n } // 进行添加、更新、销毁操作\n\n\n var lastShapesMap = this.lastShapesMap;\n var shapesMap = this.shapesMap;\n util_1.each(shapesMap, function (shape, id) {\n if (shape.destroyed) {\n // label 在布局调整环节被删除了(doLayout)\n delete shapesMap[id];\n } else {\n if (lastShapesMap[id]) {\n // 图形发生更新\n var data = shape.get('data');\n var origin_1 = shape.get('origin');\n var coordinate = shape.get('coordinate');\n var currentAnimateCfg = shape.get('animateCfg');\n var currentShape = lastShapesMap[id]; // 已经在渲染树上的 shape\n\n update_label_1.updateLabel(currentShape, shapesMap[id], {\n data: data,\n origin: origin_1,\n animateCfg: currentAnimateCfg,\n coordinate: coordinate\n });\n _this.shapesMap[id] = currentShape; // 保存引用\n } else {\n // 新生成的 shape\n container.add(shape);\n var animateCfg = util_1.get(shape.get('animateCfg'), isUpdate ? 'enter' : 'appear');\n\n if (animateCfg) {\n animate_1.doAnimate(shape, animateCfg, {\n toAttrs: tslib_1.__assign({}, shape.attr()),\n coordinate: shape.get('coordinate')\n });\n }\n }\n\n delete lastShapesMap[id];\n }\n }); // 移除\n\n util_1.each(lastShapesMap, function (deleteShape) {\n var animateCfg = util_1.get(deleteShape.get('animateCfg'), 'leave');\n\n if (animateCfg) {\n animate_1.doAnimate(deleteShape, animateCfg, {\n toAttrs: null,\n coordinate: deleteShape.get('coordinate')\n });\n } else {\n deleteShape.remove(true); // 移除\n }\n });\n this.lastShapesMap = shapesMap;\n offscreenGroup.destroy();\n };\n /** 清除当前 labels */\n\n\n Labels.prototype.clear = function () {\n this.container.clear();\n this.shapesMap = {};\n this.lastShapesMap = {};\n };\n /** 销毁 */\n\n\n Labels.prototype.destroy = function () {\n this.container.destroy();\n this.shapesMap = null;\n this.lastShapesMap = null;\n };\n\n Labels.prototype.renderLabel = function (cfg, container) {\n var id = cfg.id,\n elementId = cfg.elementId,\n data = cfg.data,\n mappingData = cfg.mappingData,\n coordinate = cfg.coordinate,\n animate = cfg.animate,\n content = cfg.content;\n var shapeAppendCfg = {\n id: id,\n elementId: elementId,\n data: data,\n origin: tslib_1.__assign(tslib_1.__assign({}, mappingData), {\n data: mappingData[constant_1.FIELD_ORIGIN]\n }),\n coordinate: coordinate\n };\n var labelGroup = container.addGroup(tslib_1.__assign({\n name: 'label',\n // 如果 this.animate === false 或者 cfg.animate === false/null 则不进行动画,否则进行动画配置的合并\n animateCfg: this.animate === false || animate === null || animate === false ? false : util_1.deepMix({}, this.animate, animate)\n }, shapeAppendCfg));\n var labelShape;\n\n if (content.isGroup && content.isGroup() || content.isShape && content.isShape()) {\n // 如果 content 是 Group 或者 Shape,根据 textAlign 调整位置后,直接将其加入 labelGroup\n var _a = content.getCanvasBBox(),\n width = _a.width,\n height = _a.height;\n\n var textAlign = util_1.get(cfg, 'textAlign', 'left');\n var x = cfg.x;\n var y = cfg.y - height / 2;\n\n if (textAlign === 'center') {\n x = x - width / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n x = x - width;\n }\n\n transform_1.translate(content, x, y); // 将 label 平移至 x, y 指定的位置\n\n labelShape = content;\n labelGroup.add(content);\n } else {\n var fill = util_1.get(cfg, ['style', 'fill']);\n labelShape = labelGroup.addShape('text', tslib_1.__assign({\n attrs: tslib_1.__assign(tslib_1.__assign({\n x: cfg.x,\n y: cfg.y,\n textAlign: cfg.textAlign,\n textBaseline: util_1.get(cfg, 'textBaseline', 'middle'),\n text: cfg.content\n }, cfg.style), {\n fill: util_1.isNull(fill) ? cfg.color : fill\n })\n }, shapeAppendCfg));\n }\n\n if (cfg.rotate) {\n transform_1.rotate(labelShape, cfg.rotate);\n }\n\n this.shapesMap[id] = labelGroup;\n }; // 根据type对label布局\n\n\n Labels.prototype.doLayout = function (items, shapes) {\n var _this = this;\n\n if (this.layout) {\n var layouts = util_1.isArray(this.layout) ? this.layout : [this.layout];\n util_1.each(layouts, function (layout) {\n var layoutFn = label_1.getGeometryLabelLayout(util_1.get(layout, 'type', ''));\n\n if (layoutFn) {\n var labelShapes_1 = [];\n var geometryShapes_1 = [];\n util_1.each(_this.shapesMap, function (labelShape, id) {\n labelShapes_1.push(labelShape);\n geometryShapes_1.push(shapes[labelShape.get('elementId')]);\n });\n layoutFn(items, labelShapes_1, geometryShapes_1, _this.region, layout.cfg);\n }\n });\n }\n };\n\n Labels.prototype.renderLabelLine = function (labelItems) {\n var _this = this;\n\n util_1.each(labelItems, function (labelItem) {\n var coordinate = util_1.get(labelItem, 'coordinate');\n\n if (!labelItem || !coordinate) {\n return;\n }\n\n var center = coordinate.getCenter();\n var radius = coordinate.getRadius();\n\n if (!labelItem.labelLine) {\n // labelLine: null | false,关闭 label 对应的 labelLine\n return;\n }\n\n var labelLineCfg = util_1.get(labelItem, 'labelLine', {});\n var id = labelItem.id;\n var path = labelLineCfg.path;\n\n if (!path) {\n var start = graphics_1.polarToCartesian(center.x, center.y, radius, labelItem.angle);\n path = [['M', start.x, start.y], ['L', labelItem.x, labelItem.y]];\n }\n\n var labelGroup = _this.shapesMap[id];\n\n if (!labelGroup.destroyed) {\n labelGroup.addShape('path', {\n capture: false,\n attrs: tslib_1.__assign({\n path: path,\n stroke: labelItem.color ? labelItem.color : util_1.get(labelItem, ['style', 'fill'], '#000'),\n fill: null\n }, labelLineCfg.style),\n id: id,\n origin: labelItem.mappingData,\n data: labelItem.data,\n coordinate: labelItem.coordinate\n });\n }\n });\n };\n /**\n * 绘制标签背景\n * @param labelItems\n */\n\n\n Labels.prototype.renderLabelBackground = function (labelItems) {\n var _this = this;\n\n util_1.each(labelItems, function (labelItem) {\n var coordinate = util_1.get(labelItem, 'coordinate');\n var background = util_1.get(labelItem, 'background');\n\n if (!background || !coordinate) {\n return;\n }\n\n var id = labelItem.id;\n var labelGroup = _this.shapesMap[id];\n\n if (!labelGroup.destroyed) {\n var labelContentShape = labelGroup.getChildren()[0];\n\n if (labelContentShape) {\n var _a = util_2.getlLabelBackgroundInfo(labelGroup, labelItem, background.padding),\n rotation = _a.rotation,\n box = tslib_1.__rest(_a, [\"rotation\"]);\n\n var backgroundShape = labelGroup.addShape('rect', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, box), background.style || {}),\n id: id,\n origin: labelItem.mappingData,\n data: labelItem.data,\n coordinate: labelItem.coordinate\n });\n backgroundShape.setZIndex(-1);\n\n if (rotation) {\n var matrix = labelContentShape.getMatrix();\n backgroundShape.setMatrix(matrix);\n }\n }\n }\n });\n };\n\n Labels.prototype.createOffscreenGroup = function () {\n var container = this.container;\n var GroupClass = container.getGroupBase(); // 获取分组的构造函数\n\n var newGroup = new GroupClass({});\n return newGroup;\n };\n\n Labels.prototype.adjustLabel = function (items) {\n var _this = this;\n\n util_1.each(items, function (item) {\n if (item) {\n var id = item.id;\n var labelGroup = _this.shapesMap[id];\n\n if (!labelGroup.destroyed) {\n // fix: 如果说开发者的 label content 是一个 group,此处的偏移无法对 整个 content group 生效;场景类似 饼图 spider label 是一个含 2 个 textShape 的 gorup\n var labelShapes = labelGroup.findAll(function (ele) {\n return ele.get('type') !== 'path';\n });\n util_1.each(labelShapes, function (labelShape) {\n if (labelShape) {\n if (item.offsetX) {\n labelShape.attr('x', labelShape.attr('x') + item.offsetX);\n }\n\n if (item.offsetY) {\n labelShape.attr('y', labelShape.attr('y') + item.offsetY);\n }\n }\n });\n }\n }\n });\n };\n\n return Labels;\n}();\n\nexports.default = Labels;\n\n/***/ }),\n/* 904 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLabel = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar animate_1 = __webpack_require__(96);\n\nvar graphics_1 = __webpack_require__(45);\n/**\n * @desc 更新 label (目前没有根据 id 索引,还是会存在一点小问题的,只能根据 idx 索引)\n * @done shape 属性更新\n * @done shape delete\n * @done shape append\n *\n * @param fromShape old labelShape\n * @param toShape new labelShape\n * @param cfg\n */\n\n\nfunction updateLabel(fromShape, toShape, cfg) {\n var data = cfg.data,\n origin = cfg.origin,\n animateCfg = cfg.animateCfg,\n coordinate = cfg.coordinate;\n var updateAnimateCfg = util_1.get(animateCfg, 'update');\n fromShape.set('data', data);\n fromShape.set('origin', origin);\n fromShape.set('animateCfg', animateCfg);\n fromShape.set('coordinate', coordinate);\n fromShape.set('visible', toShape.get('visible'));\n fromShape.getChildren().forEach(function (fromChild, idx) {\n var toChild = toShape.getChildByIndex(idx);\n\n if (!toChild) {\n fromShape.removeChild(fromChild);\n fromChild.remove(true);\n } else {\n fromChild.set('data', data);\n fromChild.set('origin', origin);\n fromChild.set('animateCfg', animateCfg);\n fromChild.set('coordinate', coordinate);\n var newAttrs = graphics_1.getReplaceAttrs(fromChild, toChild);\n\n if (updateAnimateCfg) {\n animate_1.doAnimate(fromChild, updateAnimateCfg, {\n toAttrs: newAttrs,\n coordinate: coordinate\n });\n } else {\n fromChild.attr(newAttrs);\n }\n\n if (toChild.isGroup()) {\n updateLabel(fromChild, toChild, cfg);\n }\n }\n }); // append\n\n util_1.each(toShape.getChildren(), function (child, idx) {\n if (idx >= fromShape.getCount()) {\n if (!child.destroyed) {\n fromShape.add(child);\n }\n }\n });\n}\n\nexports.updateLabel = updateLabel;\n\n/***/ }),\n/* 905 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getMappingValue = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n/**\n * @ignore\n * get the mapping value by attribute, if mapping value is nil, return def\n * @param attr\n * @param value\n * @param def\n * @returns get mapping value\n */\n\n\nfunction getMappingValue(attr, value, def) {\n if (!attr) {\n return def;\n }\n\n var r; // 多参数映射,阻止程序报错\n\n if (attr.callback && attr.callback.length > 1) {\n var restArgs = Array(attr.callback.length - 1).fill('');\n r = attr.mapping.apply(attr, tslib_1.__spreadArrays([value], restArgs)).join('');\n } else {\n r = attr.mapping(value).join('');\n }\n\n return r || def;\n}\n\nexports.getMappingValue = getMappingValue;\n\n/***/ }),\n/* 906 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getPrototypeOf = __webpack_require__(4);\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nmodule.exports = _superPropBase;\n\n/***/ }),\n/* 907 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var _antv_g2_lib_animate_animation_fade__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);\n/* harmony import */ var _antv_g2_lib_animate_animation_fade__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_fade__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(172);\n/* harmony import */ var _antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _antv_g2_lib_animate_animation_path_in__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(166);\n/* harmony import */ var _antv_g2_lib_animate_animation_path_in__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_path_in__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _antv_g2_lib_animate_animation_position_update__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(313);\n/* harmony import */ var _antv_g2_lib_animate_animation_position_update__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_position_update__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _antv_g2_lib_animate_animation_scale_in__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(222);\n/* harmony import */ var _antv_g2_lib_animate_animation_scale_in__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_scale_in__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _antv_g2_lib_animate_animation_sector_path_update__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(314);\n/* harmony import */ var _antv_g2_lib_animate_animation_sector_path_update__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_sector_path_update__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _antv_g2_lib_animate_animation_wave_in__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(315);\n/* harmony import */ var _antv_g2_lib_animate_animation_wave_in__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_wave_in__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _antv_g2_lib_animate_animation_zoom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(223);\n/* harmony import */ var _antv_g2_lib_animate_animation_zoom__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_animate_animation_zoom__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(24);\n/* harmony import */ var _antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__);\n// 注册需要的动画执行函数\n\n\n\n\n\n\n\n\n\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('fade-in', _antv_g2_lib_animate_animation_fade__WEBPACK_IMPORTED_MODULE_0__[\"fadeIn\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('fade-out', _antv_g2_lib_animate_animation_fade__WEBPACK_IMPORTED_MODULE_0__[\"fadeOut\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('grow-in-x', _antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1__[\"growInX\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('grow-in-xy', _antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1__[\"growInXY\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('grow-in-y', _antv_g2_lib_animate_animation_grow_in__WEBPACK_IMPORTED_MODULE_1__[\"growInY\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('scale-in-x', _antv_g2_lib_animate_animation_scale_in__WEBPACK_IMPORTED_MODULE_4__[\"scaleInX\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('scale-in-y', _antv_g2_lib_animate_animation_scale_in__WEBPACK_IMPORTED_MODULE_4__[\"scaleInY\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('wave-in', _antv_g2_lib_animate_animation_wave_in__WEBPACK_IMPORTED_MODULE_6__[\"waveIn\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('zoom-in', _antv_g2_lib_animate_animation_zoom__WEBPACK_IMPORTED_MODULE_7__[\"zoomIn\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('zoom-out', _antv_g2_lib_animate_animation_zoom__WEBPACK_IMPORTED_MODULE_7__[\"zoomOut\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('position-update', _antv_g2_lib_animate_animation_position_update__WEBPACK_IMPORTED_MODULE_3__[\"positionUpdate\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('sector-path-update', _antv_g2_lib_animate_animation_sector_path_update__WEBPACK_IMPORTED_MODULE_5__[\"sectorPathUpdate\"]);\nObject(_antv_g2_lib_core__WEBPACK_IMPORTED_MODULE_8__[\"registerAnimation\"])('path-in', _antv_g2_lib_animate_animation_path_in__WEBPACK_IMPORTED_MODULE_2__[\"pathIn\"]);\n\n/***/ }),\n/* 908 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.doScaleAnimate = exports.transformShape = void 0;\n\nvar matrix_util_1 = __webpack_require__(33);\n/**\n * @ignore\n * 对图形元素进行矩阵变换,同时返回变换前的图形矩阵\n * @param shape 进行矩阵变换的图形\n * @param vector 矩阵变换的中心点\n * @param direct 矩阵变换的类型\n */\n\n\nfunction transformShape(shape, vector, direct) {\n var scaledMatrix;\n var x = vector[0],\n y = vector[1];\n shape.applyToMatrix([x, y, 1]);\n\n if (direct === 'x') {\n shape.setMatrix(matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 0.01, 1], ['t', x, y]]));\n scaledMatrix = matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 100, 1], ['t', x, y]]);\n } else if (direct === 'y') {\n shape.setMatrix(matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 1, 0.01], ['t', x, y]]));\n scaledMatrix = matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 1, 100], ['t', x, y]]);\n } else if (direct === 'xy') {\n shape.setMatrix(matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 0.01, 0.01], ['t', x, y]]));\n scaledMatrix = matrix_util_1.ext.transform(shape.getMatrix(), [['t', -x, -y], ['s', 100, 100], ['t', x, y]]);\n }\n\n return scaledMatrix;\n}\n\nexports.transformShape = transformShape;\n/**\n * 对图形元素进行剪切动画\n * @param element 进行动画的图形元素\n * @param animateCfg 动画配置\n * @param coordinate 当前坐标系\n * @param yMinPoint y 轴的最小值对应的图形坐标点\n * @param type 剪切动画的类型\n */\n\nfunction doScaleAnimate(element, animateCfg, coordinate, yMinPoint, type) {\n var start = coordinate.start,\n end = coordinate.end;\n var width = coordinate.getWidth();\n var height = coordinate.getHeight();\n var x;\n var y;\n\n if (type === 'y') {\n x = start.x + width / 2;\n y = yMinPoint.y < start.y ? yMinPoint.y : start.y;\n } else if (type === 'x') {\n x = yMinPoint.x > start.x ? yMinPoint.x : start.x;\n y = start.y + height / 2;\n } else if (type === 'xy') {\n if (coordinate.isPolar) {\n x = coordinate.getCenter().x;\n y = coordinate.getCenter().y;\n } else {\n x = (start.x + end.x) / 2;\n y = (start.y + end.y) / 2;\n }\n }\n\n var endMatrix = transformShape(element, [x, y], type);\n element.animate({\n matrix: endMatrix\n }, animateCfg);\n}\n\nexports.doScaleAnimate = doScaleAnimate;\n\n/***/ }),\n/* 909 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _util = __webpack_require__(54);\n\n/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\nvar Circle =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Circle, _super);\n\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n r: 0\n });\n };\n\n Circle.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n var halfLineWidth = lineWidth / 2;\n var absDistance = (0, _util.distance)(cx, cy, x, y); // 直接用距离,如果同时存在边和填充时,可以减少两次计算\n\n if (isFill && isStroke) {\n return absDistance <= r + halfLineWidth;\n }\n\n if (isFill) {\n return absDistance <= r;\n }\n\n if (isStroke) {\n return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n }\n\n return false;\n };\n\n Circle.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n context.beginPath();\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n context.closePath();\n };\n\n return Circle;\n}(_base.default);\n\nvar _default = Circle;\nexports.default = _default;\n\n/***/ }),\n/* 910 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\n/**\n * @fileoverview 椭圆\n * @author dxq613@gmail.com\n */\n// 根据椭圆公式计算 x*x/rx*rx + y*y/ry*ry;\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n return squareX / (rx * rx) + squareY / (ry * ry);\n}\n\nvar Ellipse =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Ellipse, _super);\n\n function Ellipse() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n rx: 0,\n ry: 0\n });\n };\n\n Ellipse.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var halfLineWith = lineWidth / 2;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx,\n ry = attrs.ry;\n var squareX = (x - cx) * (x - cx);\n var squareY = (y - cy) * (y - cy); // 使用椭圆的公式: x*x/rx*rx + y*y/ry*ry = 1;\n\n if (isFill && isStroke) {\n return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n\n if (isFill) {\n return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n }\n\n if (isStroke) {\n return ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 && ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n\n return false;\n };\n\n Ellipse.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n context.beginPath(); // 兼容逻辑\n\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n } else {\n // 如果不支持,则使用圆来绘制,进行变形\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.save();\n context.translate(cx, cy);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, 0, Math.PI * 2);\n context.restore();\n context.closePath();\n }\n };\n\n return Ellipse;\n}(_base.default);\n\nvar _default = Ellipse;\nexports.default = _default;\n\n/***/ }),\n/* 911 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _util = __webpack_require__(54);\n\n/**\n * @fileoverview 图片\n * @author dxq613@gmail.com\n */\nfunction isCanvas(dom) {\n return dom instanceof HTMLElement && (0, _util.isString)(dom.nodeName) && dom.nodeName.toUpperCase() === 'CANVAS';\n}\n\nvar ImageShape =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(ImageShape, _super);\n\n function ImageShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n ImageShape.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n };\n\n ImageShape.prototype.initAttrs = function (attrs) {\n this._setImage(attrs.img);\n }; // image 不计算 stroke\n\n\n ImageShape.prototype.isStroke = function () {\n return false;\n }; // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n\n\n ImageShape.prototype.isOnlyHitBox = function () {\n return true;\n };\n\n ImageShape.prototype._afterLoading = function () {\n if (this.get('toDraw') === true) {\n var canvas = this.get('canvas');\n\n if (canvas) {\n // 这段应该改成局部渲染\n canvas.draw();\n } else {\n // 这种方式如果发生遮挡会出现问题\n this.createPath(this.get('context'));\n }\n }\n };\n\n ImageShape.prototype._setImage = function (img) {\n var _this = this;\n\n var attrs = this.attrs;\n\n if ((0, _util.isString)(img)) {\n var image_1 = new Image();\n\n image_1.onload = function () {\n // 图片未加载完,则已经被销毁\n if (_this.destroyed) {\n return false;\n } // 缓存原始地址,可以做对比,防止重复加载图片\n // 如果考虑到在加载过程中可能替换 img 属性,则情况更加复杂\n // this.set('imgSrc', img);\n // 这里会循环调用 _setImage 方法,但不会再走这个分支\n\n\n _this.attr('img', image_1);\n\n _this.set('loading', false);\n\n _this._afterLoading();\n\n var callback = _this.get('callback');\n\n if (callback) {\n callback.call(_this);\n }\n }; // 设置跨域\n\n\n image_1.crossOrigin = 'Anonymous';\n image_1.src = img; // loading 过程中不绘制\n\n this.set('loading', true);\n } else if (img instanceof Image) {\n // 如果是一个 image 对象,则设置宽高\n if (!attrs.width) {\n attrs.width = img.width;\n }\n\n if (!attrs.height) {\n attrs.height = img.height;\n }\n } else if (isCanvas(img)) {\n // 如果设置了 canvas 对象\n if (!attrs.width) {\n attrs.width = Number(img.getAttribute('width'));\n }\n\n if (!attrs.height) {\n attrs.height, Number(img.getAttribute('height'));\n }\n }\n };\n\n ImageShape.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue); // 如果加载的已经是当前图片,则不再处理\n\n\n if (name === 'img') {\n // 可以加缓冲,&& this.get('imgSrc') !== value\n this._setImage(value);\n }\n };\n\n ImageShape.prototype.createPath = function (context) {\n // 正在加载则不绘制\n if (this.get('loading')) {\n this.set('toDraw', true); // 加载完成后绘制\n\n this.set('context', context);\n return;\n }\n\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y,\n width = attrs.width,\n height = attrs.height,\n sx = attrs.sx,\n sy = attrs.sy,\n swidth = attrs.swidth,\n sheight = attrs.sheight;\n var img = attrs.img;\n\n if (img instanceof Image || isCanvas(img)) {\n if (!(0, _util.isNil)(sx) && !(0, _util.isNil)(sy) && !(0, _util.isNil)(swidth) && !(0, _util.isNil)(sheight)) {\n context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n } else {\n context.drawImage(img, x, y, width, height);\n }\n }\n };\n\n return ImageShape;\n}(_base.default);\n\nvar _default = ImageShape;\nexports.default = _default;\n\n/***/ }),\n/* 912 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gMath = __webpack_require__(35);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _line = _interopRequireDefault(__webpack_require__(191));\n\nvar ArrowUtil = _interopRequireWildcard(__webpack_require__(190));\n\n/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\nvar Line =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Line, _super);\n\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n startArrow: false,\n endArrow: false\n });\n };\n\n Line.prototype.initAttrs = function (attrs) {\n this.setArrow();\n }; // 更新属性时,检测是否更改了箭头\n\n\n Line.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue); // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n\n\n this.setArrow();\n };\n\n Line.prototype.setArrow = function () {\n var attrs = this.attr();\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2,\n startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, x2, y2, x1, y1);\n }\n\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, x1, y1, x2, y2);\n }\n };\n\n Line.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n if (!isStroke || !lineWidth) {\n return false;\n }\n\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return (0, _line.default)(x1, y1, x2, y2, lineWidth, x, y);\n };\n\n Line.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2,\n startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n var startArrowDistance = {\n dx: 0,\n dy: 0\n };\n var endArrowDistance = {\n dx: 0,\n dy: 0\n };\n\n if (startArrow && startArrow.d) {\n startArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.startArrow.d);\n }\n\n if (endArrow && endArrow.d) {\n endArrowDistance = ArrowUtil.getShortenOffset(x1, y1, x2, y2, attrs.endArrow.d);\n }\n\n context.beginPath(); // 如果自定义箭头,线条相应缩进\n\n context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy);\n context.lineTo(x2 - endArrowDistance.dx, y2 - endArrowDistance.dy);\n };\n\n Line.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of line\n * @return {number} length\n */\n\n\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return _gMath.Line.length(x1, y1, x2, y2);\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return _gMath.Line.pointAt(x1, y1, x2, y2, ratio);\n };\n\n return Line;\n}(_base.default);\n\nvar _default = Line;\nexports.default = _default;\n\n/***/ }),\n/* 913 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _pathUtil = __webpack_require__(95);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _util2 = __webpack_require__(54);\n\nvar _draw = __webpack_require__(149);\n\n/**\n * @fileoverview Marker\n * @author dxq613@gmail.com\n */\nvar Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return [['M', x - r, y], ['A', r, r, 0, 1, 0, x + r, y], ['A', r, r, 0, 1, 0, x - r, y]];\n },\n // 正方形\n square: function square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function triangle(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n },\n // 倒三角形\n 'triangle-down': function triangleDown(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n }\n};\n\nvar Marker =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Marker, _super);\n\n function Marker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Marker.prototype.initAttrs = function (attrs) {\n this._resetParamsCache();\n }; // 重置绘制 path 存储的缓存\n\n\n Marker.prototype._resetParamsCache = function () {\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('paramsCache', {}); // 清理缓存\n }; // 更新属性时,检测是否更改了 path\n\n\n Marker.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (['symbol', 'x', 'y', 'r', 'radius'].indexOf(name) !== -1) {\n // path 相关属性更改时,清理缓存\n this._resetParamsCache();\n }\n }; // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n\n\n Marker.prototype.isOnlyHitBox = function () {\n return true;\n };\n\n Marker.prototype._getR = function (attrs) {\n // 兼容 r 和 radius 两种写法,推荐使用 r\n return (0, _util.isNil)(attrs.r) ? attrs.radius : attrs.r;\n };\n\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y;\n var symbol = attrs.symbol || 'circle';\n\n var r = this._getR(attrs);\n\n var method;\n var path;\n\n if ((0, _util2.isFunction)(symbol)) {\n method = symbol;\n path = method(x, y, r); // 将 path 转成绝对路径\n\n path = (0, _pathUtil.path2Absolute)(path);\n } else {\n // 内置 symbol 的 path 都是绝对路径,直接绘制即可,不需要对 path 进行特殊处理\n method = Marker.Symbols[symbol];\n\n if (!method) {\n console.warn(symbol + \" marker is not supported.\");\n return null;\n }\n\n path = method(x, y, r);\n }\n\n return path;\n };\n\n Marker.prototype.createPath = function (context) {\n var path = this._getPath();\n\n var paramsCache = this.get('paramsCache');\n (0, _draw.drawPath)(this, context, {\n path: path\n }, paramsCache);\n };\n\n Marker.Symbols = Symbols;\n return Marker;\n}(_base.default);\n\nvar _default = Marker;\nexports.default = _default;\n\n/***/ }),\n/* 914 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gMath = __webpack_require__(35);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _pathUtil = __webpack_require__(95);\n\nvar _draw = __webpack_require__(149);\n\nvar _pointInPath = _interopRequireDefault(__webpack_require__(443));\n\nvar _polygon = _interopRequireDefault(__webpack_require__(444));\n\nvar _path = _interopRequireDefault(__webpack_require__(915));\n\nvar ArrowUtil = _interopRequireWildcard(__webpack_require__(190));\n\n// 是否在多个多边形内部\nfunction isInPolygons(polygons, x, y) {\n var isHit = false;\n\n for (var i = 0; i < polygons.length; i++) {\n var points = polygons[i];\n isHit = (0, _polygon.default)(points, x, y);\n\n if (isHit) {\n break;\n }\n }\n\n return isHit;\n}\n\nvar Path =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Path, _super);\n\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n Path.prototype.initAttrs = function (attrs) {\n this._setPathArr(attrs.path);\n\n this.setArrow();\n }; // 更新属性时,检测是否更改了 path\n\n\n Path.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (name === 'path') {\n this._setPathArr(value);\n } // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n\n\n this.setArrow();\n }; // 将 path 转换成绝对路径\n\n\n Path.prototype._setPathArr = function (path) {\n // 转换 path 的格式\n this.attrs.path = (0, _pathUtil.path2Absolute)(path);\n\n var hasArc = _path.default.hasArc(path); // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n\n\n this.set('hasArc', hasArc);\n this.set('paramsCache', {}); // 清理缓存\n\n this.set('segments', null); // 延迟生成 path,在动画场景下可能不会有拾取\n\n this.set('curve', null);\n this.set('tCache', null);\n this.set('totalLength', null);\n };\n\n Path.prototype.getSegments = function () {\n var segments = this.get('segements');\n\n if (!segments) {\n segments = (0, _pathUtil.path2Segments)(this.attr('path'));\n this.set('segments', segments);\n }\n\n return segments;\n };\n\n Path.prototype.setArrow = function () {\n var attrs = this.attr();\n var startArrow = attrs.startArrow,\n endArrow = attrs.endArrow;\n\n if (startArrow) {\n var tangent = this.getStartTangent();\n ArrowUtil.addStartArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n\n if (endArrow) {\n var tangent = this.getEndTangent();\n ArrowUtil.addEndArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n };\n\n Path.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var segments = this.getSegments();\n var hasArc = this.get('hasArc');\n var isHit = false;\n\n if (isStroke) {\n var length_1 = this.getTotalLength();\n isHit = _path.default.isPointInStroke(segments, lineWidth, x, y, length_1);\n }\n\n if (!isHit && isFill) {\n if (hasArc) {\n // 存在曲线时,暂时使用 canvas 的 api 计算,后续可以进行多边形切割\n isHit = (0, _pointInPath.default)(this, x, y);\n } else {\n var path = this.attr('path');\n\n var extractResutl = _path.default.extractPolygons(path); // 提取出来的多边形包含闭合的和非闭合的,在这里统一按照多边形处理\n\n\n isHit = isInPolygons(extractResutl.polygons, x, y) || isInPolygons(extractResutl.polylines, x, y);\n }\n }\n\n return isHit;\n };\n\n Path.prototype.createPath = function (context) {\n var attrs = this.attr();\n var paramsCache = this.get('paramsCache'); // 由于计算圆弧的参数成本很大,所以要缓存\n\n (0, _draw.drawPath)(this, context, attrs, paramsCache);\n };\n\n Path.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get total length of path\n * @return {number} length\n */\n\n\n Path.prototype.getTotalLength = function () {\n var totalLength = this.get('totalLength');\n\n if (!(0, _util.isNil)(totalLength)) {\n return totalLength;\n }\n\n this._calculateCurve();\n\n this._setTcache();\n\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Path.prototype.getPoint = function (ratio) {\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._calculateCurve();\n\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n var curve = this.get('curve');\n\n if (!tCache || tCache.length === 0) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2]\n };\n }\n\n return null;\n }\n\n (0, _util.each)(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var seg = curve[index];\n\n if ((0, _util.isNil)(seg) || (0, _util.isNil)(index)) {\n return null;\n }\n\n var l = seg.length;\n var nextSeg = curve[index + 1];\n return _gMath.Cubic.pointAt(seg[l - 2], seg[l - 1], nextSeg[1], nextSeg[2], nextSeg[3], nextSeg[4], nextSeg[5], nextSeg[6], subt);\n };\n\n Path.prototype._calculateCurve = function () {\n var path = this.attr().path;\n this.set('curve', _path.default.pathToCurve(path));\n };\n\n Path.prototype._setTcache = function () {\n var totalLength = 0;\n var tempLength = 0; // 每段 curve 对应起止点的长度比例列表,形如: [[0, 0.25], [0.25, 0.6]. [0.6, 0.9], [0.9, 1]]\n\n var tCache = [];\n var segmentT;\n var segmentL;\n var segmentN;\n var l;\n var curve = this.get('curve');\n\n if (!curve) {\n return;\n }\n\n (0, _util.each)(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n\n if (segmentN) {\n totalLength += _gMath.Cubic.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]) || 0;\n }\n });\n this.set('totalLength', totalLength);\n\n if (totalLength === 0) {\n this.set('tCache', []);\n return;\n }\n\n (0, _util.each)(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n\n if (segmentN) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _gMath.Cubic.length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]); // 当 path 不连续时,segmentL 可能为空,为空时需要作为 0 处理\n\n tempLength += segmentL || 0;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n Path.prototype.getStartTangent = function () {\n var segments = this.getSegments();\n var result;\n\n if (segments.length > 1) {\n var startPoint = segments[0].currentPoint;\n var endPoint = segments[1].currentPoint;\n var tangent = segments[1].startTangent;\n result = [];\n\n if (tangent) {\n result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n result.push([startPoint[0], startPoint[1]]);\n } else {\n result.push([endPoint[0], endPoint[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n }\n\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n Path.prototype.getEndTangent = function () {\n var segments = this.getSegments();\n var length = segments.length;\n var result;\n\n if (length > 1) {\n var startPoint = segments[length - 2].currentPoint;\n var endPoint = segments[length - 1].currentPoint;\n var tangent = segments[length - 1].endTangent;\n result = [];\n\n if (tangent) {\n result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n result.push([endPoint[0], endPoint[1]]);\n } else {\n result.push([startPoint[0], startPoint[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n }\n\n return result;\n };\n\n return Path;\n}(_base.default);\n\nvar _default = Path;\nexports.default = _default;\n\n/***/ }),\n/* 915 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gBase = __webpack_require__(27);\n\nvar _gMath = __webpack_require__(35);\n\nvar _matrixUtil = __webpack_require__(33);\n\nvar vec3 = _interopRequireWildcard(__webpack_require__(176));\n\nvar _util = __webpack_require__(54);\n\nvar _line = _interopRequireDefault(__webpack_require__(191));\n\nvar _arc = _interopRequireDefault(__webpack_require__(445));\n\n/**\n * @fileoverview path 的一些工具\n * @author dxq613@gmail.com\n */\nvar transform = _matrixUtil.ext.transform;\n\nfunction hasArc(path) {\n var hasArc = false;\n var count = path.length;\n\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n\n if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n hasArc = true;\n break;\n }\n }\n\n return hasArc;\n}\n\nfunction isPointInStroke(segments, lineWidth, x, y, length) {\n var isHit = false;\n var halfWidth = lineWidth / 2;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint,\n params = segment.params,\n prePoint = segment.prePoint,\n box = segment.box; // 如果在前面已经生成过包围盒,直接按照包围盒计算\n\n if (box && !(0, _util.inBox)(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, x, y)) {\n continue;\n }\n\n switch (segment.command) {\n // L 和 Z 都是直线, M 不进行拾取\n case 'L':\n case 'Z':\n isHit = (0, _line.default)(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x, y);\n break;\n\n case 'Q':\n var qDistance = _gMath.Quad.pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], x, y);\n\n isHit = qDistance <= lineWidth / 2;\n break;\n\n case 'C':\n var cDistance = _gMath.Cubic.pointDistance(prePoint[0], // 上一段结束位置, 即 C 的起始点\n prePoint[1], params[1], // 'C' 的参数,1、2 为第一个控制点,3、4 为第二个控制点,5、6 为结束点\n params[2], params[3], params[4], params[5], params[6], x, y, length);\n\n isHit = cDistance <= lineWidth / 2;\n break;\n\n case 'A':\n // 计算点到椭圆圆弧的距离,暂时使用近似算法,后面可以改成切割法求最近距离\n var arcParams = segment.arcParams;\n var cx = arcParams.cx,\n cy = arcParams.cy,\n rx = arcParams.rx,\n ry = arcParams.ry,\n startAngle = arcParams.startAngle,\n endAngle = arcParams.endAngle,\n xRotation = arcParams.xRotation;\n var p = [x, y, 1];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var m = transform(null, [['t', -cx, -cy], ['r', -xRotation], ['s', 1 / scaleX, 1 / scaleY]]);\n vec3.transformMat3(p, p, m);\n isHit = (0, _arc.default)(0, 0, r, startAngle, endAngle, lineWidth, p[0], p[1]);\n break;\n\n default:\n break;\n }\n\n if (isHit) {\n break;\n }\n }\n\n return isHit;\n}\n/**\n * 提取出内部的闭合多边形和非闭合的多边形,假设 path 不存在圆弧\n * @param {Array} path 路径\n * @returns {Array} 点的集合\n */\n\n\nfunction extractPolygons(path) {\n var count = path.length;\n var polygons = [];\n var polylines = [];\n var points = []; // 防止第一个命令不是 'M'\n\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n\n if (cmd === 'M') {\n // 遇到 'M' 判定是否是新数组,新数组中没有点\n if (points.length) {\n // 如果存在点,则说明没有遇到 'Z',开始了一个新的多边形\n polylines.push(points);\n points = []; // 创建新的点\n }\n\n points.push([params[1], params[2]]);\n } else if (cmd === 'Z') {\n if (points.length) {\n // 存在点\n polygons.push(points);\n points = []; // 开始新的点集合\n } // 如果不存在点,同时 'Z',则说明是错误,不处理\n\n } else {\n points.push([params[1], params[2]]);\n }\n } // 说明 points 未放入 polygons 或者 polyline\n // 仅当只有一个 M,没有 Z 时会发生这种情况\n\n\n if (points.length > 0) {\n polylines.push(points);\n }\n\n return {\n polygons: polygons,\n polylines: polylines\n };\n}\n\nvar _default = (0, _tslib.__assign)({\n hasArc: hasArc,\n extractPolygons: extractPolygons,\n isPointInStroke: isPointInStroke\n}, _gBase.PathUtil);\n\nexports.default = _default;\n\n/***/ }),\n/* 916 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _polyline = _interopRequireDefault(__webpack_require__(446));\n\nvar _polygon = _interopRequireDefault(__webpack_require__(444));\n\n/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\nvar Polygon =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Polygon, _super);\n\n function Polygon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Polygon.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var points = this.attr().points;\n var isHit = false;\n\n if (isStroke) {\n isHit = (0, _polyline.default)(points, lineWidth, x, y, true);\n }\n\n if (!isHit && isFill) {\n isHit = (0, _polygon.default)(points, x, y); // isPointInPath(shape, x, y);\n }\n\n return isHit;\n };\n\n Polygon.prototype.createPath = function (context) {\n var attrs = this.attr();\n var points = attrs.points;\n\n if (points.length < 2) {\n return;\n }\n\n context.beginPath();\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n\n if (i === 0) {\n context.moveTo(point[0], point[1]);\n } else {\n context.lineTo(point[0], point[1]);\n }\n }\n\n context.closePath();\n };\n\n return Polygon;\n}(_base.default);\n\nvar _default = Polygon;\nexports.default = _default;\n\n/***/ }),\n/* 917 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gMath = __webpack_require__(35);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _polyline = _interopRequireDefault(__webpack_require__(446));\n\nvar ArrowUtil = _interopRequireWildcard(__webpack_require__(190));\n\nvar PolyLine =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(PolyLine, _super);\n\n function PolyLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n PolyLine.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n PolyLine.prototype.initAttrs = function (attrs) {\n this.setArrow();\n }; // 更新属性时,检测是否更改了 points\n\n\n PolyLine.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n this.setArrow();\n\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n\n PolyLine.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n\n PolyLine.prototype.setArrow = function () {\n var attrs = this.attr();\n var _a = this.attrs,\n points = _a.points,\n startArrow = _a.startArrow,\n endArrow = _a.endArrow;\n var length = points.length;\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n\n if (startArrow) {\n ArrowUtil.addStartArrow(this, attrs, points[1][0], points[1][1], x1, y1);\n }\n\n if (endArrow) {\n ArrowUtil.addEndArrow(this, attrs, points[length - 2][0], points[length - 2][1], x2, y2);\n }\n }; // 不允许 fill\n\n\n PolyLine.prototype.isFill = function () {\n return false;\n };\n\n PolyLine.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n // 没有设置 stroke 不能被拾取, 没有线宽不能被拾取\n if (!isStroke || !lineWidth) {\n return false;\n }\n\n var points = this.attr().points;\n return (0, _polyline.default)(points, lineWidth, x, y, false);\n }; // 始终填充\n\n\n PolyLine.prototype.isStroke = function () {\n return true;\n };\n\n PolyLine.prototype.createPath = function (context) {\n var _a = this.attr(),\n points = _a.points,\n startArrow = _a.startArrow,\n endArrow = _a.endArrow;\n\n var length = points.length;\n\n if (points.length < 2) {\n return;\n }\n\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1]; // 如果定义了箭头,并且是自定义箭头,线条相应缩进\n\n if (startArrow && startArrow.d) {\n var distance = ArrowUtil.getShortenOffset(x1, y1, points[1][0], points[1][1], startArrow.d);\n x1 += distance.dx;\n y1 += distance.dy;\n }\n\n if (endArrow && endArrow.d) {\n var distance = ArrowUtil.getShortenOffset(points[length - 2][0], points[length - 2][1], x2, y2, endArrow.d);\n x2 -= distance.dx;\n y2 -= distance.dy;\n }\n\n context.beginPath();\n context.moveTo(x1, y1);\n\n for (var i = 0; i < length - 1; i++) {\n var point = points[i];\n context.lineTo(point[0], point[1]);\n }\n\n context.lineTo(x2, y2);\n };\n\n PolyLine.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n\n\n PolyLine.prototype.getTotalLength = function () {\n var points = this.attr().points; // get totalLength from cache\n\n var totalLength = this.get('totalLength');\n\n if (!(0, _util.isNil)(totalLength)) {\n return totalLength;\n }\n\n this.set('totalLength', _gMath.Polyline.length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n PolyLine.prototype.getPoint = function (ratio) {\n var points = this.attr().points; // get tCache from cache\n\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n (0, _util.each)(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return _gMath.Line.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n\n PolyLine.prototype._setTcache = function () {\n var points = this.attr().points;\n\n if (!points || points.length === 0) {\n return;\n }\n\n var totalLength = this.getTotalLength();\n\n if (totalLength <= 0) {\n return;\n }\n\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n (0, _util.each)(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _gMath.Line.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n PolyLine.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n PolyLine.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n\n return PolyLine;\n}(_base.default);\n\nvar _default = PolyLine;\nexports.default = _default;\n\n/***/ }),\n/* 918 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _parse = __webpack_require__(441);\n\nvar _util = __webpack_require__(54);\n\nvar _rect = _interopRequireDefault(__webpack_require__(919));\n\nvar _rectRadius = _interopRequireDefault(__webpack_require__(920));\n\nvar _pointInPath = _interopRequireDefault(__webpack_require__(443));\n\n/**\n * @fileoverview 矩形\n * @author dxq613@gmail.com\n */\nvar Rect =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Rect, _super);\n\n function Rect() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0\n });\n };\n\n Rect.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var minX = attrs.x;\n var minY = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius; // 无圆角时的策略\n\n if (!radius) {\n var halfWidth = lineWidth / 2; // 同时填充和带有边框\n\n if (isFill && isStroke) {\n return (0, _util.inBox)(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);\n } // 仅填充\n\n\n if (isFill) {\n return (0, _util.inBox)(minX, minY, width, height, x, y);\n }\n\n if (isStroke) {\n return (0, _rect.default)(minX, minY, width, height, lineWidth, x, y);\n }\n } else {\n var isHit = false;\n\n if (isStroke) {\n isHit = (0, _rectRadius.default)(minX, minY, width, height, radius, lineWidth, x, y);\n } // 仅填充时带有圆角的矩形直接通过图形拾取\n // 以后可以改成纯数学的近似拾取,将圆弧切割成多边形\n\n\n if (!isHit && isFill) {\n isHit = (0, _pointInPath.default)(this, x, y);\n }\n\n return isHit;\n }\n };\n\n Rect.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n context.beginPath();\n\n if (radius === 0) {\n // 改成原生的rect方法\n context.rect(x, y, width, height);\n } else {\n var _a = (0, _parse.parseRadius)(radius),\n r1 = _a[0],\n r2 = _a[1],\n r3 = _a[2],\n r4 = _a[3];\n\n context.moveTo(x + r1, y);\n context.lineTo(x + width - r2, y);\n r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n context.lineTo(x + width, y + height - r3);\n r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n context.lineTo(x + r4, y + height);\n r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n context.lineTo(x, y + r1);\n r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n context.closePath();\n }\n };\n\n return Rect;\n}(_base.default);\n\nvar _default = Rect;\nexports.default = _default;\n\n/***/ }),\n/* 919 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inRect;\n\nvar _util = __webpack_require__(54);\n\nfunction inRect(minX, minY, width, height, lineWidth, x, y) {\n var halfWidth = lineWidth / 2; // 将四个边看做矩形来检测,比边的检测算法要快\n\n return (0, _util.inBox)(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) || // 上边\n (0, _util.inBox)(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) || // 右边\n (0, _util.inBox)(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) || // 下边\n (0, _util.inBox)(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y); // 左边\n}\n\n/***/ }),\n/* 920 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rectWithRadius;\n\nvar _line = _interopRequireDefault(__webpack_require__(191));\n\nvar _arc = _interopRequireDefault(__webpack_require__(445));\n\nfunction rectWithRadius(minX, minY, width, height, radius, lineWidth, x, y) {\n var halfWidth = lineWidth / 2;\n return (0, _line.default)(minX + radius, minY, minX + width - radius, minY, lineWidth, x, y) || (0, _line.default)(minX + width, minY + radius, minX + width, minY + height - radius, lineWidth, x, y) || (0, _line.default)(minX + width - radius, minY + height, minX + radius, minY + height, lineWidth, x, y) || (0, _line.default)(minX, minY + height - radius, minX, minY + radius, lineWidth, x, y) || (0, _arc.default)(minX + width - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) || (0, _arc.default)(minX + width - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x, y) || (0, _arc.default)(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x, y) || (0, _arc.default)(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x, y);\n}\n\n/***/ }),\n/* 921 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _base = _interopRequireDefault(__webpack_require__(72));\n\nvar _util = __webpack_require__(54);\n\nvar _gBase = __webpack_require__(27);\n\n/**\n * @fileoverview 文本\n * @author dxq613@gmail.com\n */\nvar Text =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Text, _super);\n\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n } // 默认文本属性\n\n\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n });\n }; // 仅仅使用包围盒检测来进行拾取\n\n\n Text.prototype.isOnlyHitBox = function () {\n return true;\n }; // 初始化时组合 font,同时判断 text 是否换行\n\n\n Text.prototype.initAttrs = function (attrs) {\n this._assembleFont();\n\n if (attrs.text) {\n this._setText(attrs.text);\n }\n }; // 组装字体\n\n\n Text.prototype._assembleFont = function () {\n var attrs = this.attrs;\n attrs.font = (0, _gBase.assembleFont)(attrs);\n }; // 如果文本换行,则缓存数组\n\n\n Text.prototype._setText = function (text) {\n var textArr = null;\n\n if ((0, _util.isString)(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n }\n\n this.set('textArr', textArr);\n }; // 更新属性时,检测是否更改了 font、text\n\n\n Text.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (name.startsWith('font')) {\n this._assembleFont();\n }\n\n if (name === 'text') {\n this._setText(value);\n }\n }; // 这个方法在 text 时没有可以做的事情,如果要支持文字背景时可以考虑\n // createPath(context) {\n // }\n // 如果文本多行,需要获取文本间距\n\n\n Text.prototype._getSpaceingY = function () {\n var attrs = this.attrs;\n var lineHeight = attrs.lineHeight;\n var fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n }; // 绘制文本,考虑多行的场景\n\n\n Text.prototype._drawTextArr = function (context, textArr, isFill) {\n var attrs = this.attrs;\n var textBaseline = attrs.textBaseline;\n var x = attrs.x;\n var y = attrs.y;\n var fontSize = attrs.fontSize * 1;\n\n var spaceingY = this._getSpaceingY();\n\n var height = (0, _gBase.getTextHeight)(attrs.text, attrs.fontSize, attrs.lineHeight);\n var subY;\n (0, _util.each)(textArr, function (subText, index) {\n subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n\n if (textBaseline === 'middle') subY += height - fontSize - (height - fontSize) / 2;\n if (textBaseline === 'top') subY += height - fontSize;\n\n if (isFill) {\n context.fillText(subText, x, subY);\n } else {\n context.strokeText(subText, x, subY);\n }\n });\n }; // 绘制文本,同时考虑填充和绘制边框\n\n\n Text.prototype._drawText = function (context, isFill) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var textArr = this.get('textArr');\n\n if (textArr) {\n this._drawTextArr(context, textArr, isFill);\n } else {\n var text = attrs.text;\n\n if (isFill) {\n context.fillText(text, x, y);\n } else {\n context.strokeText(text, x, y);\n }\n }\n }; // 复写绘制和填充的逻辑:对于文本,应该先绘制边框,再进行填充\n\n\n Text.prototype.strokeAndFill = function (context) {\n var _a = this.attrs,\n lineWidth = _a.lineWidth,\n opacity = _a.opacity,\n strokeOpacity = _a.strokeOpacity,\n fillOpacity = _a.fillOpacity;\n\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!(0, _util.isNil)(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = opacity;\n }\n\n this.stroke(context);\n }\n }\n\n if (this.isFill()) {\n if (!(0, _util.isNil)(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n } else {\n this.fill(context);\n }\n }\n\n this.afterDrawPath(context);\n }; // 复写填充逻辑\n\n\n Text.prototype.fill = function (context) {\n this._drawText(context, true);\n }; // 复写绘制边框的逻辑\n\n\n Text.prototype.stroke = function (context) {\n this._drawText(context, false);\n };\n\n return Text;\n}(_base.default);\n\nvar _default = Text;\nexports.default = _default;\n\n/***/ }),\n/* 922 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gBase = __webpack_require__(27);\n\nvar _hit = __webpack_require__(923);\n\nvar Shape = _interopRequireWildcard(__webpack_require__(148));\n\nvar _group = _interopRequireDefault(__webpack_require__(274));\n\nvar _util = __webpack_require__(54);\n\nvar _draw = __webpack_require__(149);\n\nvar Canvas =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Canvas, _super);\n\n function Canvas() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this); // 设置渲染引擎为 canvas,只读属性\n\n\n cfg['renderer'] = 'canvas'; // 是否自动绘制,不需要用户调用 draw 方法\n\n cfg['autoDraw'] = true; // 是否允许局部刷新图表\n\n cfg['localRefresh'] = true;\n cfg['refreshElements'] = []; // 是否在视图内自动裁剪\n\n cfg['clipView'] = true; // 是否使用快速拾取的方案,默认为 false,上层可以打开\n\n cfg['quickHit'] = false;\n return cfg;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n\n\n Canvas.prototype.onCanvasChange = function (changeType) {\n /**\n * 触发画布更新的三种 changeType\n * 1. attr: 修改画布的绘图属性\n * 2. sort: 画布排序,图形的层次会发生变化\n * 3. changeSize: 改变画布大小\n */\n if (changeType === 'attr' || changeType === 'sort' || changeType === 'changeSize') {\n this.set('refreshElements', [this]);\n this.draw();\n }\n };\n\n Canvas.prototype.getShapeBase = function () {\n return Shape;\n };\n\n Canvas.prototype.getGroupBase = function () {\n return _group.default;\n };\n /**\n * 获取屏幕像素比\n */\n\n\n Canvas.prototype.getPixelRatio = function () {\n var pixelRatio = this.get('pixelRatio') || (0, _util.getPixelRatio)(); // 不足 1 的取 1,超出 1 的取整\n\n return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n };\n\n Canvas.prototype.getViewRange = function () {\n return {\n minX: 0,\n minY: 0,\n maxX: this.cfg.width,\n maxY: this.cfg.height\n };\n }; // 复写基类的方法生成标签\n\n\n Canvas.prototype.createDom = function () {\n var element = document.createElement('canvas');\n var context = element.getContext('2d'); // 缓存 context 对象\n\n this.set('context', context);\n return element;\n };\n\n Canvas.prototype.setDOMSize = function (width, height) {\n _super.prototype.setDOMSize.call(this, width, height);\n\n var context = this.get('context');\n var el = this.get('el');\n var pixelRatio = this.getPixelRatio();\n el.width = pixelRatio * width;\n el.height = pixelRatio * height; // 设置 canvas 元素的宽度和高度,会重置缩放,因此 context.scale 需要在每次设置宽、高后调用\n\n if (pixelRatio > 1) {\n context.scale(pixelRatio, pixelRatio);\n }\n }; // 复写基类方法\n\n\n Canvas.prototype.clear = function () {\n _super.prototype.clear.call(this);\n\n this._clearFrame(); // 需要清理掉延迟绘制的帧\n\n\n var context = this.get('context');\n var element = this.get('el');\n context.clearRect(0, 0, element.width, element.height);\n };\n\n Canvas.prototype.getShape = function (x, y) {\n var shape;\n\n if (this.get('quickHit')) {\n shape = (0, _hit.getShape)(this, x, y);\n } else {\n shape = _super.prototype.getShape.call(this, x, y, null);\n }\n\n return shape;\n }; // 对绘制区域边缘取整,避免浮点数问题\n\n\n Canvas.prototype._getRefreshRegion = function () {\n var elements = this.get('refreshElements');\n var viewRegion = this.getViewRange();\n var region; // 如果是当前画布整体发生了变化,则直接重绘整个画布\n\n if (elements.length && elements[0] === this) {\n region = viewRegion;\n } else {\n region = (0, _draw.getMergedRegion)(elements);\n\n if (region) {\n region.minX = Math.floor(region.minX);\n region.minY = Math.floor(region.minY);\n region.maxX = Math.ceil(region.maxX);\n region.maxY = Math.ceil(region.maxY);\n region.maxY += 1; // 在很多环境下字体的高低会不一致,附加一像素,避免残影\n\n var clipView = this.get('clipView'); // 自动裁剪不在 view 内的区域\n\n if (clipView) {\n region = (0, _draw.mergeView)(region, viewRegion);\n }\n }\n }\n\n return region;\n };\n /**\n * 刷新图形元素,这里仅仅是放入队列,下次绘制时进行绘制\n * @param {IElement} element 图形元素\n */\n\n\n Canvas.prototype.refreshElement = function (element) {\n var refreshElements = this.get('refreshElements');\n refreshElements.push(element); // if (this.get('autoDraw')) {\n // this._startDraw();\n // }\n }; // 清理还在进行的绘制\n\n\n Canvas.prototype._clearFrame = function () {\n var drawFrame = this.get('drawFrame');\n\n if (drawFrame) {\n // 如果全部渲染时,存在局部渲染,则抛弃掉局部渲染\n (0, _util.clearAnimationFrame)(drawFrame);\n this.set('drawFrame', null);\n this.set('refreshElements', []);\n }\n }; // 手工调用绘制接口\n\n\n Canvas.prototype.draw = function () {\n var drawFrame = this.get('drawFrame');\n\n if (this.get('autoDraw') && drawFrame) {\n return;\n }\n\n this._startDraw();\n }; // 绘制所有图形\n\n\n Canvas.prototype._drawAll = function () {\n var context = this.get('context');\n var element = this.get('el');\n var children = this.getChildren();\n context.clearRect(0, 0, element.width, element.height);\n (0, _draw.applyAttrsToContext)(context, this);\n (0, _draw.drawChildren)(context, children); // 对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也会记录更新的元素队列,因此全局渲染完后也需要置空\n\n this.set('refreshElements', []);\n }; // 绘制局部\n\n\n Canvas.prototype._drawRegion = function () {\n var context = this.get('context');\n var refreshElements = this.get('refreshElements');\n var children = this.getChildren();\n\n var region = this._getRefreshRegion(); // 需要注意可能没有 region 的场景\n // 一般发生在设置了 localRefresh ,在没有图形发生变化的情况下,用户调用了 draw\n\n\n if (region) {\n // 清理指定区域\n context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY); // 保存上下文,设置 clip\n\n context.save();\n context.beginPath();\n context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n context.clip();\n (0, _draw.applyAttrsToContext)(context, this); // 确认更新的元素,这个优化可以提升 10 倍左右的性能,10W 个带有 group 的节点,局部渲染会从 90ms 下降到 5-6 ms\n\n (0, _draw.checkRefresh)(this, children, region); // 绘制子元素\n\n (0, _draw.drawChildren)(context, children, region);\n context.restore();\n } else if (refreshElements.length) {\n // 防止发生改变的 elements 没有 region 的场景,这会发生在多个情况下\n // 1. 空的 group\n // 2. 所有 elements 没有在绘图区域\n // 3. group 下面的 elements 隐藏掉\n // 如果不进行清理 hasChanged 的状态会不正确\n (0, _draw.clearChanged)(refreshElements);\n }\n\n (0, _util.each)(refreshElements, function (element) {\n if (element.get('hasChanged')) {\n // 在视窗外的 Group 元素会加入到更新队列里,但实际却没有执行 draw() 逻辑,也就没有清除 hasChanged 标记\n // 即已经重绘完、但 hasChanged 标记没有清除的元素,需要统一清除掉。主要是 Group 存在问题,具体原因待排查\n element.set('hasChanged', false);\n }\n });\n this.set('refreshElements', []);\n }; // 触发绘制\n\n\n Canvas.prototype._startDraw = function () {\n var _this = this;\n\n var drawFrame = this.get('drawFrame');\n\n if (!drawFrame) {\n drawFrame = (0, _util.requestAnimationFrame)(function () {\n if (_this.get('localRefresh')) {\n _this._drawRegion();\n } else {\n _this._drawAll();\n }\n\n _this.set('drawFrame', null);\n });\n this.set('drawFrame', drawFrame);\n }\n };\n\n Canvas.prototype.skipDraw = function () {};\n\n return Canvas;\n}(_gBase.AbstractCanvas);\n\nvar _default = Canvas;\nexports.default = _default;\n\n/***/ }),\n/* 923 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getShape = getShape;\n\nvar _gBase = __webpack_require__(27);\n\nfunction invertFromMatrix(v, matrix) {\n if (matrix) {\n var invertMatrix = (0, _gBase.invert)(matrix);\n return (0, _gBase.multiplyVec2)(invertMatrix, v);\n }\n\n return v;\n}\n\nfunction getRefXY(element, x, y) {\n // @ts-ignore\n var totalMatrix = element.getTotalMatrix();\n\n if (totalMatrix) {\n var _a = invertFromMatrix([x, y, 1], totalMatrix),\n refX = _a[0],\n refY = _a[1];\n\n return [refX, refY];\n }\n\n return [x, y];\n} // 拾取前的检测,只有通过检测才能继续拾取\n\n\nfunction preTest(element, x, y) {\n // @ts-ignore\n if (element.isCanvas && element.isCanvas()) {\n return true;\n } // 不允许被拾取,则返回 null\n // @ts-ignore\n\n\n if (!(0, _gBase.isAllowCapture)(element) || element.cfg.isInView === false) {\n return false;\n }\n\n if (element.cfg.clipShape) {\n // 如果存在 clip\n var _a = getRefXY(element, x, y),\n refX = _a[0],\n refY = _a[1];\n\n if (element.isClipped(refX, refY)) {\n return false;\n }\n } // @ts-ignore ,这个地方调用过于频繁\n\n\n var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox(); // 如果没有缓存 bbox,则说明不可见\n // 注释掉的这段可能会加速拾取,上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;\n // 这时候的拾取假设图形/分组在上一次绘制都在视窗内,但是上面已经判定了 isInView 所以意义不大\n // 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试\n // if (!bbox) {\n // return false;\n // }\n\n if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {\n return false;\n }\n\n return true;\n} // 这个方法复写了 g-base 的 getShape\n\n\nfunction getShape(container, x, y) {\n // 没有通过检测,则返回 null\n if (!preTest(container, x, y)) {\n return null;\n }\n\n var shape = null;\n var children = container.getChildren();\n var count = children.length;\n\n for (var i = count - 1; i >= 0; i--) {\n var child = children[i];\n\n if (child.isGroup()) {\n shape = getShape(child, x, y);\n } else if (preTest(child, x, y)) {\n var curShape = child;\n\n var _a = getRefXY(child, x, y),\n refX = _a[0],\n refY = _a[1]; // @ts-ignore\n\n\n if (curShape.isInShape(refX, refY)) {\n shape = child;\n }\n }\n\n if (shape) {\n break;\n }\n }\n\n return shape;\n}\n\n/***/ }),\n/* 924 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview circle\n * @author dengfuping_develop@163.com\n */\nvar Circle =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Circle, _super);\n\n function Circle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'circle';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n r: 0\n });\n };\n\n Circle.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Circle;\n}(_base.default);\n\nvar _default = Circle;\nexports.default = _default;\n\n/***/ }),\n/* 925 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview dom\n * @author dengfuping_develop@163.com\n */\nvar Dom =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Dom, _super);\n\n function Dom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'dom';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n\n Dom.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n\n if (typeof attrs['html'] === 'function') {\n var element = attrs['html'].call(this, attrs);\n\n if (element instanceof Element || element instanceof HTMLDocument) {\n var children = el.childNodes;\n\n for (var i = children.length - 1; i >= 0; i--) {\n el.removeChild(children[i]);\n }\n\n el.appendChild(element); // append to el if it's an element\n } else {\n el.innerHTML = element; // set innerHTML\n }\n } else {\n el.innerHTML = attrs['html']; // set innerHTML\n }\n };\n\n return Dom;\n}(_base.default);\n\nvar _default = Dom;\nexports.default = _default;\n\n/***/ }),\n/* 926 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview ellipse\n * @author dengfuping_develop@163.com\n */\nvar Ellipse =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Ellipse, _super);\n\n function Ellipse() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'ellipse';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n rx: 0,\n ry: 0\n });\n };\n\n Ellipse.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Ellipse;\n}(_base.default);\n\nvar _default = Ellipse;\nexports.default = _default;\n\n/***/ }),\n/* 927 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview image\n * @author dengfuping_develop@163.com\n */\nvar Image =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Image, _super);\n\n function Image() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'image';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n\n Image.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n };\n\n Image.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'img') {\n _this._setImage(attrs.img);\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Image.prototype.setAttr = function (name, value) {\n this.attrs[name] = value;\n\n if (name === 'img') {\n this._setImage(value);\n }\n };\n\n Image.prototype._setImage = function (img) {\n var attrs = this.attr();\n var el = this.get('el');\n\n if ((0, _util.isString)(img)) {\n el.setAttribute('href', img);\n } else if (img instanceof window.Image) {\n if (!attrs.width) {\n el.setAttribute('width', img.width);\n this.attr('width', img.width);\n }\n\n if (!attrs.height) {\n el.setAttribute('height', img.height);\n this.attr('height', img.height);\n }\n\n el.setAttribute('href', img.src);\n } else if (img instanceof HTMLElement && (0, _util.isString)(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n // @ts-ignore\n el.setAttribute('href', img.toDataURL());\n } else if (img instanceof ImageData) {\n var canvas = document.createElement('canvas');\n canvas.setAttribute('width', \"\" + img.width);\n canvas.setAttribute('height', \"\" + img.height);\n canvas.getContext('2d').putImageData(img, 0, 0);\n\n if (!attrs.width) {\n el.setAttribute('width', \"\" + img.width);\n this.attr('width', img.width);\n }\n\n if (!attrs.height) {\n el.setAttribute('height', \"\" + img.height);\n this.attr('height', img.height);\n }\n\n el.setAttribute('href', canvas.toDataURL());\n }\n };\n\n return Image;\n}(_base.default);\n\nvar _default = Image;\nexports.default = _default;\n\n/***/ }),\n/* 928 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gMath = __webpack_require__(35);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview line\n * @author dengfuping_develop@163.com\n */\nvar Line =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Line, _super);\n\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'line';\n _this.canFill = false;\n _this.canStroke = true;\n return _this;\n }\n\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n startArrow: false,\n endArrow: false\n });\n };\n\n Line.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = (0, _util.isObject)(value) ? context.addArrow(attrs, _constant.SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, _constant.SVG_ATTR_MAP[attr]);\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n } else {\n el.removeAttribute(_constant.SVG_ATTR_MAP[attr]);\n }\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n /**\n * Use math calculation to get length of line\n * @return {number} length\n */\n\n\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return _gMath.Line.length(x1, y1, x2, y2);\n };\n /**\n * Use math calculation to get point according to ratio as same sa Canvas version\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(),\n x1 = _a.x1,\n y1 = _a.y1,\n x2 = _a.x2,\n y2 = _a.y2;\n\n return _gMath.Line.pointAt(x1, y1, x2, y2, ratio);\n };\n\n return Line;\n}(_base.default);\n\nvar _default = Line;\nexports.default = _default;\n\n/***/ }),\n/* 929 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\nvar _symbols = _interopRequireDefault(__webpack_require__(930));\n\n/**\n * @fileoverview marker\n * @author dengfuping_develop@163.com\n */\nvar Marker =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Marker, _super);\n\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'marker';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Marker.prototype.createPath = function (context) {\n var el = this.get('el');\n el.setAttribute('d', this._assembleMarker());\n };\n\n Marker.prototype._assembleMarker = function () {\n var d = this._getPath();\n\n if ((0, _util.isArray)(d)) {\n return d.map(function (path) {\n return path.join(' ');\n }).join('');\n }\n\n return d;\n };\n\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x,\n y = attrs.y; // 兼容 r 和 radius 两种写法,推荐使用 r\n\n var r = attrs.r || attrs.radius;\n var symbol = attrs.symbol || 'circle';\n var method;\n\n if ((0, _util.isFunction)(symbol)) {\n method = symbol;\n } else {\n method = _symbols.default.get(symbol);\n }\n\n if (!method) {\n console.warn(method + \" symbol is not exist.\");\n return null;\n }\n\n return method(x, y, r);\n }; // 作为其静态属性\n\n\n Marker.symbolsFactory = _symbols.default;\n return Marker;\n}(_base.default);\n\nvar _default = Marker;\nexports.default = _default;\n\n/***/ }),\n/* 930 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar Symbols = {\n // 圆\n circle: function circle(x, y, r) {\n return [['M', x, y], ['m', -r, 0], ['a', r, r, 0, 1, 0, r * 2, 0], ['a', r, r, 0, 1, 0, -r * 2, 0]];\n },\n // 正方形\n square: function square(x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function diamond(x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function triangle(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['z']];\n },\n // 倒三角形\n triangleDown: function triangleDown(x, y, r) {\n var diffY = r * Math.sin(1 / 3 * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n }\n};\nvar _default = {\n get: function get(type) {\n return Symbols[type];\n },\n register: function register(type, func) {\n Symbols[type] = func;\n },\n remove: function remove(type) {\n delete Symbols[type];\n },\n getAll: function getAll() {\n return Symbols;\n }\n};\nexports.default = _default;\n\n/***/ }),\n/* 931 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\nvar Path =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Path, _super);\n\n function Path() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'path';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n };\n\n Path.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'path' && (0, _util.isArray)(value)) {\n el.setAttribute('d', _this._formatPath(value));\n } else if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = (0, _util.isObject)(value) ? context.addArrow(attrs, _constant.SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, _constant.SVG_ATTR_MAP[attr]);\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], \"url(#\" + id + \")\");\n } else {\n el.removeAttribute(_constant.SVG_ATTR_MAP[attr]);\n }\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Path.prototype._formatPath = function (value) {\n var newValue = value.map(function (path) {\n return path.join(' ');\n }).join('');\n\n if (~newValue.indexOf('NaN')) {\n return '';\n }\n\n return newValue;\n };\n /**\n * Get total length of path\n * 尽管通过浏览器的 SVGPathElement.getTotalLength() 接口获取的 path 长度,\n * 与 Canvas 版本通过数学计算的方式得到的长度有一些细微差异,但最大误差在个位数像素,精度上可以能接受\n * @return {number} length\n */\n\n\n Path.prototype.getTotalLength = function () {\n var el = this.get('el');\n return el ? el.getTotalLength() : null;\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Path.prototype.getPoint = function (ratio) {\n var el = this.get('el');\n var totalLength = this.getTotalLength(); // @see https://github.com/antvis/g/issues/634\n\n if (totalLength === 0) {\n return null;\n }\n\n var point = el ? el.getPointAtLength(ratio * totalLength) : null;\n return point ? {\n x: point.x,\n y: point.y\n } : null;\n };\n\n return Path;\n}(_base.default);\n\nvar _default = Path;\nexports.default = _default;\n\n/***/ }),\n/* 932 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview polygon\n * @author dengfuping_develop@163.com\n */\nvar Polygon =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Polygon, _super);\n\n function Polygon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'polygon';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Polygon.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && (0, _util.isArray)(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) {\n return point[0] + \",\" + point[1];\n }).join(' '));\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n return Polygon;\n}(_base.default);\n\nvar _default = Polygon;\nexports.default = _default;\n\n/***/ }),\n/* 933 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gMath = __webpack_require__(35);\n\nvar _util = __webpack_require__(0);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\nvar Polyline =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Polyline, _super);\n\n function Polyline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'polyline';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Polyline.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n startArrow: false,\n endArrow: false\n });\n }; // 更新属性时,检测是否更改了 points\n\n\n Polyline.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n\n Polyline.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n\n Polyline.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && (0, _util.isArray)(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) {\n return point[0] + \",\" + point[1];\n }).join(' '));\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n\n\n Polyline.prototype.getTotalLength = function () {\n var points = this.attr().points; // get totalLength from cache\n\n var totalLength = this.get('totalLength');\n\n if (!(0, _util.isNil)(totalLength)) {\n return totalLength;\n }\n\n this.set('totalLength', _gMath.Polyline.length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n\n\n Polyline.prototype.getPoint = function (ratio) {\n var points = this.attr().points; // get tCache from cache\n\n var tCache = this.get('tCache');\n\n if (!tCache) {\n this._setTcache();\n\n tCache = this.get('tCache');\n }\n\n var subt;\n var index;\n (0, _util.each)(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return _gMath.Line.pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n\n Polyline.prototype._setTcache = function () {\n var points = this.attr().points;\n\n if (!points || points.length === 0) {\n return;\n }\n\n var totalLength = this.getTotalLength();\n\n if (totalLength <= 0) {\n return;\n }\n\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n (0, _util.each)(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _gMath.Line.length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n\n\n Polyline.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n\n\n Polyline.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n\n return Polyline;\n}(_base.default);\n\nvar _default = Polyline;\nexports.default = _default;\n\n/***/ }),\n/* 934 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\nvar _constant = __webpack_require__(55);\n\nvar _format = __webpack_require__(935);\n\n/**\n * @fileoverview rect\n * @author dengfuping_develop@163.com\n */\nvar Rect =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Rect, _super);\n\n function Rect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'rect';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0\n });\n };\n\n Rect.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el'); // 加上状态量,用来标记 path 是否已组装\n\n var completed = false; // 和组装 path 相关的绘图属性\n\n var pathRelatedAttrs = ['x', 'y', 'width', 'height', 'radius'];\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (pathRelatedAttrs.indexOf(attr) !== -1 && !completed) {\n el.setAttribute('d', _this._assembleRect(attrs));\n completed = true;\n } else if (pathRelatedAttrs.indexOf(attr) === -1 && _constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n };\n\n Rect.prototype._assembleRect = function (attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n var radius = attrs.radius;\n\n if (!radius) {\n return \"M \" + x + \",\" + y + \" l \" + w + \",0 l 0,\" + h + \" l\" + -w + \" 0 z\";\n }\n\n var r = (0, _format.parseRadius)(radius);\n\n if ((0, _util.isArray)(radius)) {\n if (radius.length === 1) {\n r.r1 = r.r2 = r.r3 = r.r4 = radius[0];\n } else if (radius.length === 2) {\n r.r1 = r.r3 = radius[0];\n r.r2 = r.r4 = radius[1];\n } else if (radius.length === 3) {\n r.r1 = radius[0];\n r.r2 = r.r4 = radius[1];\n r.r3 = radius[2];\n } else {\n r.r1 = radius[0];\n r.r2 = radius[1];\n r.r3 = radius[2];\n r.r4 = radius[3];\n }\n } else {\n r.r1 = r.r2 = r.r3 = r.r4 = radius;\n }\n\n var d = [[\"M \" + (x + r.r1) + \",\" + y], [\"l \" + (w - r.r1 - r.r2) + \",0\"], [\"a \" + r.r2 + \",\" + r.r2 + \",0,0,1,\" + r.r2 + \",\" + r.r2], [\"l 0,\" + (h - r.r2 - r.r3)], [\"a \" + r.r3 + \",\" + r.r3 + \",0,0,1,\" + -r.r3 + \",\" + r.r3], [\"l \" + (r.r3 + r.r4 - w) + \",0\"], [\"a \" + r.r4 + \",\" + r.r4 + \",0,0,1,\" + -r.r4 + \",\" + -r.r4], [\"l 0,\" + (r.r4 + r.r1 - h)], [\"a \" + r.r1 + \",\" + r.r1 + \",0,0,1,\" + r.r1 + \",\" + -r.r1], ['z']];\n return d.join(' ');\n };\n\n return Rect;\n}(_base.default);\n\nvar _default = Rect;\nexports.default = _default;\n\n/***/ }),\n/* 935 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseRadius = parseRadius;\nexports.parsePath = parsePath;\n\nvar _util = __webpack_require__(0);\n\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi;\nvar regexDot = /[^\\s,]+/gi;\n\nfunction parseRadius(radius) {\n var r1 = 0;\n var r2 = 0;\n var r3 = 0;\n var r4 = 0;\n\n if ((0, _util.isArray)(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n } else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n } else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n } else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n } else {\n r1 = r2 = r3 = r4 = radius;\n }\n\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4\n };\n}\n\nfunction parsePath(path) {\n path = path || [];\n\n if ((0, _util.isArray)(path)) {\n return path;\n }\n\n if ((0, _util.isString)(path)) {\n path = path.match(regexTags);\n (0, _util.each)(path, function (item, index) {\n item = item.match(regexDot);\n\n if (item[0].length > 1) {\n var tag = item[0].charAt(0);\n item.splice(1, 0, item[0].substr(1));\n item[0] = tag;\n }\n\n (0, _util.each)(item, function (sub, i) {\n if (!isNaN(sub)) {\n item[i] = +sub;\n }\n });\n path[index] = item;\n });\n return path;\n }\n}\n\n/***/ }),\n/* 936 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _detectBrowser = __webpack_require__(240);\n\nvar _svg = __webpack_require__(150);\n\nvar _constant = __webpack_require__(55);\n\nvar _base = _interopRequireDefault(__webpack_require__(64));\n\n/**\n * @fileoverview text\n * @author dengfuping_develop@163.com\n */\nvar LETTER_SPACING = 0.3;\nvar BASELINE_MAP = {\n top: 'before-edge',\n middle: 'central',\n bottom: 'after-edge',\n alphabetic: 'baseline',\n hanging: 'hanging'\n}; // for FireFox\n\nvar BASELINE_MAP_FOR_FIREFOX = {\n top: 'text-before-edge',\n middle: 'central',\n bottom: 'text-after-edge',\n alphabetic: 'alphabetic',\n hanging: 'hanging'\n};\nvar ANCHOR_MAP = {\n left: 'left',\n start: 'left',\n center: 'middle',\n right: 'end',\n end: 'end'\n};\n\nvar Text =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Text, _super);\n\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'text';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), {\n x: 0,\n y: 0,\n text: null,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom'\n });\n };\n\n Text.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n\n var attrs = this.attr();\n var el = this.get('el');\n\n this._setFont();\n\n (0, _util.each)(targetAttrs || attrs, function (value, attr) {\n if (attr === 'text') {\n _this._setText(\"\" + value);\n } else if (attr === 'matrix' && value) {\n (0, _svg.setTransform)(_this);\n } else if (_constant.SVG_ATTR_MAP[attr]) {\n el.setAttribute(_constant.SVG_ATTR_MAP[attr], value);\n }\n });\n el.setAttribute('paint-order', 'stroke');\n el.setAttribute('style', 'stroke-linecap:butt; stroke-linejoin:miter;');\n };\n\n Text.prototype._setFont = function () {\n var el = this.get('el');\n\n var _a = this.attr(),\n textBaseline = _a.textBaseline,\n textAlign = _a.textAlign;\n\n var browser = (0, _detectBrowser.detect)();\n\n if (browser && browser.name === 'firefox') {\n // compatible with FireFox browser, ref: https://github.com/antvis/g/issues/119\n el.setAttribute('dominant-baseline', BASELINE_MAP_FOR_FIREFOX[textBaseline] || 'alphabetic');\n } else {\n el.setAttribute('alignment-baseline', BASELINE_MAP[textBaseline] || 'baseline');\n }\n\n el.setAttribute('text-anchor', ANCHOR_MAP[textAlign] || 'left');\n };\n\n Text.prototype._setText = function (text) {\n var el = this.get('el');\n\n var _a = this.attr(),\n x = _a.x,\n _b = _a.textBaseline,\n baseline = _b === void 0 ? 'bottom' : _b;\n\n if (!text) {\n el.innerHTML = '';\n } else if (~text.indexOf('\\n')) {\n var textArr = text.split('\\n');\n var textLen_1 = textArr.length - 1;\n var arr_1 = '';\n (0, _util.each)(textArr, function (segment, i) {\n if (i === 0) {\n if (baseline === 'alphabetic') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'top') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'middle') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'bottom') {\n arr_1 += \"\" + segment + \"\";\n } else if (baseline === 'hanging') {\n arr_1 += \"\" + segment + \"\";\n }\n } else {\n arr_1 += \"\" + segment + \"\";\n }\n });\n el.innerHTML = arr_1;\n } else {\n el.innerHTML = text;\n }\n };\n\n return Text;\n}(_base.default);\n\nvar _default = Text;\nexports.default = _default;\n\n/***/ }),\n/* 937 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _gBase = __webpack_require__(27);\n\nvar _constant = __webpack_require__(55);\n\nvar _draw = __webpack_require__(275);\n\nvar _svg = __webpack_require__(150);\n\nvar _dom = __webpack_require__(73);\n\nvar Shape = _interopRequireWildcard(__webpack_require__(192));\n\nvar _group = _interopRequireDefault(__webpack_require__(276));\n\nvar _defs = _interopRequireDefault(__webpack_require__(938));\n\nvar Canvas =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Canvas, _super);\n\n function Canvas(cfg) {\n return _super.call(this, (0, _tslib.__assign)((0, _tslib.__assign)({}, cfg), {\n autoDraw: true,\n // 设置渲染引擎为 canvas,只读属性\n renderer: 'svg'\n })) || this;\n }\n\n Canvas.prototype.getShapeBase = function () {\n return Shape;\n };\n\n Canvas.prototype.getGroupBase = function () {\n return _group.default;\n }; // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑,直接走 SVG 的 dom 拾取即可\n\n\n Canvas.prototype.getShape = function (x, y, ev) {\n var target = ev.target || ev.srcElement;\n\n if (!_constant.SHAPE_TO_TAGS[target.tagName]) {\n var parent_1 = target.parentNode;\n\n while (parent_1 && !_constant.SHAPE_TO_TAGS[parent_1.tagName]) {\n parent_1 = parent_1.parentNode;\n }\n\n target = parent_1;\n }\n\n return this.find(function (child) {\n return child.get('el') === target;\n });\n }; // 复写基类的方法生成标签\n\n\n Canvas.prototype.createDom = function () {\n var element = (0, _dom.createSVGElement)('svg');\n var context = new _defs.default(element);\n element.setAttribute('width', \"\" + this.get('width'));\n element.setAttribute('height', \"\" + this.get('height')); // 缓存 context 对象\n\n this.set('context', context);\n return element;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n\n\n Canvas.prototype.onCanvasChange = function (changeType) {\n var context = this.get('context');\n var el = this.get('el');\n\n if (changeType === 'sort') {\n var children_1 = this.get('children');\n\n if (children_1 && children_1.length) {\n (0, _dom.sortDom)(this, function (a, b) {\n return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n });\n }\n } else if (changeType === 'clear') {\n // el maybe null for canvas\n if (el) {\n // 清空 SVG 元素\n el.innerHTML = '';\n var defsEl = context.el; // 清空 defs 元素\n\n defsEl.innerHTML = ''; // 将清空后的 defs 元素挂载到 el 下\n\n el.appendChild(defsEl);\n }\n } else if (changeType === 'matrix') {\n (0, _svg.setTransform)(this);\n } else if (changeType === 'clip') {\n (0, _svg.setClip)(this, context);\n } else if (changeType === 'changeSize') {\n el.setAttribute('width', \"\" + this.get('width'));\n el.setAttribute('height', \"\" + this.get('height'));\n }\n }; // 复写基类的 draw 方法\n\n\n Canvas.prototype.draw = function () {\n var context = this.get('context');\n var children = this.getChildren();\n (0, _svg.setClip)(this, context);\n\n if (children.length) {\n (0, _draw.drawChildren)(context, children);\n }\n };\n\n return Canvas;\n}(_gBase.AbstractCanvas);\n\nvar _default = Canvas;\nexports.default = _default;\n\n/***/ }),\n/* 938 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _gradient = _interopRequireDefault(__webpack_require__(939));\n\nvar _shadow = _interopRequireDefault(__webpack_require__(940));\n\nvar _arrow = _interopRequireDefault(__webpack_require__(941));\n\nvar _clip = _interopRequireDefault(__webpack_require__(942));\n\nvar _pattern = _interopRequireDefault(__webpack_require__(943));\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview defs\n * @author dengfuping_develop@163.com\n */\nvar Defs =\n/** @class */\nfunction () {\n function Defs(canvas) {\n var el = (0, _dom.createSVGElement)('defs');\n var id = (0, _util.uniqueId)('defs_');\n el.id = id;\n canvas.appendChild(el);\n this.children = [];\n this.defaultArrow = {};\n this.el = el;\n this.canvas = canvas;\n }\n\n Defs.prototype.find = function (type, attr) {\n var children = this.children;\n var result = null;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].match(type, attr)) {\n result = children[i].id;\n break;\n }\n }\n\n return result;\n };\n\n Defs.prototype.findById = function (id) {\n var children = this.children;\n var flag = null;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].id === id) {\n flag = children[i];\n break;\n }\n }\n\n return flag;\n };\n\n Defs.prototype.add = function (item) {\n this.children.push(item);\n item.canvas = this.canvas;\n item.parent = this;\n };\n\n Defs.prototype.getDefaultArrow = function (attrs, name) {\n var stroke = attrs.stroke || attrs.strokeStyle;\n\n if (this.defaultArrow[stroke]) {\n return this.defaultArrow[stroke].id;\n }\n\n var arrow = new _arrow.default(attrs, name);\n this.defaultArrow[stroke] = arrow;\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n\n Defs.prototype.addGradient = function (cfg) {\n var gradient = new _gradient.default(cfg);\n this.el.appendChild(gradient.el);\n this.add(gradient);\n return gradient.id;\n };\n\n Defs.prototype.addArrow = function (attrs, name) {\n var arrow = new _arrow.default(attrs, name);\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n\n Defs.prototype.addShadow = function (cfg) {\n var shadow = new _shadow.default(cfg);\n this.el.appendChild(shadow.el);\n this.add(shadow);\n return shadow.id;\n };\n\n Defs.prototype.addPattern = function (cfg) {\n var pattern = new _pattern.default(cfg);\n this.el.appendChild(pattern.el);\n this.add(pattern);\n return pattern.id;\n };\n\n Defs.prototype.addClip = function (cfg) {\n var clip = new _clip.default(cfg);\n this.el.appendChild(clip.el);\n this.add(clip);\n return clip.id;\n };\n\n return Defs;\n}();\n\nvar _default = Defs;\nexports.default = _default;\n\n/***/ }),\n/* 939 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview gradient\n * @author dengfuping_develop@163.com\n */\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^)]+\\))/gi;\n\nfunction addStop(steps) {\n var arr = steps.match(regexColorStop);\n\n if (!arr) {\n return '';\n }\n\n var stops = '';\n arr.sort(function (a, b) {\n a = a.split(':');\n b = b.split(':');\n return Number(a[0]) - Number(b[0]);\n });\n (0, _util.each)(arr, function (item) {\n item = item.split(':');\n stops += \"\";\n });\n return stops;\n}\n\nfunction parseLineGradient(color, el) {\n var arr = regexLG.exec(color);\n var angle = (0, _util.mod)((0, _util.toRadian)(parseFloat(arr[1])), Math.PI * 2);\n var steps = arr[2];\n var start;\n var end;\n\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 1,\n y: 1\n };\n } else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: 1,\n y: 0\n };\n end = {\n x: 0,\n y: 1\n };\n } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: 1,\n y: 1\n };\n end = {\n x: 0,\n y: 0\n };\n } else {\n start = {\n x: 0,\n y: 1\n };\n end = {\n x: 1,\n y: 0\n };\n }\n\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;\n el.setAttribute('x1', start.x);\n el.setAttribute('y1', start.y);\n el.setAttribute('x2', x);\n el.setAttribute('y2', y);\n el.innerHTML = addStop(steps);\n}\n\nfunction parseRadialGradient(color, self) {\n var arr = regexRG.exec(color);\n var cx = parseFloat(arr[1]);\n var cy = parseFloat(arr[2]);\n var r = parseFloat(arr[3]);\n var steps = arr[4];\n self.setAttribute('cx', cx);\n self.setAttribute('cy', cy);\n self.setAttribute('r', r);\n self.innerHTML = addStop(steps);\n}\n\nvar Gradient =\n/** @class */\nfunction () {\n function Gradient(cfg) {\n this.cfg = {};\n var el = null;\n var id = (0, _util.uniqueId)('gradient_');\n\n if (cfg.toLowerCase()[0] === 'l') {\n el = (0, _dom.createSVGElement)('linearGradient');\n parseLineGradient(cfg, el);\n } else {\n el = (0, _dom.createSVGElement)('radialGradient');\n parseRadialGradient(cfg, el);\n }\n\n el.setAttribute('id', id);\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n return this;\n }\n\n Gradient.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n\n return Gradient;\n}();\n\nvar _default = Gradient;\nexports.default = _default;\n\n/***/ }),\n/* 940 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview shadow\n * @author dengfuping_develop@163.com\n */\nvar ATTR_MAP = {\n shadowColor: 'color',\n shadowOpacity: 'opacity',\n shadowBlur: 'blur',\n shadowOffsetX: 'dx',\n shadowOffsetY: 'dy'\n};\nvar SHADOW_DIMENSION = {\n x: '-40%',\n y: '-40%',\n width: '200%',\n height: '200%'\n};\n\nvar Shadow =\n/** @class */\nfunction () {\n function Shadow(cfg) {\n this.type = 'filter';\n this.cfg = {};\n this.type = 'filter';\n var el = (0, _dom.createSVGElement)('filter'); // expand the filter region to fill in shadows\n\n (0, _util.each)(SHADOW_DIMENSION, function (v, k) {\n el.setAttribute(k, v);\n });\n this.el = el;\n this.id = (0, _util.uniqueId)('filter_');\n this.el.id = this.id;\n this.cfg = cfg;\n\n this._parseShadow(cfg, el);\n\n return this;\n }\n\n Shadow.prototype.match = function (type, cfg) {\n if (this.type !== type) {\n return false;\n }\n\n var flag = true;\n var config = this.cfg;\n (0, _util.each)(Object.keys(config), function (attr) {\n if (config[attr] !== cfg[attr]) {\n flag = false;\n return false;\n }\n });\n return flag;\n };\n\n Shadow.prototype.update = function (name, value) {\n var config = this.cfg;\n config[ATTR_MAP[name]] = value;\n\n this._parseShadow(config, this.el);\n\n return this;\n };\n\n Shadow.prototype._parseShadow = function (config, el) {\n var child = \"\";\n el.innerHTML = child;\n };\n\n return Shadow;\n}();\n\nvar _default = Shadow;\nexports.default = _default;\n\n/***/ }),\n/* 941 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview arrow\n * @author dengfuping_develop@163.com\n */\nvar Arrow =\n/** @class */\nfunction () {\n function Arrow(attrs, type) {\n this.cfg = {};\n var el = (0, _dom.createSVGElement)('marker');\n var id = (0, _util.uniqueId)('marker_');\n el.setAttribute('id', id);\n var shape = (0, _dom.createSVGElement)('path');\n shape.setAttribute('stroke', attrs.stroke || 'none');\n shape.setAttribute('fill', attrs.fill || 'none');\n el.appendChild(shape);\n el.setAttribute('overflow', 'visible');\n el.setAttribute('orient', 'auto-start-reverse');\n this.el = el;\n this.child = shape;\n this.id = id;\n var cfg = attrs[type === 'marker-start' ? 'startArrow' : 'endArrow'];\n this.stroke = attrs.stroke || '#000';\n\n if (cfg === true) {\n this._setDefaultPath(type, shape);\n } else {\n this.cfg = cfg; // when arrow config exists\n\n this._setMarker(attrs.lineWidth, shape);\n }\n\n return this;\n }\n\n Arrow.prototype.match = function () {\n return false;\n };\n\n Arrow.prototype._setDefaultPath = function (type, el) {\n var parent = this.el; // 默认箭头的边长为 10,夹角为 60 度\n\n el.setAttribute('d', \"M0,0 L\" + 10 * Math.cos(Math.PI / 6) + \",5 L0,10\");\n parent.setAttribute('refX', \"\" + 10 * Math.cos(Math.PI / 6));\n parent.setAttribute('refY', \"\" + 5);\n };\n\n Arrow.prototype._setMarker = function (r, el) {\n var parent = this.el;\n var path = this.cfg.path;\n var d = this.cfg.d;\n\n if ((0, _util.isArray)(path)) {\n path = path.map(function (segment) {\n return segment.join(' ');\n }).join('');\n }\n\n el.setAttribute('d', path);\n parent.appendChild(el);\n\n if (d) {\n parent.setAttribute('refX', \"\" + d / r);\n }\n };\n\n Arrow.prototype.update = function (fill) {\n var child = this.child;\n\n if (child.attr) {\n child.attr('fill', fill);\n } else {\n child.setAttribute('fill', fill);\n }\n };\n\n return Arrow;\n}();\n\nvar _default = Arrow;\nexports.default = _default;\n\n/***/ }),\n/* 942 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview clip\n * @author dengfuping_develop@163.com\n */\nvar Clip =\n/** @class */\nfunction () {\n function Clip(cfg) {\n this.type = 'clip';\n this.cfg = {};\n var el = (0, _dom.createSVGElement)('clipPath');\n this.el = el;\n this.id = (0, _util.uniqueId)('clip_');\n el.id = this.id;\n var shapeEl = cfg.cfg.el;\n el.appendChild(shapeEl);\n this.cfg = cfg;\n return this;\n }\n\n Clip.prototype.match = function () {\n return false;\n };\n\n Clip.prototype.remove = function () {\n var el = this.el;\n el.parentNode.removeChild(el);\n };\n\n return Clip;\n}();\n\nvar _default = Clip;\nexports.default = _default;\n\n/***/ }),\n/* 943 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _dom = __webpack_require__(73);\n\n/**\n * @fileoverview pattern\n * @author dengfuping_develop@163.com\n */\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\n\nvar Pattern =\n/** @class */\nfunction () {\n function Pattern(cfg) {\n this.cfg = {};\n var el = (0, _dom.createSVGElement)('pattern');\n el.setAttribute('patternUnits', 'userSpaceOnUse');\n var child = (0, _dom.createSVGElement)('image');\n el.appendChild(child);\n var id = (0, _util.uniqueId)('pattern_');\n el.id = id;\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n var arr = regexPR.exec(cfg);\n var source = arr[2];\n child.setAttribute('href', source);\n var img = new Image();\n\n if (!source.match(/^data:/i)) {\n img.crossOrigin = 'Anonymous';\n }\n\n img.src = source;\n\n function onload() {\n el.setAttribute('width', \"\" + img.width);\n el.setAttribute('height', \"\" + img.height);\n }\n\n if (img.complete) {\n onload();\n } else {\n img.onload = onload; // Fix onload() bug in IE9\n\n img.src = img.src;\n }\n\n return this;\n }\n\n Pattern.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n\n return Pattern;\n}();\n\nvar _default = Pattern;\nexports.default = _default;\n\n/***/ }),\n/* 944 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(29);\n\nvar constant_1 = __webpack_require__(271);\n\nvar get_style_1 = __webpack_require__(40);\n\nvar util_1 = __webpack_require__(151);\n/** Interval 的 shape 工厂 */\n\n\nvar IntervalShapeFactory = base_1.registerShapeFactory('interval', {\n defaultShapeType: 'rect',\n getDefaultPoints: function getDefaultPoints(pointInfo) {\n return util_1.getRectPoints(pointInfo);\n }\n});\n/** Inerval 默认 shape,填充的矩形 */\n\nbase_1.registerShape('interval', 'rect', {\n draw: function draw(cfg, container) {\n var style = get_style_1.getStyle(cfg, false, true);\n var group = container;\n var backgroundCfg = cfg === null || cfg === void 0 ? void 0 : cfg.background;\n\n if (backgroundCfg) {\n group = container.addGroup();\n var backgroundStyle = get_style_1.getBackgroundRectStyle(cfg);\n var backgroundPath = util_1.getBackgroundRectPath(cfg, this.parsePoints(cfg.points), this.coordinate);\n group.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, backgroundStyle), {\n path: backgroundPath\n }),\n zIndex: -1,\n name: constant_1.BACKGROUND_SHAPE\n });\n }\n\n var path;\n\n if (style.radius && this.coordinate.isRect) {\n path = util_1.getRectWithCornerRadius(this.parsePoints(cfg.points), this.coordinate, style.radius);\n } else {\n path = this.parsePath(util_1.getIntervalRectPath(cfg.points, style.lineCap, this.coordinate));\n }\n\n var shape = group.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n }),\n name: 'interval'\n });\n return backgroundCfg ? group : shape;\n },\n getMarker: function getMarker(markerCfg) {\n var color = markerCfg.color,\n isInPolar = markerCfg.isInPolar;\n\n if (isInPolar) {\n return {\n symbol: 'circle',\n style: {\n r: 4.5,\n fill: color\n }\n };\n }\n\n return {\n symbol: 'square',\n style: {\n r: 4,\n fill: color\n }\n };\n }\n});\nexports.default = IntervalShapeFactory;\n\n/***/ }),\n/* 945 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar util_1 = __webpack_require__(0);\n\nvar marker_1 = __webpack_require__(147);\n\nvar base_1 = __webpack_require__(29);\n\nvar split_points_1 = __webpack_require__(279);\n\nvar util_2 = __webpack_require__(281);\n\nvar PointShapeFactory = base_1.registerShapeFactory('point', {\n defaultShapeType: 'hollow-circle',\n getDefaultPoints: function getDefaultPoints(pointInfo) {\n return split_points_1.splitPoints(pointInfo);\n }\n});\nutil_1.each(util_2.SHAPES, function (shapeName) {\n // 添加该 shape 对应的 hollow-shape\n base_1.registerShape('point', \"hollow-\" + shapeName, {\n draw: function draw(cfg, container) {\n return util_2.drawPoints(this, cfg, container, shapeName, true);\n },\n getMarker: function getMarker(markerCfg) {\n var color = markerCfg.color;\n return {\n symbol: marker_1.MarkerSymbols[shapeName] || shapeName,\n style: {\n r: 4.5,\n stroke: color,\n fill: null\n }\n };\n }\n });\n});\nexports.default = PointShapeFactory;\n\n/***/ }),\n/* 946 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar base_1 = __webpack_require__(29);\n\nvar util_1 = __webpack_require__(100);\n/**\n * 描边但不填充的区域图\n */\n\n\nbase_1.registerShape('area', 'line', {\n draw: function draw(cfg, container) {\n var attrs = util_1.getShapeAttrs(cfg, true, false, this);\n var shape = container.addShape({\n type: 'path',\n attrs: attrs,\n name: 'area'\n });\n return shape;\n },\n getMarker: function getMarker(markerCfg) {\n var color = markerCfg.color;\n return {\n symbol: function symbol(x, y, r) {\n if (r === void 0) {\n r = 5.5;\n }\n\n return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n },\n style: {\n r: 5,\n stroke: color,\n fill: null\n }\n };\n }\n});\n\n/***/ }),\n/* 947 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar base_1 = __webpack_require__(29);\n\nvar util_1 = __webpack_require__(100);\n/**\n * 填充的平滑曲面图\n */\n\n\nbase_1.registerShape('area', 'smooth', {\n draw: function draw(cfg, container) {\n var coordinate = this.coordinate;\n var attrs = util_1.getShapeAttrs(cfg, false, true, this, util_1.getConstraint(coordinate));\n var shape = container.addShape({\n type: 'path',\n attrs: attrs,\n name: 'area'\n });\n return shape;\n },\n getMarker: function getMarker(markerCfg) {\n var color = markerCfg.color;\n return {\n symbol: function symbol(x, y, r) {\n if (r === void 0) {\n r = 5.5;\n }\n\n return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n },\n style: {\n r: 5,\n fill: color\n }\n };\n }\n});\n\n/***/ }),\n/* 948 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar base_1 = __webpack_require__(29);\n\nvar util_1 = __webpack_require__(100);\n/** 描边的平滑曲面图 */\n\n\nbase_1.registerShape('area', 'smooth-line', {\n draw: function draw(cfg, container) {\n var coordinate = this.coordinate;\n var attrs = util_1.getShapeAttrs(cfg, true, true, this, util_1.getConstraint(coordinate));\n var shape = container.addShape({\n type: 'path',\n attrs: attrs,\n name: 'area'\n });\n return shape;\n },\n getMarker: function getMarker(markerCfg) {\n var color = markerCfg.color;\n return {\n symbol: function symbol(x, y, r) {\n if (r === void 0) {\n r = 5.5;\n }\n\n return [['M', x - r, y - 4], ['L', x + r, y - 4], ['L', x + r, y + 4], ['L', x - r, y + 4], ['Z']];\n },\n style: {\n r: 5,\n stroke: color,\n fill: null\n }\n };\n }\n});\n\n/***/ }),\n/* 949 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar graphics_1 = __webpack_require__(45);\n\nvar base_1 = __webpack_require__(29);\n\nvar get_style_1 = __webpack_require__(40);\n\nvar util_1 = __webpack_require__(453);\n\nfunction getArcShapePath(from, to, center) {\n var sub = util_1.getQPath(to, center);\n var path = [['M', from.x, from.y]];\n path.push(sub);\n return path;\n}\n\nfunction getArcShapeWeightPath(points, center) {\n var arc1 = util_1.getQPath(points[1], center);\n var arc2 = util_1.getQPath(points[3], center);\n var path = [['M', points[0].x, points[0].y]];\n path.push(arc2);\n path.push(['L', points[3].x, points[3].y]);\n path.push(['L', points[2].x, points[2].y]);\n path.push(arc1);\n path.push(['L', points[1].x, points[1].y]);\n path.push(['L', points[0].x, points[0].y]);\n path.push(['Z']);\n return path;\n} // 弧线包括笛卡尔坐标系下的半圆弧线、极坐标系下以圆心为控制点的二阶曲线、笛卡尔坐标系下带权重的三阶曲线、极坐标系下带权重的以圆心为控制点的二阶曲线\n\n\nbase_1.registerShape('edge', 'arc', {\n draw: function draw(cfg, container) {\n var style = get_style_1.getStyle(cfg, true, false, 'lineWidth');\n var points = cfg.points;\n var type = points.length > 2 ? 'weight' : 'normal';\n var path;\n\n if (cfg.isInCircle) {\n var center = {\n x: 0,\n y: 1\n };\n\n if (type === 'normal') {\n path = getArcShapePath(points[0], points[1], center);\n } else {\n style.fill = style.stroke;\n path = getArcShapeWeightPath(points, center);\n }\n\n path = this.parsePath(path);\n return container.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n })\n });\n } else {\n if (type === 'normal') {\n points = this.parsePoints(points);\n path = graphics_1.getArcPath((points[1].x + points[0].x) / 2, points[0].y, Math.abs(points[1].x - points[0].x) / 2, Math.PI, Math.PI * 2);\n return container.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n })\n });\n } else {\n var c1 = util_1.getCPath(points[1], points[3]);\n var c2 = util_1.getCPath(points[2], points[0]);\n path = [['M', points[0].x, points[0].y], ['L', points[1].x, points[1].y], c1, ['L', points[3].x, points[3].y], ['L', points[2].x, points[2].y], c2, ['Z']];\n path = this.parsePath(path);\n style.fill = style.stroke;\n return container.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n })\n });\n }\n }\n },\n getMarker: function getMarker(markerCfg) {\n return {\n symbol: 'circle',\n style: {\n r: 4.5,\n fill: markerCfg.color\n }\n };\n }\n});\n\n/***/ }),\n/* 950 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(29);\n\nvar get_style_1 = __webpack_require__(40);\n\nvar util_1 = __webpack_require__(453);\n\nfunction getSmoothPath(from, to) {\n var sub = util_1.getCPath(from, to);\n var path = [['M', from.x, from.y]];\n path.push(sub);\n return path;\n}\n\nbase_1.registerShape('edge', 'smooth', {\n draw: function draw(cfg, container) {\n var style = get_style_1.getStyle(cfg, true, false, 'lineWidth');\n var points = cfg.points;\n var path = this.parsePath(getSmoothPath(points[0], points[1]));\n return container.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n })\n });\n },\n getMarker: function getMarker(markerCfg) {\n return {\n symbol: 'circle',\n style: {\n r: 4.5,\n fill: markerCfg.color\n }\n };\n }\n});\n\n/***/ }),\n/* 951 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = __webpack_require__(29);\n\nvar get_style_1 = __webpack_require__(40);\n\nvar CORNER_PERCENT = 1 / 3;\n\nfunction getVHVPath(from, to) {\n var points = [];\n points.push({\n x: from.x,\n y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT\n });\n points.push({\n x: to.x,\n y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT\n });\n points.push(to);\n var path = [['M', from.x, from.y]];\n util_1.each(points, function (point) {\n path.push(['L', point.x, point.y]);\n });\n return path;\n}\n\nbase_1.registerShape('edge', 'vhv', {\n draw: function draw(cfg, container) {\n var style = get_style_1.getStyle(cfg, true, false, 'lineWidth');\n var points = cfg.points;\n var path = this.parsePath(getVHVPath(points[0], points[1]));\n return container.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, style), {\n path: path\n })\n });\n },\n getMarker: function getMarker(markerCfg) {\n return {\n symbol: 'circle',\n style: {\n r: 4.5,\n fill: markerCfg.color\n }\n };\n }\n});\n\n/***/ }),\n/* 952 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pieOuterLabelLayout = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar graphics_1 = __webpack_require__(45);\n\nvar util_2 = __webpack_require__(465);\n/** label text和line距离 4px */\n\n\nvar MARGIN = 4;\n/**\n * 配置 labelline\n * @param item PolarLabelItem\n */\n\nfunction drawLabelline(item\n/** PolarLabelItem */\n, coordinate) {\n /** 坐标圆心 */\n var center = coordinate.getCenter();\n /** 圆半径 */\n\n var radius = coordinate.getRadius();\n\n if (item && item.labelLine) {\n var angle = item.angle,\n labelOffset = item.offset; // 贴近圆周\n\n var startPoint = graphics_1.polarToCartesian(center.x, center.y, radius, angle);\n var itemX = item.x + util_1.get(item, 'offsetX', 0) * (Math.cos(angle) > 0 ? 1 : -1);\n var itemY = item.y + util_1.get(item, 'offsetY', 0) * (Math.sin(angle) > 0 ? 1 : -1);\n var endPoint = {\n x: itemX - Math.cos(angle) * MARGIN,\n y: itemY - Math.sin(angle) * MARGIN\n };\n var smoothConnector = item.labelLine.smooth;\n var path = [];\n var dx = endPoint.x - center.x;\n var dy = endPoint.y - center.y;\n var endAngle = Math.atan(dy / dx); // 第三象限 & 第四象限\n\n if (dx < 0) {\n endAngle += Math.PI;\n } // 默认 smooth, undefined 也为 smooth\n\n\n if (smoothConnector === false) {\n if (!util_1.isObject(item.labelLine)) {\n // labelLine: true\n item.labelLine = {};\n } // 表示弧线的方向,0 表示从起点到终点沿逆时针画弧, 1 表示顺时针\n\n\n var sweepFlag = 0; // 第一象限\n\n if (angle < 0 && angle > -Math.PI / 2 || angle > Math.PI * 1.5) {\n if (endPoint.y > startPoint.y) {\n sweepFlag = 1;\n }\n } // 第二象限\n\n\n if (angle >= 0 && angle < Math.PI / 2) {\n if (endPoint.y > startPoint.y) {\n sweepFlag = 1;\n }\n } // 第三象限\n\n\n if (angle >= Math.PI / 2 && angle < Math.PI) {\n if (startPoint.y > endPoint.y) {\n sweepFlag = 1;\n }\n } // 第四象限\n\n\n if (angle < -Math.PI / 2 || angle >= Math.PI && angle < Math.PI * 1.5) {\n if (startPoint.y > endPoint.y) {\n sweepFlag = 1;\n }\n }\n\n var distance = labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0);\n var breakPoint = graphics_1.polarToCartesian(center.x, center.y, radius + distance, angle); // 圆弧的结束点\n\n var breakPoint3 = graphics_1.polarToCartesian(center.x, center.y, radius + labelOffset / 2, endAngle);\n /**\n * @example\n * M 100 100 L100 90 A 50 50 0 0 0 150 50\n * 移动至 (100, 100), 连接到 (100, 90), 以 (50, 50) 为圆心,绘制圆弧至 (150, 50);\n * A 命令的第 4 个参数 large-arc-flag, 决定弧线是大于还是小于 180 度: 0 表示小角度弧,1 表示大角\n * 第 5 个参数: 是否顺时针绘制\n */\n // 默认小弧\n\n var largeArcFlag = 0; // step1: 移动至起点\n\n path.push(\"M \" + startPoint.x + \" \" + startPoint.y); // step2: 连接拐点\n\n path.push(\"L \" + breakPoint.x + \" \" + breakPoint.y); // step3: 绘制圆弧 至 结束点\n\n path.push(\"A \" + center.x + \" \" + center.y + \" 0 \" + largeArcFlag + \" \" + sweepFlag + \" \" + breakPoint3.x + \" \" + breakPoint3.y); // step4: 连接结束点\n\n path.push(\"L \" + endPoint.x + \" \" + endPoint.y);\n } else {\n var breakPoint = graphics_1.polarToCartesian(center.x, center.y, radius + (labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0)), angle); // G2 旧的拉线\n // path.push('Q', `${breakPoint.x}`, `${breakPoint.y}`, `${endPoint.x}`, `${endPoint.y}`);\n\n var xSign = startPoint.x < center.x ? 1 : -1; // step1: 连接结束点\n\n path.push(\"M \" + endPoint.x + \" \" + endPoint.y);\n var slope1 = (startPoint.y - center.y) / (startPoint.x - center.x);\n var slope2 = (endPoint.y - center.y) / (endPoint.x - center.x);\n\n if (Math.abs(slope1 - slope2) > Math.pow(Math.E, -16)) {\n // step2: 绘制 curve line (起点 & 结合点与圆心的斜率不等时, 由于存在误差, 使用近似处理)\n path.push.apply(path, ['C', endPoint.x + xSign * 4, endPoint.y, 2 * breakPoint.x - startPoint.x, 2 * breakPoint.y - startPoint.y, startPoint.x, startPoint.y]);\n } // step3: 连接至起点\n\n\n path.push(\"L \" + startPoint.x + \" \" + startPoint.y);\n }\n\n item.labelLine.path = path.join(' ');\n }\n}\n/**\n * 饼图 outer-label 布局, 适用于 type = pie 且 label offset > 0 的标签\n */\n\n\nfunction pieOuterLabelLayout(originalItems, labels, shapes, region) {\n var items = util_1.filter(originalItems, function (item) {\n return !util_1.isNil(item);\n });\n /** 坐标系 */\n\n var coordinate = labels[0] && labels[0].get('coordinate');\n\n if (!coordinate) {\n return;\n }\n /** 坐标圆心 */\n\n\n var center = coordinate.getCenter();\n /** 圆半径 */\n\n var radius = coordinate.getRadius();\n /** label shapes */\n\n var labelsMap = {};\n\n for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {\n var labelShape = labels_1[_i];\n labelsMap[labelShape.get('id')] = labelShape;\n } // note labelHeight 可以控制 label 的行高\n\n\n var labelHeight = util_1.get(items[0], 'labelHeight', 14);\n var labelOffset = util_1.get(items[0], 'offset', 0);\n\n if (labelOffset <= 0) {\n return;\n }\n\n var LEFT_HALF_KEY = 'left';\n var RIGHT_HALF_KEY = 'right'; // step 1: separate labels\n\n var separateLabels = util_1.groupBy(items, function (item) {\n return item.x < center.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY;\n });\n var start = coordinate.start,\n end = coordinate.end; // step2: calculate totalHeight\n\n var totalHeight = Math.min((radius + labelOffset + labelHeight) * 2, coordinate.getHeight());\n var totalR = totalHeight / 2;\n /** labels 容器的范围(后续根据组件的布局设计进行调整) */\n\n var labelsContainerRange = {\n minX: start.x,\n maxX: end.x,\n minY: center.y - totalR,\n maxY: center.y + totalR\n }; // step 3: antiCollision\n\n util_1.each(separateLabels, function (half, key) {\n var maxLabelsCountForOneSide = Math.floor(totalHeight / labelHeight);\n\n if (half.length > maxLabelsCountForOneSide) {\n half.sort(function (a, b) {\n // sort by percentage DESC\n return b.percent - a.percent;\n });\n util_1.each(half, function (labelItem, idx) {\n if (idx + 1 > maxLabelsCountForOneSide) {\n labelsMap[labelItem.id].set('visible', false);\n labelItem.invisible = true;\n }\n });\n }\n\n util_2.antiCollision(half, labelHeight, labelsContainerRange);\n });\n util_1.each(separateLabels, function (half, key) {\n util_1.each(half, function (item) {\n var isRight = key === RIGHT_HALF_KEY;\n var labelShape = labelsMap[item.id]; // because group could not effect content-shape, should set content-shape position manually\n\n var content = labelShape.getChildByIndex(0); // textShape 发生过调整\n\n if (content) {\n var r = radius + labelOffset; // (x - cx)^2 + (y - cy)^2 = totalR^2\n\n var dy = item.y - center.y;\n var rPow2 = Math.pow(r, 2);\n var dyPow2 = Math.pow(dy, 2);\n var dxPow2 = rPow2 - dyPow2 > 0 ? rPow2 - dyPow2 : 0;\n var dx = Math.sqrt(dxPow2);\n var dx_offset = Math.abs(Math.cos(item.angle) * r);\n\n if (!isRight) {\n // left\n item.x = center.x - Math.max(dx, dx_offset);\n } else {\n // right\n item.x = center.x + Math.max(dx, dx_offset);\n }\n } // adjust labelShape\n\n\n if (content) {\n content.attr('y', item.y);\n content.attr('x', item.x);\n }\n\n drawLabelline(item, coordinate);\n });\n });\n}\n\nexports.pieOuterLabelLayout = pieOuterLabelLayout;\n\n/***/ }),\n/* 953 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pieSpiderLabelLayout = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar graphics_1 = __webpack_require__(45);\n\nvar util_2 = __webpack_require__(465);\n\nvar transform_1 = __webpack_require__(115);\n/** 拐点偏移量, 暂不可配置 */\n\n\nvar INFLECTION_OFFSET = 4;\n/** 标签偏移量, distance between label and edge: offsetX */\n\nvar LABEL_OFFSET_X = 4;\n/** 标签与牵引线的偏移量 */\n\nvar LABEL_TEXT_LINE_OFFSET = 4;\n\nfunction drawLabelline(item, coordinate, inRight) {\n /** 坐标圆心 */\n var center = coordinate.getCenter();\n /** 圆半径 */\n\n var radius = coordinate.getRadius();\n var startPoint = {\n x: item.x - (inRight ? LABEL_TEXT_LINE_OFFSET : -LABEL_TEXT_LINE_OFFSET),\n y: item.y\n };\n var inflectionPoint = graphics_1.polarToCartesian(center.x, center.y, radius + INFLECTION_OFFSET, item.angle);\n var p1 = {\n x: startPoint.x,\n y: startPoint.y\n };\n var p2 = {\n x: inflectionPoint.x,\n y: inflectionPoint.y\n };\n var endPoint = graphics_1.polarToCartesian(center.x, center.y, radius, item.angle);\n var path = ''; // 文本被调整下去了,则添加拐点连接线\n\n if (startPoint.y !== inflectionPoint.y) {\n var offset = inRight ? 4 : -4;\n p1.y = startPoint.y;\n /** 是否在第一象限 */\n\n if (item.angle < 0 && item.angle >= -Math.PI / 2) {\n p1.x = Math.max(inflectionPoint.x, startPoint.x - offset);\n\n if (startPoint.y < inflectionPoint.y) {\n p2.y = p1.y;\n } else {\n p2.y = inflectionPoint.y;\n p2.x = Math.max(p2.x, p1.x - offset);\n }\n }\n /** 是否在 第二象限 */\n\n\n if (item.angle > 0 && item.angle < Math.PI / 2) {\n p1.x = Math.max(inflectionPoint.x, startPoint.x - offset);\n\n if (startPoint.y > inflectionPoint.y) {\n p2.y = p1.y;\n } else {\n p2.y = inflectionPoint.y;\n p2.x = Math.max(p2.x, p1.x - offset);\n }\n }\n /** 是否在 第三象限 */\n\n\n if (item.angle > Math.PI / 2) {\n p1.x = Math.min(inflectionPoint.x, startPoint.x - offset);\n\n if (startPoint.y > inflectionPoint.y) {\n p2.y = p1.y;\n } else {\n p2.y = inflectionPoint.y;\n p2.x = Math.min(p2.x, p1.x - offset);\n }\n }\n /** 是否在 第四象限 */\n\n\n if (item.angle < -Math.PI / 2) {\n p1.x = Math.min(inflectionPoint.x, startPoint.x - offset);\n\n if (startPoint.y < inflectionPoint.y) {\n p2.y = p1.y;\n } else {\n p2.y = inflectionPoint.y;\n p2.x = Math.min(p2.x, p1.x - offset);\n }\n }\n }\n\n path = [\"M \" + startPoint.x + \",\" + startPoint.y, \"L \" + p1.x + \",\" + p1.y, \"L \" + p2.x + \",\" + p2.y, \"L \" + inflectionPoint.x + \",\" + inflectionPoint.y, \"L \" + endPoint.x + \",\" + endPoint.y].join(' ');\n item.labelLine = util_1.deepMix({}, item.labelLine, {\n path: path\n });\n}\n/**\n * 饼图标签 spider 布局, 只适用于 pie-spider 的标签类型\n * region 应该是 labelsRenderer 容器的范围限制(便于后续组件间布局)\n */\n\n\nfunction pieSpiderLabelLayout(items, labels, shapes, region) {\n /** 坐标系 */\n var coordinate = labels[0] && labels[0].get('coordinate');\n\n if (!coordinate) {\n return;\n }\n /** 坐标圆心 */\n\n\n var center = coordinate.getCenter();\n /** 圆半径 */\n\n var radius = coordinate.getRadius();\n /** label shapes */\n\n var labelsMap = {};\n\n for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {\n var labelShape = labels_1[_i];\n labelsMap[labelShape.get('id')] = labelShape;\n }\n\n var labelHeight = util_1.get(items[0], 'labelHeight', 14);\n var labelOffset = Math.max(util_1.get(items[0], 'offset', 0), INFLECTION_OFFSET); // step 1: adjust items to spider\n\n util_1.each(items, function (item) {\n var label = util_1.get(labelsMap, item.id);\n\n if (!label) {\n return;\n }\n\n var inRight = item.x > center.x || item.x === center.x && item.y > center.y;\n var offsetX = !util_1.isNil(item.offsetX) ? item.offsetX : LABEL_OFFSET_X;\n var inflectionPoint = graphics_1.polarToCartesian(center.x, center.y, radius + INFLECTION_OFFSET, item.angle);\n var totalOffset = labelOffset + offsetX;\n item.x = center.x + (inRight ? 1 : -1) * (radius + totalOffset);\n item.y = inflectionPoint.y;\n });\n var start = coordinate.start,\n end = coordinate.end;\n var LEFT_HALF_KEY = 'left';\n var RIGHT_HALF_KEY = 'right'; // step 1: separate labels\n\n var seperateLabels = util_1.groupBy(items, function (item) {\n return item.x < center.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY;\n }); // step2: calculate totalHeight\n\n var totalHeight = (radius + labelOffset) * 2 + labelHeight;\n util_1.each(seperateLabels, function (half) {\n var halfHeight = half.length * labelHeight;\n\n if (halfHeight > totalHeight) {\n totalHeight = Math.min(halfHeight, Math.abs(start.y - end.y));\n }\n });\n /** labels 容器的范围(后续根据组件的布局设计进行调整) */\n\n var labelsContainerRange = {\n minX: start.x,\n maxX: end.x,\n minY: center.y - totalHeight / 2,\n maxY: center.y + totalHeight / 2\n }; // step 3: antiCollision\n\n util_1.each(seperateLabels, function (half, key) {\n var maxLabelsCountForOneSide = totalHeight / labelHeight;\n\n if (half.length > maxLabelsCountForOneSide) {\n half.sort(function (a, b) {\n // sort by percentage DESC\n return b.percent - a.percent;\n });\n util_1.each(half, function (labelItem, idx) {\n if (idx > maxLabelsCountForOneSide) {\n labelsMap[labelItem.id].set('visible', false);\n labelItem.invisible = true;\n }\n });\n }\n\n util_2.antiCollision(half, labelHeight, labelsContainerRange);\n });\n var startY = labelsContainerRange.minY;\n var endY = labelsContainerRange.maxY; // step4: applyTo labels and adjust labelLines\n\n util_1.each(seperateLabels, function (half, key) {\n var inRight = key === RIGHT_HALF_KEY;\n util_1.each(half, function (item) {\n var label = util_1.get(labelsMap, item && item.id);\n\n if (!label) {\n return;\n } // out of range, hidden\n\n\n if (item.y < startY || item.y > endY) {\n label.set('visible', false);\n return;\n }\n\n var labelContent = label.getChildByIndex(0);\n var box = labelContent.getCanvasBBox();\n var originalPos = {\n x: inRight ? box.x : box.maxX,\n y: box.y + box.height / 2\n /** vertical-align: middle */\n\n };\n transform_1.translate(labelContent, item.x - originalPos.x\n /** 从 pos.x 移动到 item.x */\n , item.y - originalPos.y); // adjust labelLines\n\n if (item.labelLine) {\n drawLabelline(item, coordinate, inRight);\n }\n });\n });\n}\n\nexports.pieSpiderLabelLayout = pieSpiderLabelLayout;\n\n/***/ }),\n/* 954 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hideOverlap = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar collision_detect_1 = __webpack_require__(955);\n\nvar util_2 = __webpack_require__(114);\n/**\n * label 防遮挡布局:在不改变 label 位置的情况下对相互重叠的 label 进行隐藏(非移除)\n * 不同于 'overlap' 类型的布局,该布局不会对 label 的位置进行偏移调整。\n * @param labels 参与布局调整的 label 数组集合\n */\n\n\nfunction hideOverlap(items, labels, shapes, region) {\n // todo 添加 labelrank\n // each label will hide the next one because the next one always has lower rank.\n // Detect overlapping labels\n for (var i = 0; i < labels.length; i++) {\n var label1 = labels[i];\n\n if (labels[i].get('visible')) {\n for (var j = i + 1; j < labels.length; j++) {\n var label2 = labels[j];\n\n if (label1 && label2 && label1 !== label2 && label2.get('visible')) {\n var box1 = util_2.getlLabelBackgroundInfo(label1, items[i], util_1.get(items[i], 'background.padding'));\n var box2 = util_2.getlLabelBackgroundInfo(label2, items[j], util_1.get(items[j], 'background.padding'));\n\n if (collision_detect_1.isIntersect(box1, box2)) {\n labels[j].set('visible', false);\n }\n }\n }\n }\n }\n}\n\nexports.hideOverlap = hideOverlap;\n\n/***/ }),\n/* 955 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isIntersect = exports.isIntersectRect = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar matrix_util_1 = __webpack_require__(33);\n\nvar dot = matrix_util_1.vec2.dot;\n/**\n * @private\n * 1. 获取投影轴\n */\n\nfunction getAxes(points\n/** 多边形的关键点 */\n) {\n // 目前先处理 平行矩形 的场景, 其他多边形不处理\n if (points.length > 4) {\n return [];\n } // 获取向量\n\n\n var vector = function vector(start, end) {\n return [end.x - start.x, end.y - start.y];\n }; // 由于 矩形的平行原理,所以只有 2 条投影轴: A -> B, B -> C\n\n\n var AB = vector(points[0], points[1]);\n var BC = vector(points[1], points[2]);\n return [AB, BC];\n}\n/**\n * @private\n * 绕指定点顺时针旋转后的点坐标\n * 默认绕原点旋转\n */\n\n\nfunction rotateAtPoint(point, deg, origin) {\n if (deg === void 0) {\n deg = 0;\n }\n\n if (origin === void 0) {\n origin = {\n x: 0,\n y: 0\n };\n }\n\n var x = point.x,\n y = point.y;\n return {\n x: (x - origin.x) * Math.cos(-deg) + (y - origin.y) * Math.sin(-deg) + origin.x,\n y: (origin.x - x) * Math.sin(-deg) + (y - origin.y) * Math.cos(-deg) + origin.y\n };\n}\n/**\n * @private\n * 转化为顶点坐标数组\n *\n * @param {Object} box\n */\n\n\nfunction getRectPoints(box) {\n var points = [{\n x: box.x,\n y: box.y\n }, {\n x: box.x + box.width,\n y: box.y\n }, {\n x: box.x + box.width,\n y: box.y + box.height\n }, {\n x: box.x,\n y: box.y + box.height\n }];\n var rotation = box.rotation;\n\n if (rotation) {\n return [rotateAtPoint(points[0], rotation, points[0]), rotateAtPoint(points[1], rotation, points[0]), rotateAtPoint(points[2], rotation, points[0]), rotateAtPoint(points[3], rotation, points[0])];\n }\n\n return points;\n}\n/**\n * @private\n * 2. 获取多边形在投影轴上的投影\n *\n * 向量的点积的其中一个几何含义是:一个向量在平行于另一个向量方向上的投影的数值乘积。\n * 由于投影轴是单位向量(长度为1),投影的长度为 x1 * x2 + y1 * y2\n */\n\n\nfunction getProjection(points\n/** 多边形的关键点 */\n, axis) {\n // 目前先处理矩形的场景\n if (points.length > 4) {\n return {\n min: 0,\n max: 0\n };\n }\n\n var scalars = [];\n points.forEach(function (point) {\n scalars.push(dot([point.x, point.y], axis));\n });\n return {\n min: Math.min.apply(Math, scalars),\n max: Math.max.apply(Math, scalars)\n };\n}\n\nfunction isProjectionOverlap(projection1, projection2) {\n return projection1.max > projection2.min && projection1.min < projection2.max;\n}\n/**\n * 快速判断两个无旋转矩形是否遮挡\n */\n\n\nfunction isIntersectRect(box1, box2, margin) {\n if (margin === void 0) {\n margin = 0;\n }\n\n return !(box2.x > box1.x + box1.width + margin || box2.x + box2.width < box1.x - margin || box2.y > box1.y + box1.height + margin || box2.y + box2.height < box1.y - margin);\n}\n\nexports.isIntersectRect = isIntersectRect;\n/**\n * detect whether two shape is intersected, useful when shape is been rotated\n * 判断两个矩形是否重叠(相交和包含, 是否旋转)\n *\n * - 原理: 分离轴定律\n */\n\nfunction isIntersect(box1, box2) {\n // 如果两个矩形没有旋转,使用快速判断\n if (!box1.rotation && !box2.rotation) {\n return isIntersectRect(box1, box2);\n } // 分别获取 4 个关键点\n\n\n var rect1Points = getRectPoints(box1);\n var rect2Points = getRectPoints(box2); // 获取所有投影轴\n\n var axes = tslib_1.__spreadArrays(getAxes(rect1Points), getAxes(rect2Points));\n\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var projection1 = getProjection(rect1Points, axis);\n var projection2 = getProjection(rect2Points, axis); // 判断投影轴上的投影是否存在重叠,若检测到存在间隙则立刻退出判断,消除不必要的运算。\n\n if (!isProjectionOverlap(projection1, projection2)) return false;\n }\n\n return true;\n}\n\nexports.isIntersect = isIntersect;\n\n/***/ }),\n/* 956 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adjustColor = void 0;\n\nvar bbox_1 = __webpack_require__(77);\n\nvar color_1 = __webpack_require__(957);\n\nfunction adjustColor(items, labels, shapes) {\n if (shapes.length === 0) {\n return;\n }\n\n var element = shapes[0].get('element');\n var theme = element.geometry.theme;\n\n var _a = theme.labels || {},\n fillColorLight = _a.fillColorLight,\n fillColorDark = _a.fillColorDark;\n\n shapes.forEach(function (shape, index) {\n var label = labels[index];\n var textShape = label.find(function (el) {\n return el.get('type') === 'text';\n });\n var shapeBBox = bbox_1.BBox.fromObject(shape.getBBox());\n var textBBox = bbox_1.BBox.fromObject(textShape.getCanvasBBox());\n var overflow = !shapeBBox.contains(textBBox);\n var bgColor = shape.attr('fill');\n var fillWhite = color_1.isContrastColorWhite(bgColor);\n\n if (!overflow) {\n if (fillWhite) {\n if (fillColorLight) {\n textShape.attr('fill', fillColorLight);\n }\n } else {\n if (fillColorDark) {\n textShape.attr('fill', fillColorDark);\n }\n }\n } else {\n // 出现溢出直接应用 overflowLabel 样式\n textShape.attr(theme.overflowLabels.style);\n }\n });\n}\n\nexports.adjustColor = adjustColor;\n\n/***/ }),\n/* 957 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isContrastColorWhite = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar color_util_1 = tslib_1.__importDefault(__webpack_require__(179)); // 内置的一些特殊设置\n\n\nvar preset = {\n '#5B8FF9': true\n}; // 根据YIQ亮度判断指定颜色取反色是不是白色\n// http://24ways.org/2010/calculating-color-contrast\n// http://www.w3.org/TR/AERT#color-contrast\n\nexports.isContrastColorWhite = function (color) {\n var rgb = color_util_1.default.toRGB(color).toUpperCase();\n\n if (preset[rgb]) {\n return preset[rgb];\n }\n\n var _a = color_util_1.default.rgb2arr(rgb),\n r = _a[0],\n g = _a[1],\n b = _a[2];\n\n var isDark = (r * 299 + g * 587 + b * 114) / 1000 < 128;\n return isDark;\n};\n\n/***/ }),\n/* 958 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.intervalAdjustPosition = void 0;\n\nvar bbox_1 = __webpack_require__(77);\n\nvar util_1 = __webpack_require__(114);\n\nfunction shouldInShapeSingle(geometry, label, shape) {\n var coordinate = geometry.coordinate;\n var textShape = util_1.findLabelTextShape(label);\n var textBBox = bbox_1.BBox.fromObject(textShape.getCanvasBBox());\n var shapeBBox = bbox_1.BBox.fromObject(shape.getBBox());\n return coordinate.isTransposed ? shapeBBox.height >= textBBox.height : shapeBBox.width >= textBBox.width;\n}\n\nfunction shouldInShape(geometry, labels, shapes) {\n var isStack = !!geometry.getAdjust('stack');\n return isStack || labels.every(function (label, index) {\n var shape = shapes[index];\n return shouldInShapeSingle(geometry, label, shape);\n });\n}\n\nfunction moveInShape(geometry, label, shape) {\n var coordinate = geometry.coordinate;\n var shapeBBox = bbox_1.BBox.fromObject(shape.getBBox());\n var textShape = util_1.findLabelTextShape(label);\n\n if (coordinate.isTransposed) {\n // 水平方向:条形图系列\n textShape.attr({\n x: shapeBBox.minX + shapeBBox.width / 2,\n textAlign: 'center'\n });\n } else {\n // 垂直方向:柱形图系列\n textShape.attr({\n y: shapeBBox.minY + shapeBBox.height / 2,\n textBaseline: 'middle'\n });\n }\n}\n/**\n * 适用于 interval geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n */\n\n\nfunction intervalAdjustPosition(items, labels, shapes) {\n var _a;\n\n if (shapes.length === 0) {\n return;\n }\n\n var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n\n if (!geometry || geometry.type !== 'interval') {\n return;\n }\n\n var inShape = shouldInShape(geometry, labels, shapes);\n\n if (inShape) {\n shapes.forEach(function (shape, index) {\n var label = labels[index];\n moveInShape(geometry, label, shape);\n });\n }\n}\n\nexports.intervalAdjustPosition = intervalAdjustPosition;\n\n/***/ }),\n/* 959 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.intervalHideOverlap = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(114);\n\nfunction filterLabel(labels) {\n var MAX_CNT = 500; // 最多显示 500 个数据标签\n\n var filteredLabels = [];\n var pages = Math.max(Math.floor(labels.length / MAX_CNT), 1);\n util_1.each(labels, function (label, idx) {\n if (idx % pages === 0) {\n filteredLabels.push(label);\n } else {\n label.set('visible', false);\n }\n });\n return filteredLabels;\n}\n/**\n * 为 interval geometry 定制的数据标签重叠自动隐藏布局方法\n * @param items\n * @param labels\n * @param shapes\n */\n\n\nfunction intervalHideOverlap(items, labels, shapes) {\n var _a;\n\n if (shapes.length === 0) {\n return;\n }\n\n var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n\n if (!geometry || geometry.type !== 'interval') {\n return;\n }\n\n var filteredLabels = filterLabel(labels);\n var xField = geometry.getXYFields()[0];\n var dones = [];\n var todo = [];\n var groupedLabels = util_1.groupBy(filteredLabels, function (label) {\n return label.get('data')[xField];\n });\n var xValues = util_1.uniq(util_1.map(filteredLabels, function (label) {\n return label.get('data')[xField];\n }));\n var xValue;\n filteredLabels.forEach(function (label) {\n label.set('visible', true);\n });\n\n var addCurrentGroup = function addCurrentGroup(curItems) {\n if (curItems) {\n if (curItems.length) {\n // 最后一个\n todo.push(curItems.pop());\n }\n\n todo.push.apply(todo, curItems);\n }\n };\n\n if (util_1.size(xValues) > 0) {\n // 第一组\n xValue = xValues.shift();\n addCurrentGroup(groupedLabels[xValue]);\n }\n\n if (util_1.size(xValues) > 0) {\n // 最后一组\n xValue = xValues.pop();\n addCurrentGroup(groupedLabels[xValue]);\n }\n\n util_1.each(xValues.reverse(), function (val) {\n // 其他组\n addCurrentGroup(groupedLabels[val]);\n });\n\n while (todo.length > 0) {\n var cur = todo.shift();\n\n if (cur.get('visible')) {\n if (util_2.checkShapeOverlap(cur, dones)) {\n cur.set('visible', false);\n } else {\n dones.push(cur);\n }\n }\n }\n}\n\nexports.intervalHideOverlap = intervalHideOverlap;\n\n/***/ }),\n/* 960 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pointAdjustPosition = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(114);\n/**\n * 对同一组(相同 xField )的 Label 进行排序:第一个、最后一个、其他...\n * @param geometry\n * @param labels\n */\n\n\nfunction sortLabels(geometry, labels) {\n var yField = geometry.getXYFields()[1];\n var result = [];\n var sortedLabels = labels.sort(function (left, right) {\n return left.get('data')[yField] - left.get('data')[yField];\n });\n\n if (sortedLabels.length > 0) {\n result.push(sortedLabels.shift());\n }\n\n if (sortedLabels.length > 0) {\n result.push(sortedLabels.pop());\n }\n\n result.push.apply(result, sortedLabels);\n return result;\n}\n\nfunction hasSome(dones, current, compare) {\n return dones.some(function (done) {\n return compare(done, current);\n });\n}\n/**\n * 计算两个矩形之间的堆叠区域面积\n */\n\n\nfunction getOverlapArea(a, b, margin) {\n if (margin === void 0) {\n margin = 0;\n }\n\n var xOverlap = Math.max(0, Math.min(a.x + a.width + margin, b.x + b.width + margin) - Math.max(a.x - margin, b.x - margin));\n var yOverlap = Math.max(0, Math.min(a.y + a.height + margin, b.y + b.height + margin) - Math.max(a.y - margin, b.y - margin));\n return xOverlap * yOverlap;\n}\n/**\n * 判断新添加的 Label 是否和已存在的发生重叠\n * @param dones\n * @param current\n */\n\n\nfunction checkShapeOverlap(dones, current) {\n return hasSome(dones, current, function (left, right) {\n var leftText = util_2.findLabelTextShape(left);\n var rightText = util_2.findLabelTextShape(right);\n return getOverlapArea(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0;\n });\n}\n/**\n * 适用于 point geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n * @param region\n * @param cfg\n */\n\n\nfunction pointAdjustPosition(items, labels, shapes, region, cfg) {\n var _a, _b;\n\n if (shapes.length === 0) {\n return;\n }\n\n var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n\n if (!geometry || geometry.type !== 'point') {\n return;\n }\n\n var _c = geometry.getXYFields(),\n xField = _c[0],\n yField = _c[1];\n\n var groupedLabels = util_1.groupBy(labels, function (label) {\n return label.get('data')[xField];\n });\n var dones = [];\n var offset = cfg && cfg.offset || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12;\n util_1.map(util_1.keys(groupedLabels).reverse(), function (xValue) {\n var sortedCollections = sortLabels(geometry, groupedLabels[xValue]);\n\n while (sortedCollections.length) {\n var current = sortedCollections.shift();\n var textShape = util_2.findLabelTextShape(current);\n\n if (hasSome(dones, current, function (left, right) {\n return left.get('data')[xField] === right.get('data')[xField] && left.get('data')[yField] === right.get('data')[yField];\n })) {\n // 重复位置,直接隐藏\n textShape.set('visible', false);\n continue;\n }\n\n var upFail = checkShapeOverlap(dones, current);\n var downFail = false;\n\n if (upFail) {\n textShape.attr('y', textShape.attr('y') + 2 * offset);\n downFail = checkShapeOverlap(dones, current);\n }\n\n if (downFail) {\n textShape.set('visible', false);\n continue;\n }\n\n dones.push(current);\n }\n });\n}\n\nexports.pointAdjustPosition = pointAdjustPosition;\n\n/***/ }),\n/* 961 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pathAdjustPosition = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(114);\n/**\n * 对同一组(相同 xField )的 Label 进行排序:第一个、最后一个、其他...\n * @param geometry\n * @param labels\n */\n\n\nfunction sortLabels(geometry, labels) {\n var yField = geometry.getXYFields()[1];\n var result = [];\n var sortedLabels = labels.sort(function (left, right) {\n return left.get('data')[yField] - left.get('data')[yField];\n });\n\n if (sortedLabels.length > 0) {\n result.push(sortedLabels.shift());\n }\n\n if (sortedLabels.length > 0) {\n result.push(sortedLabels.pop());\n }\n\n result.push.apply(result, sortedLabels);\n return result;\n}\n\nfunction hasSome(dones, current, compare) {\n return dones.some(function (done) {\n return compare(done, current);\n });\n}\n/**\n * 计算两个矩形之间的堆叠区域面积\n */\n\n\nfunction getOverlapArea(a, b, margin) {\n if (margin === void 0) {\n margin = 0;\n }\n\n var xOverlap = Math.max(0, Math.min(a.x + a.width + margin, b.x + b.width + margin) - Math.max(a.x - margin, b.x - margin));\n var yOverlap = Math.max(0, Math.min(a.y + a.height + margin, b.y + b.height + margin) - Math.max(a.y - margin, b.y - margin));\n return xOverlap * yOverlap;\n}\n/**\n * 判断新添加的 Label 是否和已存在的发生重叠\n * @param dones\n * @param current\n */\n\n\nfunction checkShapeOverlap(dones, current) {\n return hasSome(dones, current, function (left, right) {\n var leftText = util_2.findLabelTextShape(left);\n var rightText = util_2.findLabelTextShape(right);\n return getOverlapArea(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0;\n });\n}\n/**\n * 适用于 point geometry 的数据标签位置自动调整布局方法\n * @param items\n * @param labels\n * @param shapes\n * @param region\n * @param cfg\n */\n\n\nfunction pathAdjustPosition(items, labels, shapes, region, cfg) {\n var _a, _b;\n\n if (shapes.length === 0) {\n return;\n }\n\n var element = (_a = shapes[0]) === null || _a === void 0 ? void 0 : _a.get('element');\n var geometry = element === null || element === void 0 ? void 0 : element.geometry;\n\n if (!geometry || ['path', 'line', 'area'].indexOf(geometry.type) < 0) {\n return;\n }\n\n var _c = geometry.getXYFields(),\n xField = _c[0],\n yField = _c[1];\n\n var groupedLabels = util_1.groupBy(labels, function (label) {\n return label.get('data')[xField];\n });\n var dones = [];\n var offset = cfg && cfg.offset || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12;\n util_1.map(util_1.keys(groupedLabels).reverse(), function (xValue) {\n var sortedCollections = sortLabels(geometry, groupedLabels[xValue]);\n\n while (sortedCollections.length) {\n var current = sortedCollections.shift();\n var textShape = util_2.findLabelTextShape(current);\n\n if (hasSome(dones, current, function (left, right) {\n return left.get('data')[xField] === right.get('data')[xField] && left.get('data')[yField] === right.get('data')[yField];\n })) {\n // 重复位置,直接隐藏\n textShape.set('visible', false);\n continue;\n }\n\n var upFail = checkShapeOverlap(dones, current);\n var downFail = false;\n\n if (upFail) {\n textShape.attr('y', textShape.attr('y') + 2 * offset);\n downFail = checkShapeOverlap(dones, current);\n }\n\n if (downFail) {\n textShape.set('visible', false);\n continue;\n }\n\n dones.push(current);\n }\n });\n}\n\nexports.pathAdjustPosition = pathAdjustPosition;\n\n/***/ }),\n/* 962 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.limitInPlot = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar coordinate_1 = __webpack_require__(51);\n\nvar text_1 = __webpack_require__(963);\n\nvar transform_1 = __webpack_require__(115);\n/**\n * @ignore\n * 将 label 限制在 Plot 范围内,将超出 Plot 范围的 label 可选择进行隐藏或者移动位置\n * @param labels\n * @param cfg\n */\n\n\nfunction limitInPlot(items, labels, shapes, region, cfg) {\n if (labels.length <= 0) {\n return;\n }\n\n var direction = (cfg === null || cfg === void 0 ? void 0 : cfg.direction) || ['top', 'right', 'bottom', 'left'];\n var action = (cfg === null || cfg === void 0 ? void 0 : cfg.action) || 'translate';\n var margin = (cfg === null || cfg === void 0 ? void 0 : cfg.margin) || 0;\n var coordinate = labels[0].get('coordinate');\n\n if (!coordinate) {\n return;\n }\n\n var _a = coordinate_1.getCoordinateBBox(coordinate, margin),\n regionMinX = _a.minX,\n regionMinY = _a.minY,\n regionMaxX = _a.maxX,\n regionMaxY = _a.maxY;\n\n util_1.each(labels, function (label) {\n var _a = label.getCanvasBBox(),\n minX = _a.minX,\n minY = _a.minY,\n maxX = _a.maxX,\n maxY = _a.maxY,\n x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height;\n\n var finalX = x;\n var finalY = y;\n\n if (direction.indexOf('left') >= 0 && (minX < regionMinX || maxX < regionMinX)) {\n // 超出左侧\n finalX = regionMinX;\n }\n\n if (direction.indexOf('top') >= 0 && (minY < regionMinY || maxY < regionMinY)) {\n // 超出顶部\n finalY = regionMinY;\n }\n\n if (direction.indexOf('right') >= 0) {\n if (minX > regionMaxX) {\n // 整体超出右侧\n finalX = regionMaxX - width;\n } else if (maxX > regionMaxX) {\n // 超出右侧\n finalX = finalX - (maxX - regionMaxX);\n }\n }\n\n if (direction.indexOf('bottom') >= 0) {\n if (minY > regionMaxY) {\n // 整体超出底部\n finalY = regionMaxY - height;\n } else if (maxY > regionMaxY) {\n // 超出底部\n finalY = finalY - (maxY - regionMaxY);\n }\n }\n\n if (finalX !== x || finalY !== y) {\n var translateX_1 = finalX - x;\n\n if (action === 'translate') {\n transform_1.translate(label, translateX_1, finalY - y);\n } else if (action === 'ellipsis') {\n var textShapes = label.findAll(function (shape) {\n return shape.get('type') === 'text';\n });\n textShapes.forEach(function (textShape) {\n var style = util_1.pick(textShape.attr(), ['fontSize', 'fontFamily', 'fontWeight', 'fontStyle', 'fontVariant']);\n var textBox = textShape.getCanvasBBox();\n var text = text_1.getEllipsisText(textShape.attr('text'), textBox.width - Math.abs(translateX_1), style);\n textShape.attr('text', text);\n });\n } else {\n label.hide();\n }\n }\n });\n}\n\nexports.limitInPlot = limitInPlot;\n\n/***/ }),\n/* 963 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getEllipsisText = exports.measureTextWidth = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar context_1 = __webpack_require__(964);\n/**\n * 计算文本在画布中的宽度\n */\n\n\nexports.measureTextWidth = util_1.memoize(function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n var fontSize = font.fontSize,\n fontFamily = font.fontFamily,\n fontWeight = font.fontWeight,\n fontStyle = font.fontStyle,\n fontVariant = font.fontVariant;\n var ctx = context_1.getCanvasContext();\n ctx.font = [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ');\n return ctx.measureText(util_1.isString(text) ? text : '').width;\n}, function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n return tslib_1.__spreadArrays([text], util_1.values(font)).join('');\n});\n/**\n * 获取文本的 ... 文本。\n * 算法(减少每次 measureText 的长度,measureText 的性能跟字符串时间相关):\n * 1. 先通过 STEP 逐步计算,找到最后一个小于 maxWidth 的字符串\n * 2. 然后对最后这个字符串二分计算\n * @param text 需要计算的文本, 由于历史原因 除了支持string,还支持空值,number和数组等\n * @param maxWidth\n * @param font\n */\n\nexports.getEllipsisText = function (text, maxWidth, font) {\n var STEP = 16; // 每次 16,调参工程师\n\n var DOT_WIDTH = exports.measureTextWidth('...', font);\n var leftText;\n\n if (!util_1.isString(text)) {\n leftText = util_1.toString(text);\n } else {\n leftText = text;\n }\n\n var leftWidth = maxWidth;\n var r = []; // 最终的分段字符串\n\n var currentText;\n var currentWidth;\n\n if (exports.measureTextWidth(text, font) <= maxWidth) {\n return text;\n } // 首先通过 step 计算,找出最大的未超出长度的\n\n\n while (true) {\n // 更新字符串\n currentText = leftText.substr(0, STEP); // 计算宽度\n\n currentWidth = exports.measureTextWidth(currentText, font); // 超出剩余宽度,则停止\n\n if (currentWidth + DOT_WIDTH > leftWidth) {\n if (currentWidth > leftWidth) {\n break;\n }\n }\n\n r.push(currentText); // 没有超出,则计算剩余宽度\n\n leftWidth -= currentWidth;\n leftText = leftText.substr(STEP); // 字符串整体没有超出\n\n if (!leftText) {\n return r.join('');\n }\n } // 最下的最后一个 STEP,使用 1 递增(用二分效果更高)\n\n\n while (true) {\n // 更新字符串\n currentText = leftText.substr(0, 1); // 计算宽度\n\n currentWidth = exports.measureTextWidth(currentText, font); // 超出剩余宽度,则停止\n\n if (currentWidth + DOT_WIDTH > leftWidth) {\n break;\n }\n\n r.push(currentText); // 没有超出,则计算剩余宽度\n\n leftWidth -= currentWidth;\n leftText = leftText.substr(1);\n\n if (!leftText) {\n return r.join('');\n }\n }\n\n return r.join('') + \"...\";\n};\n\n/***/ }),\n/* 964 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getCanvasContext = void 0;\nvar ctx;\n/**\n * 获取 canvas context\n */\n\nfunction getCanvasContext() {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n\n return ctx;\n}\n\nexports.getCanvasContext = getCanvasContext;\n\n/***/ }),\n/* 965 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.showGrid = exports.getCircleGridItems = exports.getLineGridItems = exports.getGridThemeCfg = void 0;\n\nvar util_1 = __webpack_require__(0);\n/**\n * @ignore\n * get the grid theme by type\n * @param theme\n * @param direction\n * @returns theme object\n */\n\n\nfunction getGridThemeCfg(theme, direction) {\n return util_1.get(theme, ['components', 'axis', direction, 'grid'], {});\n}\n\nexports.getGridThemeCfg = getGridThemeCfg;\n/**\n * @ignore\n * get axis grid items\n * @param coordinate\n * @param scale\n * @param dim\n * @return items\n */\n\nfunction getLineGridItems(coordinate, scale, dim, alignTick) {\n var items = [];\n var ticks = scale.getTicks();\n\n if (coordinate.isPolar) {\n // 补全 ticks\n ticks.push({\n value: 1,\n text: '',\n tickValue: ''\n });\n }\n\n ticks.reduce(function (preTick, currentTick, currentIndex) {\n var currentValue = currentTick.value;\n\n if (alignTick) {\n items.push({\n points: [coordinate.convert(dim === 'y' ? {\n x: 0,\n y: currentValue\n } : {\n x: currentValue,\n y: 0\n }), coordinate.convert(dim === 'y' ? {\n x: 1,\n y: currentValue\n } : {\n x: currentValue,\n y: 1\n })]\n });\n } else {\n if (currentIndex) {\n var preValue = preTick.value;\n var middleValue = (preValue + currentValue) / 2;\n items.push({\n points: [coordinate.convert(dim === 'y' ? {\n x: 0,\n y: middleValue\n } : {\n x: middleValue,\n y: 0\n }), coordinate.convert(dim === 'y' ? {\n x: 1,\n y: middleValue\n } : {\n x: middleValue,\n y: 1\n })]\n });\n }\n }\n\n return currentTick;\n }, ticks[0]);\n return items;\n}\n\nexports.getLineGridItems = getLineGridItems;\n/**\n * @ignore\n * get\n * @param coordinate\n * @param xScale\n * @param yScale\n * @param dim\n * @returns items\n */\n\nfunction getCircleGridItems(coordinate, xScale, yScale, alignTick, dim) {\n var count = xScale.values.length;\n var items = [];\n var ticks = yScale.getTicks();\n ticks.reduce(function (preTick, currentTick) {\n var preValue = preTick ? preTick.value : currentTick.value; // 只有一项数据时取当前值\n\n var currentValue = currentTick.value;\n var middleValue = (preValue + currentValue) / 2;\n\n if (dim === 'x') {\n // 如果是 x 轴作为半径轴,那么只需要取圆弧收尾两个即可\n items.push({\n points: [coordinate.convert({\n x: alignTick ? currentValue : middleValue,\n y: 0\n }), coordinate.convert({\n x: alignTick ? currentValue : middleValue,\n y: 1\n })]\n });\n } else {\n items.push({\n points: util_1.map(Array(count + 1), function (__, idx) {\n return coordinate.convert({\n x: idx / count,\n y: alignTick ? currentValue : middleValue\n });\n })\n });\n }\n\n return currentTick;\n }, ticks[0]);\n return items;\n}\n\nexports.getCircleGridItems = getCircleGridItems;\n/**\n * @ignore\n * show grid or not\n * @param axisTheme\n * @param axisOption\n */\n\nfunction showGrid(axisTheme, axisOption) {\n var userGrid = util_1.get(axisOption, 'grid');\n\n if (userGrid === null) {\n return false;\n }\n\n var themeGrid = util_1.get(axisTheme, 'grid');\n return !(userGrid === undefined && themeGrid === null);\n}\n\nexports.showGrid = showGrid;\n\n/***/ }),\n/* 966 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = __webpack_require__(105);\n\nvar dependents_1 = __webpack_require__(68);\n\nvar bbox_1 = __webpack_require__(77);\n\nvar direction_1 = __webpack_require__(283);\n\nvar constant_1 = __webpack_require__(20);\n\nvar util_1 = __webpack_require__(0);\n\nvar helper_1 = __webpack_require__(69);\n\nvar DEFAULT_PADDING = 0;\nvar DEFAULT_SIZE = 8;\nvar DEFAULT_CATEGORY_SIZE = 32;\nvar MIN_THUMB_LENGTH = 20;\n\nvar Scrollbar =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Scrollbar, _super);\n\n function Scrollbar(view) {\n var _this = _super.call(this, view) || this;\n\n _this.onChangeFn = util_1.noop;\n\n _this.resetMeasure = function () {\n _this.clear();\n };\n\n _this.onValueChange = function (_a) {\n var ratio = _a.ratio;\n\n var animate = _this.getValidScrollbarCfg().animate;\n\n _this.ratio = util_1.clamp(ratio, 0, 1);\n\n var originalAnimate = _this.view.getOptions().animate;\n\n if (!animate) {\n _this.view.animate(false);\n }\n\n _this.changeViewData(_this.getScrollRange(), true);\n\n _this.view.animate(originalAnimate);\n };\n\n _this.container = _this.view.getLayer(constant_1.LAYER.FORE).addGroup();\n _this.onChangeFn = util_1.throttle(_this.onValueChange, 20, {\n leading: true\n });\n _this.trackLen = 0;\n _this.thumbLen = 0;\n _this.ratio = 0;\n\n _this.view.on(constant_1.VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, _this.resetMeasure);\n\n _this.view.on(constant_1.VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, _this.resetMeasure);\n\n return _this;\n }\n\n Object.defineProperty(Scrollbar.prototype, \"name\", {\n get: function get() {\n return 'scrollbar';\n },\n enumerable: false,\n configurable: true\n });\n\n Scrollbar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this.view.off(constant_1.VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, this.resetMeasure);\n this.view.off(constant_1.VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, this.resetMeasure);\n };\n\n Scrollbar.prototype.init = function () {};\n /**\n * 渲染\n */\n\n\n Scrollbar.prototype.render = function () {\n this.option = this.view.getOptions().scrollbar;\n\n if (this.option) {\n if (this.scrollbar) {\n // exist, update\n this.scrollbar = this.updateScrollbar();\n } else {\n // not exist, create\n this.scrollbar = this.createScrollbar();\n this.scrollbar.component.on('scrollchange', this.onChangeFn);\n }\n } else {\n if (this.scrollbar) {\n // exist, destroy\n this.scrollbar.component.destroy();\n this.scrollbar = undefined;\n }\n }\n };\n /**\n * 布局\n */\n\n\n Scrollbar.prototype.layout = function () {\n var _this = this;\n\n if (this.option && !this.trackLen) {\n this.measureScrollbar();\n setTimeout(function () {\n if (!_this.view.destroyed) {\n _this.changeViewData(_this.getScrollRange(), true);\n }\n });\n }\n\n if (this.scrollbar) {\n var width = this.view.coordinateBBox.width;\n var padding = this.scrollbar.component.get('padding');\n var bboxObject = this.scrollbar.component.getLayoutBBox();\n var bbox = new bbox_1.BBox(bboxObject.x, bboxObject.y, Math.min(bboxObject.width, width), bboxObject.height).expand(padding);\n var cfg = this.getScrollbarComponentCfg();\n var x = void 0;\n var y = void 0;\n\n if (cfg.isHorizontal) {\n var _a = direction_1.directionToPosition(this.view.viewBBox, bbox, constant_1.DIRECTION.BOTTOM),\n x1 = _a[0],\n y1 = _a[1];\n\n var _b = direction_1.directionToPosition(this.view.coordinateBBox, bbox, constant_1.DIRECTION.BOTTOM),\n x2 = _b[0],\n y2 = _b[1];\n\n x = x2;\n y = y1;\n } else {\n var _c = direction_1.directionToPosition(this.view.viewBBox, bbox, constant_1.DIRECTION.RIGHT),\n x1 = _c[0],\n y1 = _c[1];\n\n var _d = direction_1.directionToPosition(this.view.viewBBox, bbox, constant_1.DIRECTION.RIGHT),\n x2 = _d[0],\n y2 = _d[1];\n\n x = x2;\n y = y1;\n }\n\n x += padding[3];\n y += padding[0]; // 默认放在 bottom\n\n if (this.trackLen) {\n this.scrollbar.component.update(tslib_1.__assign(tslib_1.__assign({}, cfg), {\n x: x,\n y: y,\n trackLen: this.trackLen,\n thumbLen: this.thumbLen,\n thumbOffset: (this.trackLen - this.thumbLen) * this.ratio\n }));\n } else {\n this.scrollbar.component.update(tslib_1.__assign(tslib_1.__assign({}, cfg), {\n x: x,\n y: y\n }));\n }\n\n this.view.viewBBox = this.view.viewBBox.cut(bbox, cfg.isHorizontal ? constant_1.DIRECTION.BOTTOM : constant_1.DIRECTION.RIGHT);\n }\n };\n /**\n * 更新\n */\n\n\n Scrollbar.prototype.update = function () {\n // 逻辑和 render 保持一致\n this.render();\n };\n\n Scrollbar.prototype.getComponents = function () {\n return this.scrollbar ? [this.scrollbar] : [];\n };\n\n Scrollbar.prototype.clear = function () {\n if (this.scrollbar) {\n this.scrollbar.component.destroy();\n this.scrollbar = undefined;\n }\n\n this.trackLen = 0;\n this.thumbLen = 0;\n this.ratio = 0;\n this.cnt = 0;\n this.step = 0;\n this.data = undefined;\n this.xScaleCfg = undefined;\n this.yScalesCfg = [];\n };\n /**\n * 获取 scrollbar 的主题配置\n */\n\n\n Scrollbar.prototype.getThemeOptions = function () {\n var theme = this.view.getTheme();\n return util_1.get(theme, ['components', 'slider', 'common'], {});\n };\n\n Scrollbar.prototype.measureScrollbar = function () {\n var xScale = this.view.getXScale();\n var yScales = this.view.getYScales().slice();\n this.data = this.view.getOptions().data;\n this.step = this.getStep();\n this.cnt = this.getCnt();\n\n var _a = this.getScrollbarComponentCfg(),\n trackLen = _a.trackLen,\n thumbLen = _a.thumbLen;\n\n this.trackLen = trackLen;\n this.thumbLen = thumbLen;\n this.xScaleCfg = {\n field: xScale.field,\n values: xScale.values || []\n };\n this.yScalesCfg = yScales;\n };\n\n Scrollbar.prototype.getScrollRange = function () {\n var startIdx = Math.floor((this.cnt - this.step) * util_1.clamp(this.ratio, 0, 1));\n var endIdx = Math.min(startIdx + this.step - 1, this.cnt - 1);\n return [startIdx, endIdx];\n };\n\n Scrollbar.prototype.changeViewData = function (_a, render) {\n var _this = this;\n\n var startIdx = _a[0],\n endIdx = _a[1];\n var type = this.getValidScrollbarCfg().type;\n var isHorizontal = type !== 'vertical';\n var values = util_1.valuesOfKey(this.data, this.xScaleCfg.field);\n var xValues = isHorizontal ? values : values.reverse();\n this.yScalesCfg.forEach(function (cfg) {\n _this.view.scale(cfg.field, {\n formatter: cfg.formatter,\n type: cfg.type,\n min: cfg.min,\n max: cfg.max\n });\n });\n this.view.filter(this.xScaleCfg.field, function (val) {\n var idx = xValues.indexOf(val);\n return idx > -1 ? helper_1.isBetween(idx, startIdx, endIdx) : true;\n });\n this.view.render(true);\n };\n\n Scrollbar.prototype.createScrollbar = function () {\n var type = this.getValidScrollbarCfg().type;\n var isHorizontal = type !== 'vertical';\n var component = new dependents_1.Scrollbar(tslib_1.__assign(tslib_1.__assign({\n container: this.container\n }, this.getScrollbarComponentCfg()), {\n x: 0,\n y: 0\n }));\n component.init();\n return {\n component: component,\n layer: constant_1.LAYER.FORE,\n direction: isHorizontal ? constant_1.DIRECTION.BOTTOM : constant_1.DIRECTION.RIGHT,\n type: constant_1.COMPONENT_TYPE.SCROLLBAR\n };\n };\n\n Scrollbar.prototype.updateScrollbar = function () {\n var config = this.getScrollbarComponentCfg();\n var realConfig = this.trackLen ? tslib_1.__assign(tslib_1.__assign({}, config), {\n trackLen: this.trackLen,\n thumbLen: this.thumbLen,\n thumbOffset: (this.trackLen - this.thumbLen) * this.ratio\n }) : tslib_1.__assign({}, config);\n this.scrollbar.component.update(realConfig);\n return this.scrollbar;\n };\n\n Scrollbar.prototype.getStep = function () {\n if (this.step) {\n return this.step;\n }\n\n var coordinateBBox = this.view.coordinateBBox;\n\n var _a = this.getValidScrollbarCfg(),\n type = _a.type,\n categorySize = _a.categorySize;\n\n var isHorizontal = type !== 'vertical';\n return Math.floor((isHorizontal ? coordinateBBox.width : coordinateBBox.height) / categorySize);\n };\n\n Scrollbar.prototype.getCnt = function () {\n if (this.cnt) {\n return this.cnt;\n }\n\n var xScale = this.view.getXScale();\n var data = this.view.getOptions().data;\n var values = util_1.valuesOfKey(data, xScale.field);\n return util_1.size(values);\n };\n\n Scrollbar.prototype.getScrollbarComponentCfg = function () {\n var _a = this.view,\n coordinateBBox = _a.coordinateBBox,\n viewBBox = _a.viewBBox;\n var xScale = this.view.getXScale();\n\n var _b = this.getValidScrollbarCfg(),\n type = _b.type,\n padding = _b.padding,\n width = _b.width,\n height = _b.height;\n\n var isHorizontal = type !== 'vertical';\n var paddingTop = padding[0],\n paddingRight = padding[1],\n paddingBottom = padding[2],\n paddingLeft = padding[3];\n var position = isHorizontal ? {\n x: coordinateBBox.minX + paddingLeft,\n y: viewBBox.maxY - height - paddingBottom\n } : {\n x: viewBBox.maxX - width - paddingRight,\n y: coordinateBBox.minY + paddingTop\n };\n var step = this.getStep();\n var cnt = this.getCnt();\n var trackLen = isHorizontal ? coordinateBBox.width - paddingLeft - paddingRight : coordinateBBox.height - paddingTop - paddingBottom;\n var thumbLen = Math.max(trackLen * util_1.clamp(step / cnt, 0, 1), MIN_THUMB_LENGTH);\n return tslib_1.__assign(tslib_1.__assign({}, this.getThemeOptions()), {\n x: position.x,\n y: position.y,\n size: isHorizontal ? height : width,\n isHorizontal: isHorizontal,\n trackLen: trackLen,\n thumbLen: thumbLen,\n thumbOffset: 0\n });\n };\n /**\n * 填充一些默认的配置项目\n */\n\n\n Scrollbar.prototype.getValidScrollbarCfg = function () {\n var cfg = {\n type: 'horizontal',\n categorySize: DEFAULT_CATEGORY_SIZE,\n width: DEFAULT_SIZE,\n height: DEFAULT_SIZE,\n padding: [0, 0, 0, 0],\n animate: true\n };\n\n if (util_1.isObject(this.option)) {\n cfg = tslib_1.__assign(tslib_1.__assign({}, cfg), this.option);\n }\n\n if (!util_1.isObject(this.option) || !this.option.padding) {\n cfg.padding = cfg.type === 'horizontal' ? [DEFAULT_PADDING, 0, DEFAULT_PADDING, 0] : [0, DEFAULT_PADDING, 0, DEFAULT_PADDING];\n }\n\n return cfg;\n };\n\n return Scrollbar;\n}(base_1.Controller);\n\nexports.default = Scrollbar;\n\n/***/ }),\n/* 967 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.clearList = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar STATUS_UNACTIVE = 'inactive';\nvar STATUS_ACTIVE = 'active';\n/**\n * 清理图例的 Highlight 效果\n * @param list 列表组件,图例或者坐标轴\n * @ignore\n */\n\nfunction clearList(list) {\n var items = list.getItems();\n util_1.each(items, function (item) {\n if (list.hasState(item, STATUS_ACTIVE)) {\n list.setItemState(item, STATUS_ACTIVE, false);\n }\n\n if (list.hasState(item, STATUS_UNACTIVE)) {\n list.setItemState(item, STATUS_UNACTIVE, false);\n }\n });\n}\n\nexports.clearList = clearList;\n\n/***/ }),\n/* 968 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(30);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(289));\n/**\n * @ignore\n * 圆形辅助框 Action\n */\n\n\nvar CircleMask =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(CircleMask, _super);\n\n function CircleMask() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.shapeType = 'circle';\n return _this;\n }\n\n CircleMask.prototype.getMaskAttrs = function () {\n var points = this.points;\n var currentPoint = util_1.last(this.points);\n var r = 0;\n var x = 0;\n var y = 0;\n\n if (points.length) {\n var first = points[0];\n r = util_2.distance(first, currentPoint) / 2;\n x = (currentPoint.x + first.x) / 2;\n y = (currentPoint.y + first.y) / 2;\n }\n\n return {\n x: x,\n y: y,\n r: r\n };\n };\n\n return CircleMask;\n}(base_1.default);\n\nexports.default = CircleMask;\n\n/***/ }),\n/* 969 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar rect_1 = tslib_1.__importDefault(__webpack_require__(466));\n\nfunction clampPoint(point) {\n point.x = util_1.clamp(point.x, 0, 1);\n point.y = util_1.clamp(point.y, 0, 1);\n}\n/**\n * @ignore\n */\n\n\nvar DimRect =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(DimRect, _super);\n\n function DimRect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.dim = 'x';\n _this.inPlot = true;\n return _this;\n }\n\n DimRect.prototype.getRegion = function () {\n var start = null;\n var end = null;\n var points = this.points;\n var dim = this.dim;\n var coord = this.context.view.getCoordinate();\n var normalStart = coord.invert(util_1.head(points));\n var normalEnd = coord.invert(util_1.last(points));\n\n if (this.inPlot) {\n // 约束到 0 - 1 范围内\n clampPoint(normalStart);\n clampPoint(normalEnd);\n }\n\n if (dim === 'x') {\n // x 轴方向扩展, y 轴方向占满全部\n start = coord.convert({\n x: normalStart.x,\n y: 0\n });\n end = coord.convert({\n x: normalEnd.x,\n y: 1\n });\n } else {\n // y 轴方向扩展, x 轴方向占满全部\n start = coord.convert({\n x: 0,\n y: normalStart.y\n });\n end = coord.convert({\n x: 1,\n y: normalEnd.y\n });\n }\n\n return {\n start: start,\n end: end\n };\n };\n\n return DimRect;\n}(rect_1.default);\n\nexports.default = DimRect;\n\n/***/ }),\n/* 970 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(30);\n\nvar path_1 = tslib_1.__importDefault(__webpack_require__(467));\n/**\n * Smooth path mask\n * @ignore\n */\n\n\nvar SmoothPathMask =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(SmoothPathMask, _super);\n\n function SmoothPathMask() {\n return _super !== null && _super.apply(this, arguments) || this;\n } // 生成 mask 的路径\n\n\n SmoothPathMask.prototype.getMaskPath = function () {\n var points = this.points;\n return util_1.getSpline(points, true);\n };\n\n return SmoothPathMask;\n}(path_1.default);\n\nexports.default = SmoothPathMask;\n\n/***/ }),\n/* 971 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar range_filter_1 = tslib_1.__importDefault(__webpack_require__(468));\n\nvar util_2 = __webpack_require__(30);\n/**\n * 数据范围过滤,但不在当前的 view 上生效,而在当前的 view 同一层级的其他 views 上生效,用于实现联动过滤。\n * @ignore\n */\n\n\nvar SiblingFilter =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(SiblingFilter, _super);\n\n function SiblingFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 对 view 进行过滤\n * @param view\n * @param field\n * @param filter\n */\n\n\n SiblingFilter.prototype.filterView = function (view, field, filter) {\n var siblings = util_2.getSilbings(view);\n util_1.each(siblings, function (sibling) {\n sibling.filter(field, filter);\n });\n };\n /**\n * 重新渲染\n * @param view\n */\n\n\n SiblingFilter.prototype.reRender = function (view) {\n var siblings = util_2.getSilbings(view);\n util_1.each(siblings, function (sibling) {\n sibling.render(true);\n });\n };\n\n return SiblingFilter;\n}(range_filter_1.default);\n\nexports.default = SiblingFilter;\n\n/***/ }),\n/* 972 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(47));\n\nvar util_2 = __webpack_require__(30);\n/**\n * 元素过滤的 Action,控制元素的显示隐藏\n * @ignore\n */\n\n\nvar ElementFilter =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(ElementFilter, _super);\n\n function ElementFilter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 过滤\n */\n\n\n ElementFilter.prototype.filter = function () {\n var delegateObject = util_2.getDelegationObject(this.context);\n var view = this.context.view;\n var elements = util_2.getElements(view);\n\n if (util_2.isMask(this.context)) {\n var maskElements_1 = util_2.getMaskedElements(this.context, 10);\n\n if (maskElements_1) {\n util_1.each(elements, function (el) {\n if (maskElements_1.includes(el)) {\n el.show();\n } else {\n el.hide();\n }\n });\n }\n } else if (delegateObject) {\n var component = delegateObject.component;\n var field_1 = component.get('field'); // 列表类的组件能够触发\n\n if (util_2.isList(delegateObject)) {\n if (field_1) {\n var unCheckedItems = component.getItemsByState('unchecked');\n var scale_1 = util_2.getScaleByField(view, field_1);\n var names_1 = unCheckedItems.map(function (item) {\n return item.name;\n }); // 直接控制显示、隐藏\n\n util_1.each(elements, function (el) {\n var value = util_2.getElementValue(el, field_1);\n var text = scale_1.getText(value);\n\n if (names_1.indexOf(text) >= 0) {\n el.hide();\n } else {\n el.show();\n }\n });\n }\n } else if (util_2.isSlider(delegateObject)) {\n var range = component.getValue();\n var min_1 = range[0],\n max_1 = range[1];\n util_1.each(elements, function (el) {\n var value = util_2.getElementValue(el, field_1);\n\n if (value >= min_1 && value <= max_1) {\n el.show();\n } else {\n el.hide();\n }\n });\n }\n }\n };\n /**\n * 清除过滤\n */\n\n\n ElementFilter.prototype.clear = function () {\n var elements = util_2.getElements(this.context.view);\n util_1.each(elements, function (el) {\n el.show();\n });\n };\n /**\n * 恢复发生的过滤,保持同 data-filter 命名的一致\n */\n\n\n ElementFilter.prototype.reset = function () {\n this.clear();\n };\n\n return ElementFilter;\n}(base_1.default);\n\nexports.default = ElementFilter;\n\n/***/ }),\n/* 973 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(47));\n\nvar util_2 = __webpack_require__(30);\n/**\n * Sibling filter\n * @ignore\n */\n\n\nvar SiblingFilter =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(SiblingFilter, _super);\n\n function SiblingFilter() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.byRecord = false;\n return _this;\n }\n /**\n * 过滤隐藏图形\n */\n\n\n SiblingFilter.prototype.filter = function () {\n // 仅考虑 mask 导致的过滤\n if (util_2.isMask(this.context)) {\n if (this.byRecord) {\n this.filterByRecord();\n } else {\n this.filterByBBox();\n }\n }\n }; // 根据框选的记录来做过滤\n\n\n SiblingFilter.prototype.filterByRecord = function () {\n var view = this.context.view;\n var maskElements = util_2.getMaskedElements(this.context, 10);\n\n if (!maskElements) {\n return;\n }\n\n var xFiled = view.getXScale().field;\n var yField = view.getYScales()[0].field;\n var records = maskElements.map(function (el) {\n return el.getModel().data;\n });\n var siblings = util_2.getSilbings(view);\n util_1.each(siblings, function (sibling) {\n var elements = util_2.getElements(sibling);\n util_1.each(elements, function (el) {\n var record = el.getModel().data; // records.includes(record) 不生效,应该是数据的引用被改了\n\n if (util_2.isInRecords(records, record, xFiled, yField)) {\n el.show();\n } else {\n el.hide();\n }\n });\n });\n }; // 根据被框选的包围盒做过滤\n\n\n SiblingFilter.prototype.filterByBBox = function () {\n var _this = this;\n\n var view = this.context.view;\n var siblings = util_2.getSilbings(view);\n util_1.each(siblings, function (sibling) {\n var maskElements = util_2.getSiblingMaskElements(_this.context, sibling, 10);\n var elements = util_2.getElements(sibling);\n\n if (maskElements) {\n // mask 过小时返回为 null,不能是空数组,否则同未框选到混淆\n util_1.each(elements, function (el) {\n if (maskElements.includes(el)) {\n el.show();\n } else {\n el.hide();\n }\n });\n }\n });\n };\n /**\n * 清理所有隐藏的图形\n */\n\n\n SiblingFilter.prototype.reset = function () {\n var siblings = util_2.getSilbings(this.context.view);\n util_1.each(siblings, function (sibling) {\n var elements = util_2.getElements(sibling);\n util_1.each(elements, function (el) {\n el.show();\n });\n });\n };\n\n return SiblingFilter;\n}(base_1.default);\n\nexports.default = SiblingFilter;\n\n/***/ }),\n/* 974 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar matrix_util_1 = __webpack_require__(33);\n\nvar util_1 = __webpack_require__(0);\n\nvar padding_1 = __webpack_require__(268);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(47));\n\nvar PADDING_RIGHT = 10;\nvar PADDING_TOP = 5;\n/**\n * Button action\n * @ignore\n */\n\nvar ButtonAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(ButtonAction, _super);\n\n function ButtonAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.buttonGroup = null;\n _this.buttonCfg = {\n name: 'button',\n text: 'button',\n textStyle: {\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#333333',\n cursor: 'pointer'\n },\n padding: [8, 10],\n style: {\n fill: '#f7f7f7',\n stroke: '#cccccc',\n cursor: 'pointer'\n },\n activeStyle: {\n fill: '#e6e6e6'\n }\n };\n return _this;\n } // mix 默认的配置和用户配置\n\n\n ButtonAction.prototype.getButtonCfg = function () {\n return util_1.deepMix(this.buttonCfg, this.cfg);\n }; // 绘制 Button 和 文本\n\n\n ButtonAction.prototype.drawButton = function () {\n var config = this.getButtonCfg();\n var group = this.context.view.foregroundGroup.addGroup({\n name: config.name\n }); // 添加文本\n\n var textShape = group.addShape({\n type: 'text',\n name: 'button-text',\n attrs: tslib_1.__assign({\n text: config.text\n }, config.textStyle)\n });\n var textBBox = textShape.getBBox();\n var padding = padding_1.parsePadding(config.padding); // 添加背景按钮\n\n var buttonShape = group.addShape({\n type: 'rect',\n name: 'button-rect',\n attrs: tslib_1.__assign({\n x: textBBox.x - padding[3],\n y: textBBox.y - padding[0],\n width: textBBox.width + padding[1] + padding[3],\n height: textBBox.height + padding[0] + padding[2]\n }, config.style)\n });\n buttonShape.toBack(); // 在后面\n // active 效果内置\n\n group.on('mouseenter', function () {\n buttonShape.attr(config.activeStyle);\n });\n group.on('mouseleave', function () {\n buttonShape.attr(config.style);\n });\n this.buttonGroup = group;\n }; // 重置位置\n\n\n ButtonAction.prototype.resetPosition = function () {\n var view = this.context.view;\n var coord = view.getCoordinate();\n var point = coord.convert({\n x: 1,\n y: 1\n }); // 后面直接改成左上角\n\n var buttonGroup = this.buttonGroup;\n var bbox = buttonGroup.getBBox();\n var matrix = matrix_util_1.ext.transform(null, [['t', point.x - bbox.width - PADDING_RIGHT, point.y + bbox.height + PADDING_TOP]]);\n buttonGroup.setMatrix(matrix);\n };\n /**\n * 显示\n */\n\n\n ButtonAction.prototype.show = function () {\n if (!this.buttonGroup) {\n this.drawButton();\n }\n\n this.resetPosition();\n this.buttonGroup.show();\n };\n /**\n * 隐藏\n */\n\n\n ButtonAction.prototype.hide = function () {\n if (this.buttonGroup) {\n this.buttonGroup.hide();\n }\n };\n /**\n * 销毁\n */\n\n\n ButtonAction.prototype.destroy = function () {\n var buttonGroup = this.buttonGroup;\n\n if (buttonGroup) {\n buttonGroup.remove();\n }\n\n _super.prototype.destroy.call(this);\n };\n\n return ButtonAction;\n}(base_1.default);\n\nexports.default = ButtonAction;\n\n/***/ }),\n/* 975 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar base_1 = tslib_1.__importDefault(__webpack_require__(47));\n\nvar util_1 = __webpack_require__(30);\n\nvar DISTANCE = 4; // 移动的最小距离\n\n/**\n * @ignore\n * View 支持 Drag 的 Action\n */\n\nvar Drag =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Drag, _super);\n\n function Drag() {\n var _this = _super !== null && _super.apply(this, arguments) || this; // Action 开始,不等同于 拖拽开始,需要判定移动的范围\n\n\n _this.starting = false; // 拖拽开始\n\n _this.dragStart = false;\n return _this;\n }\n /**\n * 开始\n */\n\n\n Drag.prototype.start = function () {\n this.starting = true;\n this.startPoint = this.context.getCurrentPoint();\n };\n /**\n * 拖拽\n */\n\n\n Drag.prototype.drag = function () {\n if (!this.startPoint) {\n return;\n }\n\n var current = this.context.getCurrentPoint();\n var view = this.context.view;\n var event = this.context.event;\n\n if (!this.dragStart) {\n if (util_1.distance(current, this.startPoint) > DISTANCE) {\n view.emit('dragstart', {\n target: event.target,\n x: event.x,\n y: event.y\n });\n this.dragStart = true;\n }\n } else {\n view.emit('drag', {\n target: event.target,\n x: event.x,\n y: event.y\n });\n }\n };\n /**\n * 结束\n */\n\n\n Drag.prototype.end = function () {\n if (this.dragStart) {\n var view = this.context.view;\n var event_1 = this.context.event;\n view.emit('dragend', {\n target: event_1.target,\n x: event_1.x,\n y: event_1.y\n });\n }\n\n this.starting = false;\n this.dragStart = false;\n };\n\n return Drag;\n}(base_1.default);\n\nexports.default = Drag;\n\n/***/ }),\n/* 976 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar matrix_util_1 = __webpack_require__(33);\n\nvar __1 = __webpack_require__(266);\n\nvar util_1 = __webpack_require__(30);\n\nvar MIN_DISTANCE = 5;\n/**\n * @ignore\n * View 移动的 Action\n */\n\nvar Move =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(Move, _super);\n\n function Move() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.starting = false;\n _this.isMoving = false; // private cacheRange = null;\n\n _this.startPoint = null;\n _this.startMatrix = null;\n return _this;\n }\n /**\n * 开始移动\n */\n\n\n Move.prototype.start = function () {\n this.starting = true;\n this.startPoint = this.context.getCurrentPoint(); // 缓存开始时的矩阵,防止反复拖拽\n\n this.startMatrix = this.context.view.middleGroup.getMatrix();\n };\n /**\n * 移动\n */\n\n\n Move.prototype.move = function () {\n if (!this.starting) {\n return;\n }\n\n var startPoint = this.startPoint;\n var currentPoint = this.context.getCurrentPoint();\n var d = util_1.distance(startPoint, currentPoint);\n\n if (d > MIN_DISTANCE && !this.isMoving) {\n this.isMoving = true;\n }\n\n if (this.isMoving) {\n var view = this.context.view;\n var matrix = matrix_util_1.ext.transform(this.startMatrix, [['t', currentPoint.x - startPoint.x, currentPoint.y - startPoint.y]]);\n view.backgroundGroup.setMatrix(matrix);\n view.foregroundGroup.setMatrix(matrix);\n view.middleGroup.setMatrix(matrix);\n }\n };\n /**\n * 结束移动\n */\n\n\n Move.prototype.end = function () {\n if (this.isMoving) {\n this.isMoving = false;\n }\n\n this.startMatrix = null;\n this.starting = false;\n this.startPoint = null;\n };\n /**\n * 回滚\n */\n\n\n Move.prototype.reset = function () {\n this.starting = false;\n this.startPoint = null;\n this.isMoving = false;\n var view = this.context.view;\n view.backgroundGroup.resetMatrix();\n view.foregroundGroup.resetMatrix();\n view.middleGroup.resetMatrix();\n this.isMoving = false;\n };\n\n return Move;\n}(__1.Action);\n\nexports.default = Move;\n\n/***/ }),\n/* 977 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar scale_transform_1 = tslib_1.__importDefault(__webpack_require__(469));\n/**\n * 拖拽 Scale 的 Action\n * @ignore\n */\n\n\nvar ScaleTranslate =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(ScaleTranslate, _super);\n\n function ScaleTranslate() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.startPoint = null;\n _this.starting = false;\n _this.startCache = {};\n return _this;\n }\n /**\n * 开始\n */\n\n\n ScaleTranslate.prototype.start = function () {\n var _this = this;\n\n this.startPoint = this.context.getCurrentPoint();\n this.starting = true;\n var dims = this.dims;\n util_1.each(dims, function (dim) {\n var scale = _this.getScale(dim);\n\n var min = scale.min,\n max = scale.max,\n values = scale.values;\n _this.startCache[dim] = {\n min: min,\n max: max,\n values: values\n };\n });\n }; // 平移分类的度量\n // private translateCategory(dim, scale, normalPoint) {\n // }\n\n /**\n * 结束\n */\n\n\n ScaleTranslate.prototype.end = function () {\n this.startPoint = null;\n this.starting = false;\n this.startCache = {};\n };\n /**\n * 平移\n */\n\n\n ScaleTranslate.prototype.translate = function () {\n var _this = this;\n\n if (!this.starting) {\n return;\n }\n\n var startPoint = this.startPoint;\n var coord = this.context.view.getCoordinate();\n var currentPoint = this.context.getCurrentPoint();\n var normalStart = coord.invert(startPoint);\n var noramlCurrent = coord.invert(currentPoint);\n var dx = noramlCurrent.x - normalStart.x;\n var dy = noramlCurrent.y - normalStart.y;\n var view = this.context.view;\n var dims = this.dims;\n util_1.each(dims, function (dim) {\n _this.translateDim(dim, {\n x: dx * -1,\n y: dy * -1\n });\n });\n view.render(true);\n }; // 平移度量\n\n\n ScaleTranslate.prototype.translateDim = function (dim, normalPoint) {\n if (this.hasDim(dim)) {\n var scale = this.getScale(dim);\n\n if (scale.isLinear) {\n this.translateLinear(dim, scale, normalPoint);\n } // else { // 暂时仅处理连续字段\n // this.translateCategory(dim, scale, normalPoint);\n // }\n\n }\n }; // linear 度量平移\n\n\n ScaleTranslate.prototype.translateLinear = function (dim, scale, normalPoint) {\n var view = this.context.view;\n var _a = this.startCache[dim],\n min = _a.min,\n max = _a.max;\n var range = max - min;\n var d = normalPoint[dim] * range; // 只有第一次缓存,否则无法回滚\n\n if (!this.cacheScaleDefs[dim]) {\n this.cacheScaleDefs[dim] = {\n // @ts-ignore\n nice: scale.nice,\n min: min,\n max: max\n };\n }\n\n view.scale(scale.field, {\n // @ts-ignore\n nice: false,\n min: min + d,\n max: max + d\n });\n }; // 平移分类的度量\n // private translateCategory(dim, scale, normalPoint) {\n // }\n\n /**\n * 回滚\n */\n\n\n ScaleTranslate.prototype.reset = function () {\n _super.prototype.reset.call(this);\n\n this.startPoint = null;\n this.starting = false;\n };\n\n return ScaleTranslate;\n}(scale_transform_1.default);\n\nexports.default = ScaleTranslate;\n\n/***/ }),\n/* 978 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar scale_transform_1 = tslib_1.__importDefault(__webpack_require__(469));\n/**\n * 缩放 Scale 的 Action\n * @ignore\n */\n\n\nvar ScaleTranslate =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(ScaleTranslate, _super);\n\n function ScaleTranslate() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.zoomRatio = 0.05;\n return _this; // 平移分类的度量\n // private translateCategory(dim, scale, normalPoint) {\n // }\n }\n /**\n * 缩小\n */\n\n\n ScaleTranslate.prototype.zoomIn = function () {\n this.zoom(this.zoomRatio);\n };\n\n ScaleTranslate.prototype.zoom = function (scale) {\n var _this = this;\n\n var dims = this.dims;\n util_1.each(dims, function (dim) {\n _this.zoomDim(dim, scale);\n });\n this.context.view.render(true);\n };\n /**\n * 放大\n */\n\n\n ScaleTranslate.prototype.zoomOut = function () {\n this.zoom(-1 * this.zoomRatio);\n }; // 缩放度量\n\n\n ScaleTranslate.prototype.zoomDim = function (dim, dRatio) {\n if (this.hasDim(dim)) {\n var scale = this.getScale(dim);\n\n if (scale.isLinear) {\n this.zoomLinear(dim, scale, dRatio);\n } // else { // 暂时仅处理连续字段\n // this.zoomCategory(dim, scale, normalPoint);\n // }\n\n }\n }; // linear 度量平移\n\n\n ScaleTranslate.prototype.zoomLinear = function (dim, scale, dRatio) {\n var view = this.context.view; // 只有第一次缓存,否则无法回滚\n\n if (!this.cacheScaleDefs[dim]) {\n this.cacheScaleDefs[dim] = {\n // @ts-ignore\n nice: scale.nice,\n min: scale.min,\n max: scale.max\n };\n } // 使用使用原始度量作为缩放标准\n\n\n var scaleDef = this.cacheScaleDefs[dim];\n var range = scaleDef.max - scaleDef.min;\n var min = scale.min,\n max = scale.max;\n var d = dRatio * range;\n var toMin = min - d;\n var toMax = max + d;\n var curRange = toMax - toMin;\n var scaled = curRange / range;\n\n if (toMax > toMin && scaled < 100 && scaled > 0.01) {\n view.scale(scale.field, {\n // @ts-ignore\n nice: false,\n min: min - d,\n max: max + d\n });\n }\n };\n\n return ScaleTranslate;\n}(scale_transform_1.default);\n\nexports.default = ScaleTranslate;\n\n/***/ }),\n/* 979 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\n/** @license React v0.25.1\n * react-reconciler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nmodule.exports = function $$$reconciler($$$hostConfig) {\n 'use strict';\n\n var aa = __webpack_require__(980),\n ba = __webpack_require__(3),\n m = __webpack_require__(981);\n\n function n(a) {\n for (var b = \"https://reactjs.org/docs/error-decoder.html?invariant=\" + a, c = 1; c < arguments.length; c++) {\n b += \"&args[]=\" + encodeURIComponent(arguments[c]);\n }\n\n return \"Minified React error #\" + a + \"; visit \" + b + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";\n }\n\n var p = ba.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n p.hasOwnProperty(\"ReactCurrentDispatcher\") || (p.ReactCurrentDispatcher = {\n current: null\n });\n p.hasOwnProperty(\"ReactCurrentBatchConfig\") || (p.ReactCurrentBatchConfig = {\n suspense: null\n });\n var u = \"function\" === typeof Symbol && Symbol.for,\n ca = u ? Symbol.for(\"react.element\") : 60103,\n da = u ? Symbol.for(\"react.portal\") : 60106,\n ea = u ? Symbol.for(\"react.fragment\") : 60107,\n fa = u ? Symbol.for(\"react.strict_mode\") : 60108,\n ha = u ? Symbol.for(\"react.profiler\") : 60114,\n ia = u ? Symbol.for(\"react.provider\") : 60109,\n ja = u ? Symbol.for(\"react.context\") : 60110,\n ka = u ? Symbol.for(\"react.concurrent_mode\") : 60111,\n la = u ? Symbol.for(\"react.forward_ref\") : 60112,\n ma = u ? Symbol.for(\"react.suspense\") : 60113,\n na = u ? Symbol.for(\"react.suspense_list\") : 60120,\n oa = u ? Symbol.for(\"react.memo\") : 60115,\n pa = u ? Symbol.for(\"react.lazy\") : 60116,\n qa = u ? Symbol.for(\"react.block\") : 60121,\n ra = \"function\" === typeof Symbol && Symbol.iterator;\n\n function sa(a) {\n if (null === a || \"object\" !== (0, _typeof2.default)(a)) return null;\n a = ra && a[ra] || a[\"@@iterator\"];\n return \"function\" === typeof a ? a : null;\n }\n\n function ta(a) {\n if (-1 === a._status) {\n a._status = 0;\n var b = a._ctor;\n b = b();\n a._result = b;\n b.then(function (b) {\n 0 === a._status && (b = b.default, a._status = 1, a._result = b);\n }, function (b) {\n 0 === a._status && (a._status = 2, a._result = b);\n });\n }\n }\n\n function ua(a) {\n if (null == a) return null;\n if (\"function\" === typeof a) return a.displayName || a.name || null;\n if (\"string\" === typeof a) return a;\n\n switch (a) {\n case ea:\n return \"Fragment\";\n\n case da:\n return \"Portal\";\n\n case ha:\n return \"Profiler\";\n\n case fa:\n return \"StrictMode\";\n\n case ma:\n return \"Suspense\";\n\n case na:\n return \"SuspenseList\";\n }\n\n if (\"object\" === (0, _typeof2.default)(a)) switch (a.$$typeof) {\n case ja:\n return \"Context.Consumer\";\n\n case ia:\n return \"Context.Provider\";\n\n case la:\n var b = a.render;\n b = b.displayName || b.name || \"\";\n return a.displayName || (\"\" !== b ? \"ForwardRef(\" + b + \")\" : \"ForwardRef\");\n\n case oa:\n return ua(a.type);\n\n case qa:\n return ua(a.render);\n\n case pa:\n if (a = 1 === a._status ? a._result : null) return ua(a);\n }\n return null;\n }\n\n function va(a) {\n var b = a,\n c = a;\n if (a.alternate) for (; b.return;) {\n b = b.return;\n } else {\n a = b;\n\n do {\n b = a, 0 !== (b.effectTag & 1026) && (c = b.return), a = b.return;\n } while (a);\n }\n return 3 === b.tag ? c : null;\n }\n\n function wa(a) {\n if (va(a) !== a) throw Error(n(188));\n }\n\n function xa(a) {\n var b = a.alternate;\n\n if (!b) {\n b = va(a);\n if (null === b) throw Error(n(188));\n return b !== a ? null : a;\n }\n\n for (var c = a, d = b;;) {\n var e = c.return;\n if (null === e) break;\n var f = e.alternate;\n\n if (null === f) {\n d = e.return;\n\n if (null !== d) {\n c = d;\n continue;\n }\n\n break;\n }\n\n if (e.child === f.child) {\n for (f = e.child; f;) {\n if (f === c) return wa(e), a;\n if (f === d) return wa(e), b;\n f = f.sibling;\n }\n\n throw Error(n(188));\n }\n\n if (c.return !== d.return) c = e, d = f;else {\n for (var g = !1, h = e.child; h;) {\n if (h === c) {\n g = !0;\n c = e;\n d = f;\n break;\n }\n\n if (h === d) {\n g = !0;\n d = e;\n c = f;\n break;\n }\n\n h = h.sibling;\n }\n\n if (!g) {\n for (h = f.child; h;) {\n if (h === c) {\n g = !0;\n c = f;\n d = e;\n break;\n }\n\n if (h === d) {\n g = !0;\n d = f;\n c = e;\n break;\n }\n\n h = h.sibling;\n }\n\n if (!g) throw Error(n(189));\n }\n }\n if (c.alternate !== d) throw Error(n(190));\n }\n\n if (3 !== c.tag) throw Error(n(188));\n return c.stateNode.current === c ? a : b;\n }\n\n function ya(a) {\n a = xa(a);\n if (!a) return null;\n\n for (var b = a;;) {\n if (5 === b.tag || 6 === b.tag) return b;\n if (b.child) b.child.return = b, b = b.child;else {\n if (b === a) break;\n\n for (; !b.sibling;) {\n if (!b.return || b.return === a) return null;\n b = b.return;\n }\n\n b.sibling.return = b.return;\n b = b.sibling;\n }\n }\n\n return null;\n }\n\n function za(a) {\n a = xa(a);\n if (!a) return null;\n\n for (var b = a;;) {\n if (5 === b.tag || 6 === b.tag) return b;\n if (b.child && 4 !== b.tag) b.child.return = b, b = b.child;else {\n if (b === a) break;\n\n for (; !b.sibling;) {\n if (!b.return || b.return === a) return null;\n b = b.return;\n }\n\n b.sibling.return = b.return;\n b = b.sibling;\n }\n }\n\n return null;\n }\n\n var Aa = $$$hostConfig.getPublicInstance,\n Ba = $$$hostConfig.getRootHostContext,\n Ca = $$$hostConfig.getChildHostContext,\n Da = $$$hostConfig.prepareForCommit,\n Ea = $$$hostConfig.resetAfterCommit,\n Fa = $$$hostConfig.createInstance,\n Ga = $$$hostConfig.appendInitialChild,\n Ha = $$$hostConfig.finalizeInitialChildren,\n Ia = $$$hostConfig.prepareUpdate,\n Ja = $$$hostConfig.shouldSetTextContent,\n Ka = $$$hostConfig.shouldDeprioritizeSubtree,\n La = $$$hostConfig.createTextInstance,\n Ma = $$$hostConfig.setTimeout,\n Na = $$$hostConfig.clearTimeout,\n Oa = $$$hostConfig.noTimeout,\n Pa = $$$hostConfig.isPrimaryRenderer,\n Qa = $$$hostConfig.supportsMutation,\n Ra = $$$hostConfig.supportsPersistence,\n Sa = $$$hostConfig.supportsHydration,\n Ta = $$$hostConfig.appendChild,\n Ua = $$$hostConfig.appendChildToContainer,\n Va = $$$hostConfig.commitTextUpdate,\n Wa = $$$hostConfig.commitMount,\n Xa = $$$hostConfig.commitUpdate,\n Ya = $$$hostConfig.insertBefore,\n Za = $$$hostConfig.insertInContainerBefore,\n $a = $$$hostConfig.removeChild,\n ab = $$$hostConfig.removeChildFromContainer,\n bb = $$$hostConfig.resetTextContent,\n cb = $$$hostConfig.hideInstance,\n db = $$$hostConfig.hideTextInstance,\n eb = $$$hostConfig.unhideInstance,\n fb = $$$hostConfig.unhideTextInstance,\n gb = $$$hostConfig.cloneInstance,\n hb = $$$hostConfig.createContainerChildSet,\n ib = $$$hostConfig.appendChildToContainerChildSet,\n jb = $$$hostConfig.finalizeContainerChildren,\n kb = $$$hostConfig.replaceContainerChildren,\n lb = $$$hostConfig.cloneHiddenInstance,\n mb = $$$hostConfig.cloneHiddenTextInstance,\n nb = $$$hostConfig.canHydrateInstance,\n ob = $$$hostConfig.canHydrateTextInstance,\n pb = $$$hostConfig.isSuspenseInstancePending,\n qb = $$$hostConfig.isSuspenseInstanceFallback,\n rb = $$$hostConfig.getNextHydratableSibling,\n sb = $$$hostConfig.getFirstHydratableChild,\n tb = $$$hostConfig.hydrateInstance,\n ub = $$$hostConfig.hydrateTextInstance,\n vb = $$$hostConfig.getNextHydratableInstanceAfterSuspenseInstance,\n wb = $$$hostConfig.commitHydratedContainer,\n xb = $$$hostConfig.commitHydratedSuspenseInstance,\n yb = /^(.*)[\\\\\\/]/;\n\n function zb(a) {\n var b = \"\";\n\n do {\n a: switch (a.tag) {\n case 3:\n case 4:\n case 6:\n case 7:\n case 10:\n case 9:\n var c = \"\";\n break a;\n\n default:\n var d = a._debugOwner,\n e = a._debugSource,\n f = ua(a.type);\n c = null;\n d && (c = ua(d.type));\n d = f;\n f = \"\";\n e ? f = \" (at \" + e.fileName.replace(yb, \"\") + \":\" + e.lineNumber + \")\" : c && (f = \" (created by \" + c + \")\");\n c = \"\\n in \" + (d || \"Unknown\") + f;\n }\n\n b += c;\n a = a.return;\n } while (a);\n\n return b;\n }\n\n var Ab = [],\n Bb = -1;\n\n function B(a) {\n 0 > Bb || (a.current = Ab[Bb], Ab[Bb] = null, Bb--);\n }\n\n function C(a, b) {\n Bb++;\n Ab[Bb] = a.current;\n a.current = b;\n }\n\n var Cb = {},\n D = {\n current: Cb\n },\n E = {\n current: !1\n },\n Db = Cb;\n\n function Eb(a, b) {\n var c = a.type.contextTypes;\n if (!c) return Cb;\n var d = a.stateNode;\n if (d && d.__reactInternalMemoizedUnmaskedChildContext === b) return d.__reactInternalMemoizedMaskedChildContext;\n var e = {},\n f;\n\n for (f in c) {\n e[f] = b[f];\n }\n\n d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = b, a.__reactInternalMemoizedMaskedChildContext = e);\n return e;\n }\n\n function F(a) {\n a = a.childContextTypes;\n return null !== a && void 0 !== a;\n }\n\n function Fb() {\n B(E);\n B(D);\n }\n\n function Gb(a, b, c) {\n if (D.current !== Cb) throw Error(n(168));\n C(D, b);\n C(E, c);\n }\n\n function Hb(a, b, c) {\n var d = a.stateNode;\n a = b.childContextTypes;\n if (\"function\" !== typeof d.getChildContext) return c;\n d = d.getChildContext();\n\n for (var e in d) {\n if (!(e in a)) throw Error(n(108, ua(b) || \"Unknown\", e));\n }\n\n return aa({}, c, {}, d);\n }\n\n function Ib(a) {\n a = (a = a.stateNode) && a.__reactInternalMemoizedMergedChildContext || Cb;\n Db = D.current;\n C(D, a);\n C(E, E.current);\n return !0;\n }\n\n function Jb(a, b, c) {\n var d = a.stateNode;\n if (!d) throw Error(n(169));\n c ? (a = Hb(a, b, Db), d.__reactInternalMemoizedMergedChildContext = a, B(E), B(D), C(D, a)) : B(E);\n C(E, c);\n }\n\n var Kb = m.unstable_runWithPriority,\n Lb = m.unstable_scheduleCallback,\n Mb = m.unstable_cancelCallback,\n Nb = m.unstable_requestPaint,\n Ob = m.unstable_now,\n Pb = m.unstable_getCurrentPriorityLevel,\n Qb = m.unstable_ImmediatePriority,\n Rb = m.unstable_UserBlockingPriority,\n Sb = m.unstable_NormalPriority,\n Tb = m.unstable_LowPriority,\n Ub = m.unstable_IdlePriority,\n Vb = {},\n Wb = m.unstable_shouldYield,\n Xb = void 0 !== Nb ? Nb : function () {},\n Yb = null,\n Zb = null,\n $b = !1,\n ac = Ob(),\n G = 1E4 > ac ? Ob : function () {\n return Ob() - ac;\n };\n\n function bc() {\n switch (Pb()) {\n case Qb:\n return 99;\n\n case Rb:\n return 98;\n\n case Sb:\n return 97;\n\n case Tb:\n return 96;\n\n case Ub:\n return 95;\n\n default:\n throw Error(n(332));\n }\n }\n\n function cc(a) {\n switch (a) {\n case 99:\n return Qb;\n\n case 98:\n return Rb;\n\n case 97:\n return Sb;\n\n case 96:\n return Tb;\n\n case 95:\n return Ub;\n\n default:\n throw Error(n(332));\n }\n }\n\n function dc(a, b) {\n a = cc(a);\n return Kb(a, b);\n }\n\n function ec(a, b, c) {\n a = cc(a);\n return Lb(a, b, c);\n }\n\n function fc(a) {\n null === Yb ? (Yb = [a], Zb = Lb(Qb, gc)) : Yb.push(a);\n return Vb;\n }\n\n function H() {\n if (null !== Zb) {\n var a = Zb;\n Zb = null;\n Mb(a);\n }\n\n gc();\n }\n\n function gc() {\n if (!$b && null !== Yb) {\n $b = !0;\n var a = 0;\n\n try {\n var b = Yb;\n dc(99, function () {\n for (; a < b.length; a++) {\n var c = b[a];\n\n do {\n c = c(!0);\n } while (null !== c);\n }\n });\n Yb = null;\n } catch (c) {\n throw null !== Yb && (Yb = Yb.slice(a + 1)), Lb(Qb, H), c;\n } finally {\n $b = !1;\n }\n }\n }\n\n function hc(a, b, c) {\n c /= 10;\n return 1073741821 - (((1073741821 - a + b / 10) / c | 0) + 1) * c;\n }\n\n function ic(a, b) {\n return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b;\n }\n\n var jc = \"function\" === typeof Object.is ? Object.is : ic,\n kc = Object.prototype.hasOwnProperty;\n\n function lc(a, b) {\n if (jc(a, b)) return !0;\n if (\"object\" !== (0, _typeof2.default)(a) || null === a || \"object\" !== (0, _typeof2.default)(b) || null === b) return !1;\n var c = Object.keys(a),\n d = Object.keys(b);\n if (c.length !== d.length) return !1;\n\n for (d = 0; d < c.length; d++) {\n if (!kc.call(b, c[d]) || !jc(a[c[d]], b[c[d]])) return !1;\n }\n\n return !0;\n }\n\n function mc(a, b) {\n if (a && a.defaultProps) {\n b = aa({}, b);\n a = a.defaultProps;\n\n for (var c in a) {\n void 0 === b[c] && (b[c] = a[c]);\n }\n }\n\n return b;\n }\n\n var nc = {\n current: null\n },\n oc = null,\n pc = null,\n qc = null;\n\n function rc() {\n qc = pc = oc = null;\n }\n\n function sc(a, b) {\n a = a.type._context;\n Pa ? (C(nc, a._currentValue), a._currentValue = b) : (C(nc, a._currentValue2), a._currentValue2 = b);\n }\n\n function tc(a) {\n var b = nc.current;\n B(nc);\n a = a.type._context;\n Pa ? a._currentValue = b : a._currentValue2 = b;\n }\n\n function uc(a, b) {\n for (; null !== a;) {\n var c = a.alternate;\n if (a.childExpirationTime < b) a.childExpirationTime = b, null !== c && c.childExpirationTime < b && (c.childExpirationTime = b);else if (null !== c && c.childExpirationTime < b) c.childExpirationTime = b;else break;\n a = a.return;\n }\n }\n\n function vc(a, b) {\n oc = a;\n qc = pc = null;\n a = a.dependencies;\n null !== a && null !== a.firstContext && (a.expirationTime >= b && (wc = !0), a.firstContext = null);\n }\n\n function I(a, b) {\n if (qc !== a && !1 !== b && 0 !== b) {\n if (\"number\" !== typeof b || 1073741823 === b) qc = a, b = 1073741823;\n b = {\n context: a,\n observedBits: b,\n next: null\n };\n\n if (null === pc) {\n if (null === oc) throw Error(n(308));\n pc = b;\n oc.dependencies = {\n expirationTime: 0,\n firstContext: b,\n responders: null\n };\n } else pc = pc.next = b;\n }\n\n return Pa ? a._currentValue : a._currentValue2;\n }\n\n var xc = !1;\n\n function yc(a) {\n a.updateQueue = {\n baseState: a.memoizedState,\n baseQueue: null,\n shared: {\n pending: null\n },\n effects: null\n };\n }\n\n function zc(a, b) {\n a = a.updateQueue;\n b.updateQueue === a && (b.updateQueue = {\n baseState: a.baseState,\n baseQueue: a.baseQueue,\n shared: a.shared,\n effects: a.effects\n });\n }\n\n function Ac(a, b) {\n a = {\n expirationTime: a,\n suspenseConfig: b,\n tag: 0,\n payload: null,\n callback: null,\n next: null\n };\n return a.next = a;\n }\n\n function Bc(a, b) {\n a = a.updateQueue;\n\n if (null !== a) {\n a = a.shared;\n var c = a.pending;\n null === c ? b.next = b : (b.next = c.next, c.next = b);\n a.pending = b;\n }\n }\n\n function Cc(a, b) {\n var c = a.alternate;\n null !== c && zc(c, a);\n a = a.updateQueue;\n c = a.baseQueue;\n null === c ? (a.baseQueue = b.next = b, b.next = b) : (b.next = c.next, c.next = b);\n }\n\n function Dc(a, b, c, d) {\n var e = a.updateQueue;\n xc = !1;\n var f = e.baseQueue,\n g = e.shared.pending;\n\n if (null !== g) {\n if (null !== f) {\n var h = f.next;\n f.next = g.next;\n g.next = h;\n }\n\n f = g;\n e.shared.pending = null;\n h = a.alternate;\n null !== h && (h = h.updateQueue, null !== h && (h.baseQueue = g));\n }\n\n if (null !== f) {\n h = f.next;\n var k = e.baseState,\n l = 0,\n q = null,\n r = null,\n w = null;\n\n if (null !== h) {\n var z = h;\n\n do {\n g = z.expirationTime;\n\n if (g < d) {\n var Q = {\n expirationTime: z.expirationTime,\n suspenseConfig: z.suspenseConfig,\n tag: z.tag,\n payload: z.payload,\n callback: z.callback,\n next: null\n };\n null === w ? (r = w = Q, q = k) : w = w.next = Q;\n g > l && (l = g);\n } else {\n null !== w && (w = w.next = {\n expirationTime: 1073741823,\n suspenseConfig: z.suspenseConfig,\n tag: z.tag,\n payload: z.payload,\n callback: z.callback,\n next: null\n });\n Ec(g, z.suspenseConfig);\n\n a: {\n var A = a,\n v = z;\n g = b;\n Q = c;\n\n switch (v.tag) {\n case 1:\n A = v.payload;\n\n if (\"function\" === typeof A) {\n k = A.call(Q, k, g);\n break a;\n }\n\n k = A;\n break a;\n\n case 3:\n A.effectTag = A.effectTag & -4097 | 64;\n\n case 0:\n A = v.payload;\n g = \"function\" === typeof A ? A.call(Q, k, g) : A;\n if (null === g || void 0 === g) break a;\n k = aa({}, k, g);\n break a;\n\n case 2:\n xc = !0;\n }\n }\n\n null !== z.callback && (a.effectTag |= 32, g = e.effects, null === g ? e.effects = [z] : g.push(z));\n }\n\n z = z.next;\n if (null === z || z === h) if (g = e.shared.pending, null === g) break;else z = f.next = g.next, g.next = h, e.baseQueue = f = g, e.shared.pending = null;\n } while (1);\n }\n\n null === w ? q = k : w.next = r;\n e.baseState = q;\n e.baseQueue = w;\n Gc(l);\n a.expirationTime = l;\n a.memoizedState = k;\n }\n }\n\n function Hc(a, b, c) {\n a = b.effects;\n b.effects = null;\n if (null !== a) for (b = 0; b < a.length; b++) {\n var d = a[b],\n e = d.callback;\n\n if (null !== e) {\n d.callback = null;\n d = e;\n e = c;\n if (\"function\" !== typeof d) throw Error(n(191, d));\n d.call(e);\n }\n }\n }\n\n var Ic = p.ReactCurrentBatchConfig,\n Jc = new ba.Component().refs;\n\n function Kc(a, b, c, d) {\n b = a.memoizedState;\n c = c(d, b);\n c = null === c || void 0 === c ? b : aa({}, b, c);\n a.memoizedState = c;\n 0 === a.expirationTime && (a.updateQueue.baseState = c);\n }\n\n var Oc = {\n isMounted: function isMounted(a) {\n return (a = a._reactInternalFiber) ? va(a) === a : !1;\n },\n enqueueSetState: function enqueueSetState(a, b, c) {\n a = a._reactInternalFiber;\n var d = Lc(),\n e = Ic.suspense;\n d = Mc(d, a, e);\n e = Ac(d, e);\n e.payload = b;\n void 0 !== c && null !== c && (e.callback = c);\n Bc(a, e);\n Nc(a, d);\n },\n enqueueReplaceState: function enqueueReplaceState(a, b, c) {\n a = a._reactInternalFiber;\n var d = Lc(),\n e = Ic.suspense;\n d = Mc(d, a, e);\n e = Ac(d, e);\n e.tag = 1;\n e.payload = b;\n void 0 !== c && null !== c && (e.callback = c);\n Bc(a, e);\n Nc(a, d);\n },\n enqueueForceUpdate: function enqueueForceUpdate(a, b) {\n a = a._reactInternalFiber;\n var c = Lc(),\n d = Ic.suspense;\n c = Mc(c, a, d);\n d = Ac(c, d);\n d.tag = 2;\n void 0 !== b && null !== b && (d.callback = b);\n Bc(a, d);\n Nc(a, c);\n }\n };\n\n function Pc(a, b, c, d, e, f, g) {\n a = a.stateNode;\n return \"function\" === typeof a.shouldComponentUpdate ? a.shouldComponentUpdate(d, f, g) : b.prototype && b.prototype.isPureReactComponent ? !lc(c, d) || !lc(e, f) : !0;\n }\n\n function Qc(a, b, c) {\n var d = !1,\n e = Cb;\n var f = b.contextType;\n \"object\" === (0, _typeof2.default)(f) && null !== f ? f = I(f) : (e = F(b) ? Db : D.current, d = b.contextTypes, f = (d = null !== d && void 0 !== d) ? Eb(a, e) : Cb);\n b = new b(c, f);\n a.memoizedState = null !== b.state && void 0 !== b.state ? b.state : null;\n b.updater = Oc;\n a.stateNode = b;\n b._reactInternalFiber = a;\n d && (a = a.stateNode, a.__reactInternalMemoizedUnmaskedChildContext = e, a.__reactInternalMemoizedMaskedChildContext = f);\n return b;\n }\n\n function Rc(a, b, c, d) {\n a = b.state;\n \"function\" === typeof b.componentWillReceiveProps && b.componentWillReceiveProps(c, d);\n \"function\" === typeof b.UNSAFE_componentWillReceiveProps && b.UNSAFE_componentWillReceiveProps(c, d);\n b.state !== a && Oc.enqueueReplaceState(b, b.state, null);\n }\n\n function Sc(a, b, c, d) {\n var e = a.stateNode;\n e.props = c;\n e.state = a.memoizedState;\n e.refs = Jc;\n yc(a);\n var f = b.contextType;\n \"object\" === (0, _typeof2.default)(f) && null !== f ? e.context = I(f) : (f = F(b) ? Db : D.current, e.context = Eb(a, f));\n Dc(a, c, e, d);\n e.state = a.memoizedState;\n f = b.getDerivedStateFromProps;\n \"function\" === typeof f && (Kc(a, b, f, c), e.state = a.memoizedState);\n \"function\" === typeof b.getDerivedStateFromProps || \"function\" === typeof e.getSnapshotBeforeUpdate || \"function\" !== typeof e.UNSAFE_componentWillMount && \"function\" !== typeof e.componentWillMount || (b = e.state, \"function\" === typeof e.componentWillMount && e.componentWillMount(), \"function\" === typeof e.UNSAFE_componentWillMount && e.UNSAFE_componentWillMount(), b !== e.state && Oc.enqueueReplaceState(e, e.state, null), Dc(a, c, e, d), e.state = a.memoizedState);\n \"function\" === typeof e.componentDidMount && (a.effectTag |= 4);\n }\n\n var Tc = Array.isArray;\n\n function Uc(a, b, c) {\n a = c.ref;\n\n if (null !== a && \"function\" !== typeof a && \"object\" !== (0, _typeof2.default)(a)) {\n if (c._owner) {\n c = c._owner;\n\n if (c) {\n if (1 !== c.tag) throw Error(n(309));\n var d = c.stateNode;\n }\n\n if (!d) throw Error(n(147, a));\n var e = \"\" + a;\n if (null !== b && null !== b.ref && \"function\" === typeof b.ref && b.ref._stringRef === e) return b.ref;\n\n b = function b(a) {\n var b = d.refs;\n b === Jc && (b = d.refs = {});\n null === a ? delete b[e] : b[e] = a;\n };\n\n b._stringRef = e;\n return b;\n }\n\n if (\"string\" !== typeof a) throw Error(n(284));\n if (!c._owner) throw Error(n(290, a));\n }\n\n return a;\n }\n\n function Vc(a, b) {\n if (\"textarea\" !== a.type) throw Error(n(31, \"[object Object]\" === Object.prototype.toString.call(b) ? \"object with keys {\" + Object.keys(b).join(\", \") + \"}\" : b, \"\"));\n }\n\n function Wc(a) {\n function b(b, c) {\n if (a) {\n var d = b.lastEffect;\n null !== d ? (d.nextEffect = c, b.lastEffect = c) : b.firstEffect = b.lastEffect = c;\n c.nextEffect = null;\n c.effectTag = 8;\n }\n }\n\n function c(c, d) {\n if (!a) return null;\n\n for (; null !== d;) {\n b(c, d), d = d.sibling;\n }\n\n return null;\n }\n\n function d(b, a) {\n for (b = new Map(); null !== a;) {\n null !== a.key ? b.set(a.key, a) : b.set(a.index, a), a = a.sibling;\n }\n\n return b;\n }\n\n function e(a, b) {\n a = Xc(a, b);\n a.index = 0;\n a.sibling = null;\n return a;\n }\n\n function f(b, c, d) {\n b.index = d;\n if (!a) return c;\n d = b.alternate;\n if (null !== d) return d = d.index, d < c ? (b.effectTag = 2, c) : d;\n b.effectTag = 2;\n return c;\n }\n\n function g(b) {\n a && null === b.alternate && (b.effectTag = 2);\n return b;\n }\n\n function h(b, a, c, d) {\n if (null === a || 6 !== a.tag) return a = Yc(c, b.mode, d), a.return = b, a;\n a = e(a, c);\n a.return = b;\n return a;\n }\n\n function k(a, b, c, d) {\n if (null !== b && b.elementType === c.type) return d = e(b, c.props), d.ref = Uc(a, b, c), d.return = a, d;\n d = Zc(c.type, c.key, c.props, null, a.mode, d);\n d.ref = Uc(a, b, c);\n d.return = a;\n return d;\n }\n\n function l(a, b, c, d) {\n if (null === b || 4 !== b.tag || b.stateNode.containerInfo !== c.containerInfo || b.stateNode.implementation !== c.implementation) return b = $c(c, a.mode, d), b.return = a, b;\n b = e(b, c.children || []);\n b.return = a;\n return b;\n }\n\n function q(b, a, c, d, f) {\n if (null === a || 7 !== a.tag) return a = ad(c, b.mode, d, f), a.return = b, a;\n a = e(a, c);\n a.return = b;\n return a;\n }\n\n function r(a, b, c) {\n if (\"string\" === typeof b || \"number\" === typeof b) return b = Yc(\"\" + b, a.mode, c), b.return = a, b;\n\n if (\"object\" === (0, _typeof2.default)(b) && null !== b) {\n switch (b.$$typeof) {\n case ca:\n return c = Zc(b.type, b.key, b.props, null, a.mode, c), c.ref = Uc(a, null, b), c.return = a, c;\n\n case da:\n return b = $c(b, a.mode, c), b.return = a, b;\n }\n\n if (Tc(b) || sa(b)) return b = ad(b, a.mode, c, null), b.return = a, b;\n Vc(a, b);\n }\n\n return null;\n }\n\n function w(b, a, c, d) {\n var e = null !== a ? a.key : null;\n if (\"string\" === typeof c || \"number\" === typeof c) return null !== e ? null : h(b, a, \"\" + c, d);\n\n if (\"object\" === (0, _typeof2.default)(c) && null !== c) {\n switch (c.$$typeof) {\n case ca:\n return c.key === e ? c.type === ea ? q(b, a, c.props.children, d, e) : k(b, a, c, d) : null;\n\n case da:\n return c.key === e ? l(b, a, c, d) : null;\n }\n\n if (Tc(c) || sa(c)) return null !== e ? null : q(b, a, c, d, null);\n Vc(b, c);\n }\n\n return null;\n }\n\n function z(b, a, c, d, e) {\n if (\"string\" === typeof d || \"number\" === typeof d) return b = b.get(c) || null, h(a, b, \"\" + d, e);\n\n if (\"object\" === (0, _typeof2.default)(d) && null !== d) {\n switch (d.$$typeof) {\n case ca:\n return b = b.get(null === d.key ? c : d.key) || null, d.type === ea ? q(a, b, d.props.children, e, d.key) : k(a, b, d, e);\n\n case da:\n return b = b.get(null === d.key ? c : d.key) || null, l(a, b, d, e);\n }\n\n if (Tc(d) || sa(d)) return b = b.get(c) || null, q(a, b, d, e, null);\n Vc(a, d);\n }\n\n return null;\n }\n\n function Q(e, g, h, k) {\n for (var l = null, v = null, t = g, x = g = 0, q = null; null !== t && x < h.length; x++) {\n t.index > x ? (q = t, t = null) : q = t.sibling;\n var y = w(e, t, h[x], k);\n\n if (null === y) {\n null === t && (t = q);\n break;\n }\n\n a && t && null === y.alternate && b(e, t);\n g = f(y, g, x);\n null === v ? l = y : v.sibling = y;\n v = y;\n t = q;\n }\n\n if (x === h.length) return c(e, t), l;\n\n if (null === t) {\n for (; x < h.length; x++) {\n t = r(e, h[x], k), null !== t && (g = f(t, g, x), null === v ? l = t : v.sibling = t, v = t);\n }\n\n return l;\n }\n\n for (t = d(e, t); x < h.length; x++) {\n q = z(t, e, x, h[x], k), null !== q && (a && null !== q.alternate && t.delete(null === q.key ? x : q.key), g = f(q, g, x), null === v ? l = q : v.sibling = q, v = q);\n }\n\n a && t.forEach(function (a) {\n return b(e, a);\n });\n return l;\n }\n\n function A(e, g, h, k) {\n var t = sa(h);\n if (\"function\" !== typeof t) throw Error(n(150));\n h = t.call(h);\n if (null == h) throw Error(n(151));\n\n for (var l = t = null, v = g, x = g = 0, q = null, y = h.next(); null !== v && !y.done; x++, y = h.next()) {\n v.index > x ? (q = v, v = null) : q = v.sibling;\n var A = w(e, v, y.value, k);\n\n if (null === A) {\n null === v && (v = q);\n break;\n }\n\n a && v && null === A.alternate && b(e, v);\n g = f(A, g, x);\n null === l ? t = A : l.sibling = A;\n l = A;\n v = q;\n }\n\n if (y.done) return c(e, v), t;\n\n if (null === v) {\n for (; !y.done; x++, y = h.next()) {\n y = r(e, y.value, k), null !== y && (g = f(y, g, x), null === l ? t = y : l.sibling = y, l = y);\n }\n\n return t;\n }\n\n for (v = d(e, v); !y.done; x++, y = h.next()) {\n y = z(v, e, x, y.value, k), null !== y && (a && null !== y.alternate && v.delete(null === y.key ? x : y.key), g = f(y, g, x), null === l ? t = y : l.sibling = y, l = y);\n }\n\n a && v.forEach(function (a) {\n return b(e, a);\n });\n return t;\n }\n\n return function (a, d, f, h) {\n var k = \"object\" === (0, _typeof2.default)(f) && null !== f && f.type === ea && null === f.key;\n k && (f = f.props.children);\n var l = \"object\" === (0, _typeof2.default)(f) && null !== f;\n if (l) switch (f.$$typeof) {\n case ca:\n a: {\n l = f.key;\n\n for (k = d; null !== k;) {\n if (k.key === l) {\n switch (k.tag) {\n case 7:\n if (f.type === ea) {\n c(a, k.sibling);\n d = e(k, f.props.children);\n d.return = a;\n a = d;\n break a;\n }\n\n break;\n\n default:\n if (k.elementType === f.type) {\n c(a, k.sibling);\n d = e(k, f.props);\n d.ref = Uc(a, k, f);\n d.return = a;\n a = d;\n break a;\n }\n\n }\n\n c(a, k);\n break;\n } else b(a, k);\n\n k = k.sibling;\n }\n\n f.type === ea ? (d = ad(f.props.children, a.mode, h, f.key), d.return = a, a = d) : (h = Zc(f.type, f.key, f.props, null, a.mode, h), h.ref = Uc(a, d, f), h.return = a, a = h);\n }\n\n return g(a);\n\n case da:\n a: {\n for (k = f.key; null !== d;) {\n if (d.key === k) {\n if (4 === d.tag && d.stateNode.containerInfo === f.containerInfo && d.stateNode.implementation === f.implementation) {\n c(a, d.sibling);\n d = e(d, f.children || []);\n d.return = a;\n a = d;\n break a;\n } else {\n c(a, d);\n break;\n }\n } else b(a, d);\n d = d.sibling;\n }\n\n d = $c(f, a.mode, h);\n d.return = a;\n a = d;\n }\n\n return g(a);\n }\n if (\"string\" === typeof f || \"number\" === typeof f) return f = \"\" + f, null !== d && 6 === d.tag ? (c(a, d.sibling), d = e(d, f), d.return = a, a = d) : (c(a, d), d = Yc(f, a.mode, h), d.return = a, a = d), g(a);\n if (Tc(f)) return Q(a, d, f, h);\n if (sa(f)) return A(a, d, f, h);\n l && Vc(a, f);\n if (\"undefined\" === typeof f && !k) switch (a.tag) {\n case 1:\n case 0:\n throw a = a.type, Error(n(152, a.displayName || a.name || \"Component\"));\n }\n return c(a, d);\n };\n }\n\n var bd = Wc(!0),\n cd = Wc(!1),\n dd = {},\n J = {\n current: dd\n },\n ed = {\n current: dd\n },\n fd = {\n current: dd\n };\n\n function gd(a) {\n if (a === dd) throw Error(n(174));\n return a;\n }\n\n function hd(a, b) {\n C(fd, b);\n C(ed, a);\n C(J, dd);\n a = Ba(b);\n B(J);\n C(J, a);\n }\n\n function id() {\n B(J);\n B(ed);\n B(fd);\n }\n\n function jd(a) {\n var b = gd(fd.current),\n c = gd(J.current);\n b = Ca(c, a.type, b);\n c !== b && (C(ed, a), C(J, b));\n }\n\n function kd(a) {\n ed.current === a && (B(J), B(ed));\n }\n\n var K = {\n current: 0\n };\n\n function ld(a) {\n for (var b = a; null !== b;) {\n if (13 === b.tag) {\n var c = b.memoizedState;\n if (null !== c && (c = c.dehydrated, null === c || pb(c) || qb(c))) return b;\n } else if (19 === b.tag && void 0 !== b.memoizedProps.revealOrder) {\n if (0 !== (b.effectTag & 64)) return b;\n } else if (null !== b.child) {\n b.child.return = b;\n b = b.child;\n continue;\n }\n\n if (b === a) break;\n\n for (; null === b.sibling;) {\n if (null === b.return || b.return === a) return null;\n b = b.return;\n }\n\n b.sibling.return = b.return;\n b = b.sibling;\n }\n\n return null;\n }\n\n function md(a, b) {\n return {\n responder: a,\n props: b\n };\n }\n\n var nd = p.ReactCurrentDispatcher,\n L = p.ReactCurrentBatchConfig,\n od = 0,\n M = null,\n N = null,\n O = null,\n pd = !1;\n\n function P() {\n throw Error(n(321));\n }\n\n function qd(a, b) {\n if (null === b) return !1;\n\n for (var c = 0; c < b.length && c < a.length; c++) {\n if (!jc(a[c], b[c])) return !1;\n }\n\n return !0;\n }\n\n function rd(a, b, c, d, e, f) {\n od = f;\n M = b;\n b.memoizedState = null;\n b.updateQueue = null;\n b.expirationTime = 0;\n nd.current = null === a || null === a.memoizedState ? sd : td;\n a = c(d, e);\n\n if (b.expirationTime === od) {\n f = 0;\n\n do {\n b.expirationTime = 0;\n if (!(25 > f)) throw Error(n(301));\n f += 1;\n O = N = null;\n b.updateQueue = null;\n nd.current = ud;\n a = c(d, e);\n } while (b.expirationTime === od);\n }\n\n nd.current = vd;\n b = null !== N && null !== N.next;\n od = 0;\n O = N = M = null;\n pd = !1;\n if (b) throw Error(n(300));\n return a;\n }\n\n function wd() {\n var a = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === O ? M.memoizedState = O = a : O = O.next = a;\n return O;\n }\n\n function xd() {\n if (null === N) {\n var a = M.alternate;\n a = null !== a ? a.memoizedState : null;\n } else a = N.next;\n\n var b = null === O ? M.memoizedState : O.next;\n if (null !== b) O = b, N = a;else {\n if (null === a) throw Error(n(310));\n N = a;\n a = {\n memoizedState: N.memoizedState,\n baseState: N.baseState,\n baseQueue: N.baseQueue,\n queue: N.queue,\n next: null\n };\n null === O ? M.memoizedState = O = a : O = O.next = a;\n }\n return O;\n }\n\n function yd(a, b) {\n return \"function\" === typeof b ? b(a) : b;\n }\n\n function zd(a) {\n var b = xd(),\n c = b.queue;\n if (null === c) throw Error(n(311));\n c.lastRenderedReducer = a;\n var d = N,\n e = d.baseQueue,\n f = c.pending;\n\n if (null !== f) {\n if (null !== e) {\n var g = e.next;\n e.next = f.next;\n f.next = g;\n }\n\n d.baseQueue = e = f;\n c.pending = null;\n }\n\n if (null !== e) {\n e = e.next;\n d = d.baseState;\n var h = g = f = null,\n k = e;\n\n do {\n var l = k.expirationTime;\n\n if (l < od) {\n var q = {\n expirationTime: k.expirationTime,\n suspenseConfig: k.suspenseConfig,\n action: k.action,\n eagerReducer: k.eagerReducer,\n eagerState: k.eagerState,\n next: null\n };\n null === h ? (g = h = q, f = d) : h = h.next = q;\n l > M.expirationTime && (M.expirationTime = l, Gc(l));\n } else null !== h && (h = h.next = {\n expirationTime: 1073741823,\n suspenseConfig: k.suspenseConfig,\n action: k.action,\n eagerReducer: k.eagerReducer,\n eagerState: k.eagerState,\n next: null\n }), Ec(l, k.suspenseConfig), d = k.eagerReducer === a ? k.eagerState : a(d, k.action);\n\n k = k.next;\n } while (null !== k && k !== e);\n\n null === h ? f = d : h.next = g;\n jc(d, b.memoizedState) || (wc = !0);\n b.memoizedState = d;\n b.baseState = f;\n b.baseQueue = h;\n c.lastRenderedState = d;\n }\n\n return [b.memoizedState, c.dispatch];\n }\n\n function Ad(a) {\n var b = xd(),\n c = b.queue;\n if (null === c) throw Error(n(311));\n c.lastRenderedReducer = a;\n var d = c.dispatch,\n e = c.pending,\n f = b.memoizedState;\n\n if (null !== e) {\n c.pending = null;\n var g = e = e.next;\n\n do {\n f = a(f, g.action), g = g.next;\n } while (g !== e);\n\n jc(f, b.memoizedState) || (wc = !0);\n b.memoizedState = f;\n null === b.baseQueue && (b.baseState = f);\n c.lastRenderedState = f;\n }\n\n return [f, d];\n }\n\n function Bd(a) {\n var b = wd();\n \"function\" === typeof a && (a = a());\n b.memoizedState = b.baseState = a;\n a = b.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: yd,\n lastRenderedState: a\n };\n a = a.dispatch = Cd.bind(null, M, a);\n return [b.memoizedState, a];\n }\n\n function Dd(a, b, c, d) {\n a = {\n tag: a,\n create: b,\n destroy: c,\n deps: d,\n next: null\n };\n b = M.updateQueue;\n null === b ? (b = {\n lastEffect: null\n }, M.updateQueue = b, b.lastEffect = a.next = a) : (c = b.lastEffect, null === c ? b.lastEffect = a.next = a : (d = c.next, c.next = a, a.next = d, b.lastEffect = a));\n return a;\n }\n\n function Ed() {\n return xd().memoizedState;\n }\n\n function Fd(a, b, c, d) {\n var e = wd();\n M.effectTag |= a;\n e.memoizedState = Dd(1 | b, c, void 0, void 0 === d ? null : d);\n }\n\n function Gd(a, b, c, d) {\n var e = xd();\n d = void 0 === d ? null : d;\n var f = void 0;\n\n if (null !== N) {\n var g = N.memoizedState;\n f = g.destroy;\n\n if (null !== d && qd(d, g.deps)) {\n Dd(b, c, f, d);\n return;\n }\n }\n\n M.effectTag |= a;\n e.memoizedState = Dd(1 | b, c, f, d);\n }\n\n function Hd(a, b) {\n return Fd(516, 4, a, b);\n }\n\n function Id(a, b) {\n return Gd(516, 4, a, b);\n }\n\n function Jd(a, b) {\n return Gd(4, 2, a, b);\n }\n\n function Kd(a, b) {\n if (\"function\" === typeof b) return a = a(), b(a), function () {\n b(null);\n };\n if (null !== b && void 0 !== b) return a = a(), b.current = a, function () {\n b.current = null;\n };\n }\n\n function Ld(a, b, c) {\n c = null !== c && void 0 !== c ? c.concat([a]) : null;\n return Gd(4, 2, Kd.bind(null, b, a), c);\n }\n\n function Md() {}\n\n function Nd(a, b) {\n wd().memoizedState = [a, void 0 === b ? null : b];\n return a;\n }\n\n function Od(a, b) {\n var c = xd();\n b = void 0 === b ? null : b;\n var d = c.memoizedState;\n if (null !== d && null !== b && qd(b, d[1])) return d[0];\n c.memoizedState = [a, b];\n return a;\n }\n\n function Pd(a, b) {\n var c = xd();\n b = void 0 === b ? null : b;\n var d = c.memoizedState;\n if (null !== d && null !== b && qd(b, d[1])) return d[0];\n a = a();\n c.memoizedState = [a, b];\n return a;\n }\n\n function Qd(a, b, c) {\n var d = bc();\n dc(98 > d ? 98 : d, function () {\n a(!0);\n });\n dc(97 < d ? 97 : d, function () {\n var d = L.suspense;\n L.suspense = void 0 === b ? null : b;\n\n try {\n a(!1), c();\n } finally {\n L.suspense = d;\n }\n });\n }\n\n function Cd(a, b, c) {\n var d = Lc(),\n e = Ic.suspense;\n d = Mc(d, a, e);\n e = {\n expirationTime: d,\n suspenseConfig: e,\n action: c,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n var f = b.pending;\n null === f ? e.next = e : (e.next = f.next, f.next = e);\n b.pending = e;\n f = a.alternate;\n if (a === M || null !== f && f === M) pd = !0, e.expirationTime = od, M.expirationTime = od;else {\n if (0 === a.expirationTime && (null === f || 0 === f.expirationTime) && (f = b.lastRenderedReducer, null !== f)) try {\n var g = b.lastRenderedState,\n h = f(g, c);\n e.eagerReducer = f;\n e.eagerState = h;\n if (jc(h, g)) return;\n } catch (k) {} finally {}\n Nc(a, d);\n }\n }\n\n var vd = {\n readContext: I,\n useCallback: P,\n useContext: P,\n useEffect: P,\n useImperativeHandle: P,\n useLayoutEffect: P,\n useMemo: P,\n useReducer: P,\n useRef: P,\n useState: P,\n useDebugValue: P,\n useResponder: P,\n useDeferredValue: P,\n useTransition: P\n },\n sd = {\n readContext: I,\n useCallback: Nd,\n useContext: I,\n useEffect: Hd,\n useImperativeHandle: function useImperativeHandle(a, b, c) {\n c = null !== c && void 0 !== c ? c.concat([a]) : null;\n return Fd(4, 2, Kd.bind(null, b, a), c);\n },\n useLayoutEffect: function useLayoutEffect(a, b) {\n return Fd(4, 2, a, b);\n },\n useMemo: function useMemo(a, b) {\n var c = wd();\n b = void 0 === b ? null : b;\n a = a();\n c.memoizedState = [a, b];\n return a;\n },\n useReducer: function useReducer(a, b, c) {\n var d = wd();\n b = void 0 !== c ? c(b) : b;\n d.memoizedState = d.baseState = b;\n a = d.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: a,\n lastRenderedState: b\n };\n a = a.dispatch = Cd.bind(null, M, a);\n return [d.memoizedState, a];\n },\n useRef: function useRef(a) {\n var b = wd();\n a = {\n current: a\n };\n return b.memoizedState = a;\n },\n useState: Bd,\n useDebugValue: Md,\n useResponder: md,\n useDeferredValue: function useDeferredValue(a, b) {\n var c = Bd(a),\n d = c[0],\n e = c[1];\n Hd(function () {\n var c = L.suspense;\n L.suspense = void 0 === b ? null : b;\n\n try {\n e(a);\n } finally {\n L.suspense = c;\n }\n }, [a, b]);\n return d;\n },\n useTransition: function useTransition(a) {\n var b = Bd(!1),\n c = b[0];\n b = b[1];\n return [Nd(Qd.bind(null, b, a), [b, a]), c];\n }\n },\n td = {\n readContext: I,\n useCallback: Od,\n useContext: I,\n useEffect: Id,\n useImperativeHandle: Ld,\n useLayoutEffect: Jd,\n useMemo: Pd,\n useReducer: zd,\n useRef: Ed,\n useState: function useState() {\n return zd(yd);\n },\n useDebugValue: Md,\n useResponder: md,\n useDeferredValue: function useDeferredValue(a, b) {\n var c = zd(yd),\n d = c[0],\n e = c[1];\n Id(function () {\n var c = L.suspense;\n L.suspense = void 0 === b ? null : b;\n\n try {\n e(a);\n } finally {\n L.suspense = c;\n }\n }, [a, b]);\n return d;\n },\n useTransition: function useTransition(a) {\n var b = zd(yd),\n c = b[0];\n b = b[1];\n return [Od(Qd.bind(null, b, a), [b, a]), c];\n }\n },\n ud = {\n readContext: I,\n useCallback: Od,\n useContext: I,\n useEffect: Id,\n useImperativeHandle: Ld,\n useLayoutEffect: Jd,\n useMemo: Pd,\n useReducer: Ad,\n useRef: Ed,\n useState: function useState() {\n return Ad(yd);\n },\n useDebugValue: Md,\n useResponder: md,\n useDeferredValue: function useDeferredValue(a, b) {\n var c = Ad(yd),\n d = c[0],\n e = c[1];\n Id(function () {\n var c = L.suspense;\n L.suspense = void 0 === b ? null : b;\n\n try {\n e(a);\n } finally {\n L.suspense = c;\n }\n }, [a, b]);\n return d;\n },\n useTransition: function useTransition(a) {\n var b = Ad(yd),\n c = b[0];\n b = b[1];\n return [Od(Qd.bind(null, b, a), [b, a]), c];\n }\n },\n Rd = null,\n Sd = null,\n Td = !1;\n\n function Ud(a, b) {\n var c = Vd(5, null, null, 0);\n c.elementType = \"DELETED\";\n c.type = \"DELETED\";\n c.stateNode = b;\n c.return = a;\n c.effectTag = 8;\n null !== a.lastEffect ? (a.lastEffect.nextEffect = c, a.lastEffect = c) : a.firstEffect = a.lastEffect = c;\n }\n\n function Wd(a, b) {\n switch (a.tag) {\n case 5:\n return b = nb(b, a.type, a.pendingProps), null !== b ? (a.stateNode = b, !0) : !1;\n\n case 6:\n return b = ob(b, a.pendingProps), null !== b ? (a.stateNode = b, !0) : !1;\n\n case 13:\n return !1;\n\n default:\n return !1;\n }\n }\n\n function Xd(a) {\n if (Td) {\n var b = Sd;\n\n if (b) {\n var c = b;\n\n if (!Wd(a, b)) {\n b = rb(c);\n\n if (!b || !Wd(a, b)) {\n a.effectTag = a.effectTag & -1025 | 2;\n Td = !1;\n Rd = a;\n return;\n }\n\n Ud(Rd, c);\n }\n\n Rd = a;\n Sd = sb(b);\n } else a.effectTag = a.effectTag & -1025 | 2, Td = !1, Rd = a;\n }\n }\n\n function Yd(a) {\n for (a = a.return; null !== a && 5 !== a.tag && 3 !== a.tag && 13 !== a.tag;) {\n a = a.return;\n }\n\n Rd = a;\n }\n\n function Zd(a) {\n if (!Sa || a !== Rd) return !1;\n if (!Td) return Yd(a), Td = !0, !1;\n var b = a.type;\n if (5 !== a.tag || \"head\" !== b && \"body\" !== b && !Ja(b, a.memoizedProps)) for (b = Sd; b;) {\n Ud(a, b), b = rb(b);\n }\n Yd(a);\n\n if (13 === a.tag) {\n if (!Sa) throw Error(n(316));\n a = a.memoizedState;\n a = null !== a ? a.dehydrated : null;\n if (!a) throw Error(n(317));\n Sd = vb(a);\n } else Sd = Rd ? rb(a.stateNode) : null;\n\n return !0;\n }\n\n function $d() {\n Sa && (Sd = Rd = null, Td = !1);\n }\n\n var ae = p.ReactCurrentOwner,\n wc = !1;\n\n function R(a, b, c, d) {\n b.child = null === a ? cd(b, null, c, d) : bd(b, a.child, c, d);\n }\n\n function be(a, b, c, d, e) {\n c = c.render;\n var f = b.ref;\n vc(b, e);\n d = rd(a, b, c, d, f, e);\n if (null !== a && !wc) return b.updateQueue = a.updateQueue, b.effectTag &= -517, a.expirationTime <= e && (a.expirationTime = 0), ce(a, b, e);\n b.effectTag |= 1;\n R(a, b, d, e);\n return b.child;\n }\n\n function de(a, b, c, d, e, f) {\n if (null === a) {\n var g = c.type;\n if (\"function\" === typeof g && !ee(g) && void 0 === g.defaultProps && null === c.compare && void 0 === c.defaultProps) return b.tag = 15, b.type = g, fe(a, b, g, d, e, f);\n a = Zc(c.type, null, d, null, b.mode, f);\n a.ref = b.ref;\n a.return = b;\n return b.child = a;\n }\n\n g = a.child;\n if (e < f && (e = g.memoizedProps, c = c.compare, c = null !== c ? c : lc, c(e, d) && a.ref === b.ref)) return ce(a, b, f);\n b.effectTag |= 1;\n a = Xc(g, d);\n a.ref = b.ref;\n a.return = b;\n return b.child = a;\n }\n\n function fe(a, b, c, d, e, f) {\n return null !== a && lc(a.memoizedProps, d) && a.ref === b.ref && (wc = !1, e < f) ? (b.expirationTime = a.expirationTime, ce(a, b, f)) : ge(a, b, c, d, f);\n }\n\n function he(a, b) {\n var c = b.ref;\n if (null === a && null !== c || null !== a && a.ref !== c) b.effectTag |= 128;\n }\n\n function ge(a, b, c, d, e) {\n var f = F(c) ? Db : D.current;\n f = Eb(b, f);\n vc(b, e);\n c = rd(a, b, c, d, f, e);\n if (null !== a && !wc) return b.updateQueue = a.updateQueue, b.effectTag &= -517, a.expirationTime <= e && (a.expirationTime = 0), ce(a, b, e);\n b.effectTag |= 1;\n R(a, b, c, e);\n return b.child;\n }\n\n function ie(a, b, c, d, e) {\n if (F(c)) {\n var f = !0;\n Ib(b);\n } else f = !1;\n\n vc(b, e);\n if (null === b.stateNode) null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2), Qc(b, c, d), Sc(b, c, d, e), d = !0;else if (null === a) {\n var g = b.stateNode,\n h = b.memoizedProps;\n g.props = h;\n var k = g.context,\n l = c.contextType;\n \"object\" === (0, _typeof2.default)(l) && null !== l ? l = I(l) : (l = F(c) ? Db : D.current, l = Eb(b, l));\n var q = c.getDerivedStateFromProps,\n r = \"function\" === typeof q || \"function\" === typeof g.getSnapshotBeforeUpdate;\n r || \"function\" !== typeof g.UNSAFE_componentWillReceiveProps && \"function\" !== typeof g.componentWillReceiveProps || (h !== d || k !== l) && Rc(b, g, d, l);\n xc = !1;\n var w = b.memoizedState;\n g.state = w;\n Dc(b, d, g, e);\n k = b.memoizedState;\n h !== d || w !== k || E.current || xc ? (\"function\" === typeof q && (Kc(b, c, q, d), k = b.memoizedState), (h = xc || Pc(b, c, h, d, w, k, l)) ? (r || \"function\" !== typeof g.UNSAFE_componentWillMount && \"function\" !== typeof g.componentWillMount || (\"function\" === typeof g.componentWillMount && g.componentWillMount(), \"function\" === typeof g.UNSAFE_componentWillMount && g.UNSAFE_componentWillMount()), \"function\" === typeof g.componentDidMount && (b.effectTag |= 4)) : (\"function\" === typeof g.componentDidMount && (b.effectTag |= 4), b.memoizedProps = d, b.memoizedState = k), g.props = d, g.state = k, g.context = l, d = h) : (\"function\" === typeof g.componentDidMount && (b.effectTag |= 4), d = !1);\n } else g = b.stateNode, zc(a, b), h = b.memoizedProps, g.props = b.type === b.elementType ? h : mc(b.type, h), k = g.context, l = c.contextType, \"object\" === (0, _typeof2.default)(l) && null !== l ? l = I(l) : (l = F(c) ? Db : D.current, l = Eb(b, l)), q = c.getDerivedStateFromProps, (r = \"function\" === typeof q || \"function\" === typeof g.getSnapshotBeforeUpdate) || \"function\" !== typeof g.UNSAFE_componentWillReceiveProps && \"function\" !== typeof g.componentWillReceiveProps || (h !== d || k !== l) && Rc(b, g, d, l), xc = !1, k = b.memoizedState, g.state = k, Dc(b, d, g, e), w = b.memoizedState, h !== d || k !== w || E.current || xc ? (\"function\" === typeof q && (Kc(b, c, q, d), w = b.memoizedState), (q = xc || Pc(b, c, h, d, k, w, l)) ? (r || \"function\" !== typeof g.UNSAFE_componentWillUpdate && \"function\" !== typeof g.componentWillUpdate || (\"function\" === typeof g.componentWillUpdate && g.componentWillUpdate(d, w, l), \"function\" === typeof g.UNSAFE_componentWillUpdate && g.UNSAFE_componentWillUpdate(d, w, l)), \"function\" === typeof g.componentDidUpdate && (b.effectTag |= 4), \"function\" === typeof g.getSnapshotBeforeUpdate && (b.effectTag |= 256)) : (\"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 4), \"function\" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 256), b.memoizedProps = d, b.memoizedState = w), g.props = d, g.state = w, g.context = l, d = q) : (\"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 4), \"function\" !== typeof g.getSnapshotBeforeUpdate || h === a.memoizedProps && k === a.memoizedState || (b.effectTag |= 256), d = !1);\n return je(a, b, c, d, f, e);\n }\n\n function je(a, b, c, d, e, f) {\n he(a, b);\n var g = 0 !== (b.effectTag & 64);\n if (!d && !g) return e && Jb(b, c, !1), ce(a, b, f);\n d = b.stateNode;\n ae.current = b;\n var h = g && \"function\" !== typeof c.getDerivedStateFromError ? null : d.render();\n b.effectTag |= 1;\n null !== a && g ? (b.child = bd(b, a.child, null, f), b.child = bd(b, null, h, f)) : R(a, b, h, f);\n b.memoizedState = d.state;\n e && Jb(b, c, !0);\n return b.child;\n }\n\n function le(a) {\n var b = a.stateNode;\n b.pendingContext ? Gb(a, b.pendingContext, b.pendingContext !== b.context) : b.context && Gb(a, b.context, !1);\n hd(a, b.containerInfo);\n }\n\n var me = {\n dehydrated: null,\n retryTime: 0\n };\n\n function ne(a, b, c) {\n var d = b.mode,\n e = b.pendingProps,\n f = K.current,\n g = !1,\n h;\n (h = 0 !== (b.effectTag & 64)) || (h = 0 !== (f & 2) && (null === a || null !== a.memoizedState));\n h ? (g = !0, b.effectTag &= -65) : null !== a && null === a.memoizedState || void 0 === e.fallback || !0 === e.unstable_avoidThisFallback || (f |= 1);\n C(K, f & 1);\n\n if (null === a) {\n void 0 !== e.fallback && Xd(b);\n\n if (g) {\n g = e.fallback;\n e = ad(null, d, 0, null);\n e.return = b;\n if (0 === (b.mode & 2)) for (a = null !== b.memoizedState ? b.child.child : b.child, e.child = a; null !== a;) {\n a.return = e, a = a.sibling;\n }\n c = ad(g, d, c, null);\n c.return = b;\n e.sibling = c;\n b.memoizedState = me;\n b.child = e;\n return c;\n }\n\n d = e.children;\n b.memoizedState = null;\n return b.child = cd(b, null, d, c);\n }\n\n if (null !== a.memoizedState) {\n a = a.child;\n d = a.sibling;\n\n if (g) {\n e = e.fallback;\n c = Xc(a, a.pendingProps);\n c.return = b;\n if (0 === (b.mode & 2) && (g = null !== b.memoizedState ? b.child.child : b.child, g !== a.child)) for (c.child = g; null !== g;) {\n g.return = c, g = g.sibling;\n }\n d = Xc(d, e);\n d.return = b;\n c.sibling = d;\n c.childExpirationTime = 0;\n b.memoizedState = me;\n b.child = c;\n return d;\n }\n\n c = bd(b, a.child, e.children, c);\n b.memoizedState = null;\n return b.child = c;\n }\n\n a = a.child;\n\n if (g) {\n g = e.fallback;\n e = ad(null, d, 0, null);\n e.return = b;\n e.child = a;\n null !== a && (a.return = e);\n if (0 === (b.mode & 2)) for (a = null !== b.memoizedState ? b.child.child : b.child, e.child = a; null !== a;) {\n a.return = e, a = a.sibling;\n }\n c = ad(g, d, c, null);\n c.return = b;\n e.sibling = c;\n c.effectTag |= 2;\n e.childExpirationTime = 0;\n b.memoizedState = me;\n b.child = e;\n return c;\n }\n\n b.memoizedState = null;\n return b.child = bd(b, a, e.children, c);\n }\n\n function oe(a, b) {\n a.expirationTime < b && (a.expirationTime = b);\n var c = a.alternate;\n null !== c && c.expirationTime < b && (c.expirationTime = b);\n uc(a.return, b);\n }\n\n function pe(a, b, c, d, e, f) {\n var g = a.memoizedState;\n null === g ? a.memoizedState = {\n isBackwards: b,\n rendering: null,\n renderingStartTime: 0,\n last: d,\n tail: c,\n tailExpiration: 0,\n tailMode: e,\n lastEffect: f\n } : (g.isBackwards = b, g.rendering = null, g.renderingStartTime = 0, g.last = d, g.tail = c, g.tailExpiration = 0, g.tailMode = e, g.lastEffect = f);\n }\n\n function qe(a, b, c) {\n var d = b.pendingProps,\n e = d.revealOrder,\n f = d.tail;\n R(a, b, d.children, c);\n d = K.current;\n if (0 !== (d & 2)) d = d & 1 | 2, b.effectTag |= 64;else {\n if (null !== a && 0 !== (a.effectTag & 64)) a: for (a = b.child; null !== a;) {\n if (13 === a.tag) null !== a.memoizedState && oe(a, c);else if (19 === a.tag) oe(a, c);else if (null !== a.child) {\n a.child.return = a;\n a = a.child;\n continue;\n }\n if (a === b) break a;\n\n for (; null === a.sibling;) {\n if (null === a.return || a.return === b) break a;\n a = a.return;\n }\n\n a.sibling.return = a.return;\n a = a.sibling;\n }\n d &= 1;\n }\n C(K, d);\n if (0 === (b.mode & 2)) b.memoizedState = null;else switch (e) {\n case \"forwards\":\n c = b.child;\n\n for (e = null; null !== c;) {\n a = c.alternate, null !== a && null === ld(a) && (e = c), c = c.sibling;\n }\n\n c = e;\n null === c ? (e = b.child, b.child = null) : (e = c.sibling, c.sibling = null);\n pe(b, !1, e, c, f, b.lastEffect);\n break;\n\n case \"backwards\":\n c = null;\n e = b.child;\n\n for (b.child = null; null !== e;) {\n a = e.alternate;\n\n if (null !== a && null === ld(a)) {\n b.child = e;\n break;\n }\n\n a = e.sibling;\n e.sibling = c;\n c = e;\n e = a;\n }\n\n pe(b, !0, c, null, f, b.lastEffect);\n break;\n\n case \"together\":\n pe(b, !1, null, null, void 0, b.lastEffect);\n break;\n\n default:\n b.memoizedState = null;\n }\n return b.child;\n }\n\n function ce(a, b, c) {\n null !== a && (b.dependencies = a.dependencies);\n var d = b.expirationTime;\n 0 !== d && Gc(d);\n if (b.childExpirationTime < c) return null;\n if (null !== a && b.child !== a.child) throw Error(n(153));\n\n if (null !== b.child) {\n a = b.child;\n c = Xc(a, a.pendingProps);\n b.child = c;\n\n for (c.return = b; null !== a.sibling;) {\n a = a.sibling, c = c.sibling = Xc(a, a.pendingProps), c.return = b;\n }\n\n c.sibling = null;\n }\n\n return b.child;\n }\n\n function re(a) {\n a.effectTag |= 4;\n }\n\n var _se, te, ue, ve;\n\n if (Qa) _se = function se(a, b) {\n for (var c = b.child; null !== c;) {\n if (5 === c.tag || 6 === c.tag) Ga(a, c.stateNode);else if (4 !== c.tag && null !== c.child) {\n c.child.return = c;\n c = c.child;\n continue;\n }\n if (c === b) break;\n\n for (; null === c.sibling;) {\n if (null === c.return || c.return === b) return;\n c = c.return;\n }\n\n c.sibling.return = c.return;\n c = c.sibling;\n }\n }, te = function te() {}, ue = function ue(a, b, c, d, e) {\n a = a.memoizedProps;\n\n if (a !== d) {\n var f = b.stateNode,\n g = gd(J.current);\n c = Ia(f, c, a, d, e, g);\n (b.updateQueue = c) && re(b);\n }\n }, ve = function ve(a, b, c, d) {\n c !== d && re(b);\n };else if (Ra) {\n _se = function se(a, b, c, d) {\n for (var e = b.child; null !== e;) {\n if (5 === e.tag) {\n var f = e.stateNode;\n c && d && (f = lb(f, e.type, e.memoizedProps, e));\n Ga(a, f);\n } else if (6 === e.tag) f = e.stateNode, c && d && (f = mb(f, e.memoizedProps, e)), Ga(a, f);else if (4 !== e.tag) {\n if (13 === e.tag && 0 !== (e.effectTag & 4) && (f = null !== e.memoizedState)) {\n var g = e.child;\n\n if (null !== g && (null !== g.child && (g.child.return = g, _se(a, g, !0, f)), f = g.sibling, null !== f)) {\n f.return = e;\n e = f;\n continue;\n }\n }\n\n if (null !== e.child) {\n e.child.return = e;\n e = e.child;\n continue;\n }\n }\n\n if (e === b) break;\n\n for (; null === e.sibling;) {\n if (null === e.return || e.return === b) return;\n e = e.return;\n }\n\n e.sibling.return = e.return;\n e = e.sibling;\n }\n };\n\n var we = function we(a, b, c, d) {\n for (var e = b.child; null !== e;) {\n if (5 === e.tag) {\n var f = e.stateNode;\n c && d && (f = lb(f, e.type, e.memoizedProps, e));\n ib(a, f);\n } else if (6 === e.tag) f = e.stateNode, c && d && (f = mb(f, e.memoizedProps, e)), ib(a, f);else if (4 !== e.tag) {\n if (13 === e.tag && 0 !== (e.effectTag & 4) && (f = null !== e.memoizedState)) {\n var g = e.child;\n\n if (null !== g && (null !== g.child && (g.child.return = g, we(a, g, !0, f)), f = g.sibling, null !== f)) {\n f.return = e;\n e = f;\n continue;\n }\n }\n\n if (null !== e.child) {\n e.child.return = e;\n e = e.child;\n continue;\n }\n }\n\n if (e === b) break;\n\n for (; null === e.sibling;) {\n if (null === e.return || e.return === b) return;\n e = e.return;\n }\n\n e.sibling.return = e.return;\n e = e.sibling;\n }\n };\n\n te = function te(a) {\n var b = a.stateNode;\n\n if (null !== a.firstEffect) {\n var c = b.containerInfo,\n d = hb(c);\n we(d, a, !1, !1);\n b.pendingChildren = d;\n re(a);\n jb(c, d);\n }\n };\n\n ue = function ue(a, b, c, d, e) {\n var f = a.stateNode,\n g = a.memoizedProps;\n if ((a = null === b.firstEffect) && g === d) b.stateNode = f;else {\n var h = b.stateNode,\n k = gd(J.current),\n l = null;\n g !== d && (l = Ia(h, c, g, d, e, k));\n a && null === l ? b.stateNode = f : (f = gb(f, l, c, g, d, b, a, h), Ha(f, c, d, e, k) && re(b), b.stateNode = f, a ? re(b) : _se(f, b, !1, !1));\n }\n };\n\n ve = function ve(a, b, c, d) {\n c !== d ? (a = gd(fd.current), c = gd(J.current), b.stateNode = La(d, a, c, b), re(b)) : b.stateNode = a.stateNode;\n };\n } else te = function te() {}, ue = function ue() {}, ve = function ve() {};\n\n function xe(a, b) {\n switch (a.tailMode) {\n case \"hidden\":\n b = a.tail;\n\n for (var c = null; null !== b;) {\n null !== b.alternate && (c = b), b = b.sibling;\n }\n\n null === c ? a.tail = null : c.sibling = null;\n break;\n\n case \"collapsed\":\n c = a.tail;\n\n for (var d = null; null !== c;) {\n null !== c.alternate && (d = c), c = c.sibling;\n }\n\n null === d ? b || null === a.tail ? a.tail = null : a.tail.sibling = null : d.sibling = null;\n }\n }\n\n function ye(a, b, c) {\n var d = b.pendingProps;\n\n switch (b.tag) {\n case 2:\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return null;\n\n case 1:\n return F(b.type) && Fb(), null;\n\n case 3:\n return id(), B(E), B(D), d = b.stateNode, d.pendingContext && (d.context = d.pendingContext, d.pendingContext = null), (null === a || null === a.child) && Zd(b) && re(b), te(b), null;\n\n case 5:\n kd(b);\n var e = gd(fd.current);\n c = b.type;\n if (null !== a && null != b.stateNode) ue(a, b, c, d, e), a.ref !== b.ref && (b.effectTag |= 128);else {\n if (!d) {\n if (null === b.stateNode) throw Error(n(166));\n return null;\n }\n\n a = gd(J.current);\n\n if (Zd(b)) {\n if (!Sa) throw Error(n(175));\n a = tb(b.stateNode, b.type, b.memoizedProps, e, a, b);\n b.updateQueue = a;\n null !== a && re(b);\n } else {\n var f = Fa(c, d, e, a, b);\n\n _se(f, b, !1, !1);\n\n b.stateNode = f;\n Ha(f, c, d, e, a) && re(b);\n }\n\n null !== b.ref && (b.effectTag |= 128);\n }\n return null;\n\n case 6:\n if (a && null != b.stateNode) ve(a, b, a.memoizedProps, d);else {\n if (\"string\" !== typeof d && null === b.stateNode) throw Error(n(166));\n a = gd(fd.current);\n e = gd(J.current);\n\n if (Zd(b)) {\n if (!Sa) throw Error(n(176));\n ub(b.stateNode, b.memoizedProps, b) && re(b);\n } else b.stateNode = La(d, a, e, b);\n }\n return null;\n\n case 13:\n B(K);\n d = b.memoizedState;\n if (0 !== (b.effectTag & 64)) return b.expirationTime = c, b;\n d = null !== d;\n e = !1;\n null === a ? void 0 !== b.memoizedProps.fallback && Zd(b) : (c = a.memoizedState, e = null !== c, d || null === c || (c = a.child.sibling, null !== c && (f = b.firstEffect, null !== f ? (b.firstEffect = c, c.nextEffect = f) : (b.firstEffect = b.lastEffect = c, c.nextEffect = null), c.effectTag = 8)));\n if (d && !e && 0 !== (b.mode & 2)) if (null === a && !0 !== b.memoizedProps.unstable_avoidThisFallback || 0 !== (K.current & 1)) S === ze && (S = Ae);else {\n if (S === ze || S === Ae) S = Be;\n 0 !== Ce && null !== T && (De(T, U), Ee(T, Ce));\n }\n Ra && d && (b.effectTag |= 4);\n Qa && (d || e) && (b.effectTag |= 4);\n return null;\n\n case 4:\n return id(), te(b), null;\n\n case 10:\n return tc(b), null;\n\n case 17:\n return F(b.type) && Fb(), null;\n\n case 19:\n B(K);\n d = b.memoizedState;\n if (null === d) return null;\n e = 0 !== (b.effectTag & 64);\n f = d.rendering;\n if (null === f) {\n if (e) xe(d, !1);else {\n if (S !== ze || null !== a && 0 !== (a.effectTag & 64)) for (a = b.child; null !== a;) {\n f = ld(a);\n\n if (null !== f) {\n b.effectTag |= 64;\n xe(d, !1);\n a = f.updateQueue;\n null !== a && (b.updateQueue = a, b.effectTag |= 4);\n null === d.lastEffect && (b.firstEffect = null);\n b.lastEffect = d.lastEffect;\n a = c;\n\n for (d = b.child; null !== d;) {\n e = d, c = a, e.effectTag &= 2, e.nextEffect = null, e.firstEffect = null, e.lastEffect = null, f = e.alternate, null === f ? (e.childExpirationTime = 0, e.expirationTime = c, e.child = null, e.memoizedProps = null, e.memoizedState = null, e.updateQueue = null, e.dependencies = null) : (e.childExpirationTime = f.childExpirationTime, e.expirationTime = f.expirationTime, e.child = f.child, e.memoizedProps = f.memoizedProps, e.memoizedState = f.memoizedState, e.updateQueue = f.updateQueue, c = f.dependencies, e.dependencies = null === c ? null : {\n expirationTime: c.expirationTime,\n firstContext: c.firstContext,\n responders: c.responders\n }), d = d.sibling;\n }\n\n C(K, K.current & 1 | 2);\n return b.child;\n }\n\n a = a.sibling;\n }\n }\n } else {\n if (!e) if (a = ld(f), null !== a) {\n if (b.effectTag |= 64, e = !0, a = a.updateQueue, null !== a && (b.updateQueue = a, b.effectTag |= 4), xe(d, !0), null === d.tail && \"hidden\" === d.tailMode && !f.alternate) return b = b.lastEffect = d.lastEffect, null !== b && (b.nextEffect = null), null;\n } else 2 * G() - d.renderingStartTime > d.tailExpiration && 1 < c && (b.effectTag |= 64, e = !0, xe(d, !1), b.expirationTime = b.childExpirationTime = c - 1);\n d.isBackwards ? (f.sibling = b.child, b.child = f) : (a = d.last, null !== a ? a.sibling = f : b.child = f, d.last = f);\n }\n return null !== d.tail ? (0 === d.tailExpiration && (d.tailExpiration = G() + 500), a = d.tail, d.rendering = a, d.tail = a.sibling, d.lastEffect = b.lastEffect, d.renderingStartTime = G(), a.sibling = null, b = K.current, C(K, e ? b & 1 | 2 : b & 1), a) : null;\n }\n\n throw Error(n(156, b.tag));\n }\n\n function Fe(a) {\n switch (a.tag) {\n case 1:\n F(a.type) && Fb();\n var b = a.effectTag;\n return b & 4096 ? (a.effectTag = b & -4097 | 64, a) : null;\n\n case 3:\n id();\n B(E);\n B(D);\n b = a.effectTag;\n if (0 !== (b & 64)) throw Error(n(285));\n a.effectTag = b & -4097 | 64;\n return a;\n\n case 5:\n return kd(a), null;\n\n case 13:\n return B(K), b = a.effectTag, b & 4096 ? (a.effectTag = b & -4097 | 64, a) : null;\n\n case 19:\n return B(K), null;\n\n case 4:\n return id(), null;\n\n case 10:\n return tc(a), null;\n\n default:\n return null;\n }\n }\n\n function Ge(a, b) {\n return {\n value: a,\n source: b,\n stack: zb(b)\n };\n }\n\n var He = \"function\" === typeof WeakSet ? WeakSet : Set;\n\n function Ie(a, b) {\n var c = b.source,\n d = b.stack;\n null === d && null !== c && (d = zb(c));\n null !== c && ua(c.type);\n b = b.value;\n null !== a && 1 === a.tag && ua(a.type);\n\n try {\n console.error(b);\n } catch (e) {\n setTimeout(function () {\n throw e;\n });\n }\n }\n\n function Je(a, b) {\n try {\n b.props = a.memoizedProps, b.state = a.memoizedState, b.componentWillUnmount();\n } catch (c) {\n Ke(a, c);\n }\n }\n\n function Le(a) {\n var b = a.ref;\n if (null !== b) if (\"function\" === typeof b) try {\n b(null);\n } catch (c) {\n Ke(a, c);\n } else b.current = null;\n }\n\n function Me(a, b) {\n switch (b.tag) {\n case 0:\n case 11:\n case 15:\n case 22:\n return;\n\n case 1:\n if (b.effectTag & 256 && null !== a) {\n var c = a.memoizedProps,\n d = a.memoizedState;\n a = b.stateNode;\n b = a.getSnapshotBeforeUpdate(b.elementType === b.type ? c : mc(b.type, c), d);\n a.__reactInternalSnapshotBeforeUpdate = b;\n }\n\n return;\n\n case 3:\n case 5:\n case 6:\n case 4:\n case 17:\n return;\n }\n\n throw Error(n(163));\n }\n\n function Ne(a, b) {\n b = b.updateQueue;\n b = null !== b ? b.lastEffect : null;\n\n if (null !== b) {\n var c = b = b.next;\n\n do {\n if ((c.tag & a) === a) {\n var d = c.destroy;\n c.destroy = void 0;\n void 0 !== d && d();\n }\n\n c = c.next;\n } while (c !== b);\n }\n }\n\n function Oe(a, b) {\n b = b.updateQueue;\n b = null !== b ? b.lastEffect : null;\n\n if (null !== b) {\n var c = b = b.next;\n\n do {\n if ((c.tag & a) === a) {\n var d = c.create;\n c.destroy = d();\n }\n\n c = c.next;\n } while (c !== b);\n }\n }\n\n function Pe(a, b, c) {\n switch (c.tag) {\n case 0:\n case 11:\n case 15:\n case 22:\n Oe(3, c);\n return;\n\n case 1:\n a = c.stateNode;\n if (c.effectTag & 4) if (null === b) a.componentDidMount();else {\n var d = c.elementType === c.type ? b.memoizedProps : mc(c.type, b.memoizedProps);\n a.componentDidUpdate(d, b.memoizedState, a.__reactInternalSnapshotBeforeUpdate);\n }\n b = c.updateQueue;\n null !== b && Hc(c, b, a);\n return;\n\n case 3:\n b = c.updateQueue;\n\n if (null !== b) {\n a = null;\n if (null !== c.child) switch (c.child.tag) {\n case 5:\n a = Aa(c.child.stateNode);\n break;\n\n case 1:\n a = c.child.stateNode;\n }\n Hc(c, b, a);\n }\n\n return;\n\n case 5:\n a = c.stateNode;\n null === b && c.effectTag & 4 && Wa(a, c.type, c.memoizedProps, c);\n return;\n\n case 6:\n return;\n\n case 4:\n return;\n\n case 12:\n return;\n\n case 13:\n Sa && null === c.memoizedState && (c = c.alternate, null !== c && (c = c.memoizedState, null !== c && (c = c.dehydrated, null !== c && xb(c))));\n return;\n\n case 19:\n case 17:\n case 20:\n case 21:\n return;\n }\n\n throw Error(n(163));\n }\n\n function Qe(a, b, c) {\n \"function\" === typeof Re && Re(b);\n\n switch (b.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n case 22:\n a = b.updateQueue;\n\n if (null !== a && (a = a.lastEffect, null !== a)) {\n var d = a.next;\n dc(97 < c ? 97 : c, function () {\n var a = d;\n\n do {\n var c = a.destroy;\n\n if (void 0 !== c) {\n var g = b;\n\n try {\n c();\n } catch (h) {\n Ke(g, h);\n }\n }\n\n a = a.next;\n } while (a !== d);\n });\n }\n\n break;\n\n case 1:\n Le(b);\n c = b.stateNode;\n \"function\" === typeof c.componentWillUnmount && Je(b, c);\n break;\n\n case 5:\n Le(b);\n break;\n\n case 4:\n Qa ? Se(a, b, c) : Ra && Te(b);\n }\n }\n\n function Ue(a, b, c) {\n for (var d = b;;) {\n if (Qe(a, d, c), null === d.child || Qa && 4 === d.tag) {\n if (d === b) break;\n\n for (; null === d.sibling;) {\n if (null === d.return || d.return === b) return;\n d = d.return;\n }\n\n d.sibling.return = d.return;\n d = d.sibling;\n } else d.child.return = d, d = d.child;\n }\n }\n\n function Ve(a) {\n var b = a.alternate;\n a.return = null;\n a.child = null;\n a.memoizedState = null;\n a.updateQueue = null;\n a.dependencies = null;\n a.alternate = null;\n a.firstEffect = null;\n a.lastEffect = null;\n a.pendingProps = null;\n a.memoizedProps = null;\n a.stateNode = null;\n null !== b && Ve(b);\n }\n\n function Te(a) {\n if (Ra) {\n a = a.stateNode.containerInfo;\n var b = hb(a);\n kb(a, b);\n }\n }\n\n function We(a) {\n return 5 === a.tag || 3 === a.tag || 4 === a.tag;\n }\n\n function Xe(a) {\n if (Qa) {\n a: {\n for (var b = a.return; null !== b;) {\n if (We(b)) {\n var c = b;\n break a;\n }\n\n b = b.return;\n }\n\n throw Error(n(160));\n }\n\n b = c.stateNode;\n\n switch (c.tag) {\n case 5:\n var d = !1;\n break;\n\n case 3:\n b = b.containerInfo;\n d = !0;\n break;\n\n case 4:\n b = b.containerInfo;\n d = !0;\n break;\n\n default:\n throw Error(n(161));\n }\n\n c.effectTag & 16 && (bb(b), c.effectTag &= -17);\n\n a: b: for (c = a;;) {\n for (; null === c.sibling;) {\n if (null === c.return || We(c.return)) {\n c = null;\n break a;\n }\n\n c = c.return;\n }\n\n c.sibling.return = c.return;\n\n for (c = c.sibling; 5 !== c.tag && 6 !== c.tag && 18 !== c.tag;) {\n if (c.effectTag & 2) continue b;\n if (null === c.child || 4 === c.tag) continue b;else c.child.return = c, c = c.child;\n }\n\n if (!(c.effectTag & 2)) {\n c = c.stateNode;\n break a;\n }\n }\n\n d ? Ye(a, c, b) : Ze(a, c, b);\n }\n }\n\n function Ye(a, b, c) {\n var d = a.tag,\n e = 5 === d || 6 === d;\n if (e) a = e ? a.stateNode : a.stateNode.instance, b ? Za(c, a, b) : Ua(c, a);else if (4 !== d && (a = a.child, null !== a)) for (Ye(a, b, c), a = a.sibling; null !== a;) {\n Ye(a, b, c), a = a.sibling;\n }\n }\n\n function Ze(a, b, c) {\n var d = a.tag,\n e = 5 === d || 6 === d;\n if (e) a = e ? a.stateNode : a.stateNode.instance, b ? Ya(c, a, b) : Ta(c, a);else if (4 !== d && (a = a.child, null !== a)) for (Ze(a, b, c), a = a.sibling; null !== a;) {\n Ze(a, b, c), a = a.sibling;\n }\n }\n\n function Se(a, b, c) {\n for (var d = b, e = !1, f, g;;) {\n if (!e) {\n e = d.return;\n\n a: for (;;) {\n if (null === e) throw Error(n(160));\n f = e.stateNode;\n\n switch (e.tag) {\n case 5:\n g = !1;\n break a;\n\n case 3:\n f = f.containerInfo;\n g = !0;\n break a;\n\n case 4:\n f = f.containerInfo;\n g = !0;\n break a;\n }\n\n e = e.return;\n }\n\n e = !0;\n }\n\n if (5 === d.tag || 6 === d.tag) Ue(a, d, c), g ? ab(f, d.stateNode) : $a(f, d.stateNode);else if (4 === d.tag) {\n if (null !== d.child) {\n f = d.stateNode.containerInfo;\n g = !0;\n d.child.return = d;\n d = d.child;\n continue;\n }\n } else if (Qe(a, d, c), null !== d.child) {\n d.child.return = d;\n d = d.child;\n continue;\n }\n if (d === b) break;\n\n for (; null === d.sibling;) {\n if (null === d.return || d.return === b) return;\n d = d.return;\n 4 === d.tag && (e = !1);\n }\n\n d.sibling.return = d.return;\n d = d.sibling;\n }\n }\n\n function $e(a, b) {\n if (Qa) {\n switch (b.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n case 22:\n Ne(3, b);\n return;\n\n case 1:\n return;\n\n case 5:\n var c = b.stateNode;\n\n if (null != c) {\n var d = b.memoizedProps;\n a = null !== a ? a.memoizedProps : d;\n var e = b.type,\n f = b.updateQueue;\n b.updateQueue = null;\n null !== f && Xa(c, f, e, a, d, b);\n }\n\n return;\n\n case 6:\n if (null === b.stateNode) throw Error(n(162));\n c = b.memoizedProps;\n Va(b.stateNode, null !== a ? a.memoizedProps : c, c);\n return;\n\n case 3:\n Sa && (b = b.stateNode, b.hydrate && (b.hydrate = !1, wb(b.containerInfo)));\n return;\n\n case 12:\n return;\n\n case 13:\n af(b);\n bf(b);\n return;\n\n case 19:\n bf(b);\n return;\n\n case 17:\n return;\n }\n\n throw Error(n(163));\n }\n\n switch (b.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n case 22:\n Ne(3, b);\n return;\n\n case 12:\n return;\n\n case 13:\n af(b);\n bf(b);\n return;\n\n case 19:\n bf(b);\n return;\n\n case 3:\n Sa && (c = b.stateNode, c.hydrate && (c.hydrate = !1, wb(c.containerInfo)));\n }\n\n a: if (Ra) {\n switch (b.tag) {\n case 1:\n case 5:\n case 6:\n case 20:\n break a;\n\n case 3:\n case 4:\n b = b.stateNode;\n kb(b.containerInfo, b.pendingChildren);\n break a;\n }\n\n throw Error(n(163));\n }\n }\n\n function af(a) {\n var b = a;\n if (null === a.memoizedState) var c = !1;else c = !0, b = a.child, cf = G();\n if (Qa && null !== b) a: if (a = b, Qa) for (b = a;;) {\n if (5 === b.tag) {\n var d = b.stateNode;\n c ? cb(d) : eb(b.stateNode, b.memoizedProps);\n } else if (6 === b.tag) d = b.stateNode, c ? db(d) : fb(d, b.memoizedProps);else if (13 === b.tag && null !== b.memoizedState && null === b.memoizedState.dehydrated) {\n d = b.child.sibling;\n d.return = b;\n b = d;\n continue;\n } else if (null !== b.child) {\n b.child.return = b;\n b = b.child;\n continue;\n }\n\n if (b === a) break a;\n\n for (; null === b.sibling;) {\n if (null === b.return || b.return === a) break a;\n b = b.return;\n }\n\n b.sibling.return = b.return;\n b = b.sibling;\n }\n }\n\n function bf(a) {\n var b = a.updateQueue;\n\n if (null !== b) {\n a.updateQueue = null;\n var c = a.stateNode;\n null === c && (c = a.stateNode = new He());\n b.forEach(function (b) {\n var d = df.bind(null, a, b);\n c.has(b) || (c.add(b), b.then(d, d));\n });\n }\n }\n\n var ef = \"function\" === typeof WeakMap ? WeakMap : Map;\n\n function ff(a, b, c) {\n c = Ac(c, null);\n c.tag = 3;\n c.payload = {\n element: null\n };\n var d = b.value;\n\n c.callback = function () {\n gf || (gf = !0, hf = d);\n Ie(a, b);\n };\n\n return c;\n }\n\n function jf(a, b, c) {\n c = Ac(c, null);\n c.tag = 3;\n var d = a.type.getDerivedStateFromError;\n\n if (\"function\" === typeof d) {\n var e = b.value;\n\n c.payload = function () {\n Ie(a, b);\n return d(e);\n };\n }\n\n var f = a.stateNode;\n null !== f && \"function\" === typeof f.componentDidCatch && (c.callback = function () {\n \"function\" !== typeof d && (null === kf ? kf = new Set([this]) : kf.add(this), Ie(a, b));\n var c = b.stack;\n this.componentDidCatch(b.value, {\n componentStack: null !== c ? c : \"\"\n });\n });\n return c;\n }\n\n var lf = Math.ceil,\n mf = p.ReactCurrentDispatcher,\n nf = p.ReactCurrentOwner,\n V = 0,\n of = 8,\n pf = 16,\n qf = 32,\n ze = 0,\n rf = 1,\n sf = 2,\n Ae = 3,\n Be = 4,\n tf = 5,\n W = V,\n T = null,\n X = null,\n U = 0,\n S = ze,\n uf = null,\n vf = 1073741823,\n wf = 1073741823,\n xf = null,\n Ce = 0,\n yf = !1,\n cf = 0,\n zf = 500,\n Y = null,\n gf = !1,\n hf = null,\n kf = null,\n Af = !1,\n Bf = null,\n Cf = 90,\n Df = null,\n Ef = 0,\n Ff = null,\n Gf = 0;\n\n function Lc() {\n return (W & (pf | qf)) !== V ? 1073741821 - (G() / 10 | 0) : 0 !== Gf ? Gf : Gf = 1073741821 - (G() / 10 | 0);\n }\n\n function Mc(a, b, c) {\n b = b.mode;\n if (0 === (b & 2)) return 1073741823;\n var d = bc();\n if (0 === (b & 4)) return 99 === d ? 1073741823 : 1073741822;\n if ((W & pf) !== V) return U;\n if (null !== c) a = hc(a, c.timeoutMs | 0 || 5E3, 250);else switch (d) {\n case 99:\n a = 1073741823;\n break;\n\n case 98:\n a = hc(a, 150, 100);\n break;\n\n case 97:\n case 96:\n a = hc(a, 5E3, 250);\n break;\n\n case 95:\n a = 2;\n break;\n\n default:\n throw Error(n(326));\n }\n null !== T && a === U && --a;\n return a;\n }\n\n function Nc(a, b) {\n if (50 < Ef) throw Ef = 0, Ff = null, Error(n(185));\n a = Hf(a, b);\n\n if (null !== a) {\n var c = bc();\n 1073741823 === b ? (W & of) !== V && (W & (pf | qf)) === V ? If(a) : (Z(a), W === V && H()) : Z(a);\n (W & 4) === V || 98 !== c && 99 !== c || (null === Df ? Df = new Map([[a, b]]) : (c = Df.get(a), (void 0 === c || c > b) && Df.set(a, b)));\n }\n }\n\n function Hf(a, b) {\n a.expirationTime < b && (a.expirationTime = b);\n var c = a.alternate;\n null !== c && c.expirationTime < b && (c.expirationTime = b);\n var d = a.return,\n e = null;\n if (null === d && 3 === a.tag) e = a.stateNode;else for (; null !== d;) {\n c = d.alternate;\n d.childExpirationTime < b && (d.childExpirationTime = b);\n null !== c && c.childExpirationTime < b && (c.childExpirationTime = b);\n\n if (null === d.return && 3 === d.tag) {\n e = d.stateNode;\n break;\n }\n\n d = d.return;\n }\n null !== e && (T === e && (Gc(b), S === Be && De(e, U)), Ee(e, b));\n return e;\n }\n\n function Jf(a) {\n var b = a.lastExpiredTime;\n if (0 !== b) return b;\n b = a.firstPendingTime;\n if (!Kf(a, b)) return b;\n var c = a.lastPingedTime;\n a = a.nextKnownPendingLevel;\n a = c > a ? c : a;\n return 2 >= a && b !== a ? 0 : a;\n }\n\n function Z(a) {\n if (0 !== a.lastExpiredTime) a.callbackExpirationTime = 1073741823, a.callbackPriority = 99, a.callbackNode = fc(If.bind(null, a));else {\n var b = Jf(a),\n c = a.callbackNode;\n if (0 === b) null !== c && (a.callbackNode = null, a.callbackExpirationTime = 0, a.callbackPriority = 90);else {\n var d = Lc();\n 1073741823 === b ? d = 99 : 1 === b || 2 === b ? d = 95 : (d = 10 * (1073741821 - b) - 10 * (1073741821 - d), d = 0 >= d ? 99 : 250 >= d ? 98 : 5250 >= d ? 97 : 95);\n\n if (null !== c) {\n var e = a.callbackPriority;\n if (a.callbackExpirationTime === b && e >= d) return;\n c !== Vb && Mb(c);\n }\n\n a.callbackExpirationTime = b;\n a.callbackPriority = d;\n b = 1073741823 === b ? fc(If.bind(null, a)) : ec(d, Lf.bind(null, a), {\n timeout: 10 * (1073741821 - b) - G()\n });\n a.callbackNode = b;\n }\n }\n }\n\n function Lf(a, b) {\n Gf = 0;\n if (b) return b = Lc(), Mf(a, b), Z(a), null;\n var c = Jf(a);\n\n if (0 !== c) {\n b = a.callbackNode;\n if ((W & (pf | qf)) !== V) throw Error(n(327));\n Nf();\n a === T && c === U || Of(a, c);\n\n if (null !== X) {\n var d = W;\n W |= pf;\n var e = Pf();\n\n do {\n try {\n Qf();\n break;\n } catch (h) {\n Rf(a, h);\n }\n } while (1);\n\n rc();\n W = d;\n mf.current = e;\n if (S === rf) throw b = uf, Of(a, c), De(a, c), Z(a), b;\n if (null === X) switch (e = a.finishedWork = a.current.alternate, a.finishedExpirationTime = c, d = S, T = null, d) {\n case ze:\n case rf:\n throw Error(n(345));\n\n case sf:\n Mf(a, 2 < c ? 2 : c);\n break;\n\n case Ae:\n De(a, c);\n d = a.lastSuspendedTime;\n c === d && (a.nextKnownPendingLevel = Sf(e));\n\n if (1073741823 === vf && (e = cf + zf - G(), 10 < e)) {\n if (yf) {\n var f = a.lastPingedTime;\n\n if (0 === f || f >= c) {\n a.lastPingedTime = c;\n Of(a, c);\n break;\n }\n }\n\n f = Jf(a);\n if (0 !== f && f !== c) break;\n\n if (0 !== d && d !== c) {\n a.lastPingedTime = d;\n break;\n }\n\n a.timeoutHandle = Ma(Tf.bind(null, a), e);\n break;\n }\n\n Tf(a);\n break;\n\n case Be:\n De(a, c);\n d = a.lastSuspendedTime;\n c === d && (a.nextKnownPendingLevel = Sf(e));\n\n if (yf && (e = a.lastPingedTime, 0 === e || e >= c)) {\n a.lastPingedTime = c;\n Of(a, c);\n break;\n }\n\n e = Jf(a);\n if (0 !== e && e !== c) break;\n\n if (0 !== d && d !== c) {\n a.lastPingedTime = d;\n break;\n }\n\n 1073741823 !== wf ? d = 10 * (1073741821 - wf) - G() : 1073741823 === vf ? d = 0 : (d = 10 * (1073741821 - vf) - 5E3, e = G(), c = 10 * (1073741821 - c) - e, d = e - d, 0 > d && (d = 0), d = (120 > d ? 120 : 480 > d ? 480 : 1080 > d ? 1080 : 1920 > d ? 1920 : 3E3 > d ? 3E3 : 4320 > d ? 4320 : 1960 * lf(d / 1960)) - d, c < d && (d = c));\n\n if (10 < d) {\n a.timeoutHandle = Ma(Tf.bind(null, a), d);\n break;\n }\n\n Tf(a);\n break;\n\n case tf:\n if (1073741823 !== vf && null !== xf) {\n f = vf;\n var g = xf;\n d = g.busyMinDurationMs | 0;\n 0 >= d ? d = 0 : (e = g.busyDelayMs | 0, f = G() - (10 * (1073741821 - f) - (g.timeoutMs | 0 || 5E3)), d = f <= e ? 0 : e + d - f);\n\n if (10 < d) {\n De(a, c);\n a.timeoutHandle = Ma(Tf.bind(null, a), d);\n break;\n }\n }\n\n Tf(a);\n break;\n\n default:\n throw Error(n(329));\n }\n Z(a);\n if (a.callbackNode === b) return Lf.bind(null, a);\n }\n }\n\n return null;\n }\n\n function If(a) {\n var b = a.lastExpiredTime;\n b = 0 !== b ? b : 1073741823;\n if ((W & (pf | qf)) !== V) throw Error(n(327));\n Nf();\n a === T && b === U || Of(a, b);\n\n if (null !== X) {\n var c = W;\n W |= pf;\n var d = Pf();\n\n do {\n try {\n Uf();\n break;\n } catch (e) {\n Rf(a, e);\n }\n } while (1);\n\n rc();\n W = c;\n mf.current = d;\n if (S === rf) throw c = uf, Of(a, b), De(a, b), Z(a), c;\n if (null !== X) throw Error(n(261));\n a.finishedWork = a.current.alternate;\n a.finishedExpirationTime = b;\n T = null;\n Tf(a);\n Z(a);\n }\n\n return null;\n }\n\n function Vf(a, b) {\n Mf(a, b);\n Z(a);\n (W & (pf | qf)) === V && H();\n }\n\n function Wf() {\n if (null !== Df) {\n var a = Df;\n Df = null;\n a.forEach(function (a, c) {\n Mf(c, a);\n Z(c);\n });\n H();\n }\n }\n\n function Xf(a, b) {\n var c = W;\n W |= 1;\n\n try {\n return a(b);\n } finally {\n W = c, W === V && H();\n }\n }\n\n function Yf(a, b) {\n if ((W & (pf | qf)) !== V) throw Error(n(187));\n var c = W;\n W |= 1;\n\n try {\n return dc(99, a.bind(null, b));\n } finally {\n W = c, H();\n }\n }\n\n function Of(a, b) {\n a.finishedWork = null;\n a.finishedExpirationTime = 0;\n var c = a.timeoutHandle;\n c !== Oa && (a.timeoutHandle = Oa, Na(c));\n if (null !== X) for (c = X.return; null !== c;) {\n var d = c;\n\n switch (d.tag) {\n case 1:\n d = d.type.childContextTypes;\n null !== d && void 0 !== d && Fb();\n break;\n\n case 3:\n id();\n B(E);\n B(D);\n break;\n\n case 5:\n kd(d);\n break;\n\n case 4:\n id();\n break;\n\n case 13:\n B(K);\n break;\n\n case 19:\n B(K);\n break;\n\n case 10:\n tc(d);\n }\n\n c = c.return;\n }\n T = a;\n X = Xc(a.current, null);\n U = b;\n S = ze;\n uf = null;\n wf = vf = 1073741823;\n xf = null;\n Ce = 0;\n yf = !1;\n }\n\n function Rf(a, b) {\n do {\n try {\n rc();\n nd.current = vd;\n if (pd) for (var c = M.memoizedState; null !== c;) {\n var d = c.queue;\n null !== d && (d.pending = null);\n c = c.next;\n }\n od = 0;\n O = N = M = null;\n pd = !1;\n if (null === X || null === X.return) return S = rf, uf = b, X = null;\n\n a: {\n var e = a,\n f = X.return,\n g = X,\n h = b;\n b = U;\n g.effectTag |= 2048;\n g.firstEffect = g.lastEffect = null;\n\n if (null !== h && \"object\" === (0, _typeof2.default)(h) && \"function\" === typeof h.then) {\n var k = h;\n\n if (0 === (g.mode & 2)) {\n var l = g.alternate;\n l ? (g.updateQueue = l.updateQueue, g.memoizedState = l.memoizedState, g.expirationTime = l.expirationTime) : (g.updateQueue = null, g.memoizedState = null);\n }\n\n var q = 0 !== (K.current & 1),\n r = f;\n\n do {\n var w;\n\n if (w = 13 === r.tag) {\n var z = r.memoizedState;\n if (null !== z) w = null !== z.dehydrated ? !0 : !1;else {\n var Q = r.memoizedProps;\n w = void 0 === Q.fallback ? !1 : !0 !== Q.unstable_avoidThisFallback ? !0 : q ? !1 : !0;\n }\n }\n\n if (w) {\n var A = r.updateQueue;\n\n if (null === A) {\n var v = new Set();\n v.add(k);\n r.updateQueue = v;\n } else A.add(k);\n\n if (0 === (r.mode & 2)) {\n r.effectTag |= 64;\n g.effectTag &= -2981;\n if (1 === g.tag) if (null === g.alternate) g.tag = 17;else {\n var t = Ac(1073741823, null);\n t.tag = 2;\n Bc(g, t);\n }\n g.expirationTime = 1073741823;\n break a;\n }\n\n h = void 0;\n g = b;\n var x = e.pingCache;\n null === x ? (x = e.pingCache = new ef(), h = new Set(), x.set(k, h)) : (h = x.get(k), void 0 === h && (h = new Set(), x.set(k, h)));\n\n if (!h.has(g)) {\n h.add(g);\n var ke = cg.bind(null, e, k, g);\n k.then(ke, ke);\n }\n\n r.effectTag |= 4096;\n r.expirationTime = b;\n break a;\n }\n\n r = r.return;\n } while (null !== r);\n\n h = Error((ua(g.type) || \"A React component\") + \" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a component higher in the tree to provide a loading indicator or placeholder to display.\" + zb(g));\n }\n\n S !== tf && (S = sf);\n h = Ge(h, g);\n r = f;\n\n do {\n switch (r.tag) {\n case 3:\n k = h;\n r.effectTag |= 4096;\n r.expirationTime = b;\n var Zf = ff(r, k, b);\n Cc(r, Zf);\n break a;\n\n case 1:\n k = h;\n var $f = r.type,\n Fc = r.stateNode;\n\n if (0 === (r.effectTag & 64) && (\"function\" === typeof $f.getDerivedStateFromError || null !== Fc && \"function\" === typeof Fc.componentDidCatch && (null === kf || !kf.has(Fc)))) {\n r.effectTag |= 4096;\n r.expirationTime = b;\n var ag = jf(r, k, b);\n Cc(r, ag);\n break a;\n }\n\n }\n\n r = r.return;\n } while (null !== r);\n }\n\n X = dg(X);\n } catch (bg) {\n b = bg;\n continue;\n }\n\n break;\n } while (1);\n }\n\n function Pf() {\n var a = mf.current;\n mf.current = vd;\n return null === a ? vd : a;\n }\n\n function Ec(a, b) {\n a < vf && 2 < a && (vf = a);\n null !== b && a < wf && 2 < a && (wf = a, xf = b);\n }\n\n function Gc(a) {\n a > Ce && (Ce = a);\n }\n\n function Uf() {\n for (; null !== X;) {\n X = eg(X);\n }\n }\n\n function Qf() {\n for (; null !== X && !Wb();) {\n X = eg(X);\n }\n }\n\n function eg(a) {\n var b = fg(a.alternate, a, U);\n a.memoizedProps = a.pendingProps;\n null === b && (b = dg(a));\n nf.current = null;\n return b;\n }\n\n function dg(a) {\n X = a;\n\n do {\n var b = X.alternate;\n a = X.return;\n\n if (0 === (X.effectTag & 2048)) {\n b = ye(b, X, U);\n\n if (1 === U || 1 !== X.childExpirationTime) {\n for (var c = 0, d = X.child; null !== d;) {\n var e = d.expirationTime,\n f = d.childExpirationTime;\n e > c && (c = e);\n f > c && (c = f);\n d = d.sibling;\n }\n\n X.childExpirationTime = c;\n }\n\n if (null !== b) return b;\n null !== a && 0 === (a.effectTag & 2048) && (null === a.firstEffect && (a.firstEffect = X.firstEffect), null !== X.lastEffect && (null !== a.lastEffect && (a.lastEffect.nextEffect = X.firstEffect), a.lastEffect = X.lastEffect), 1 < X.effectTag && (null !== a.lastEffect ? a.lastEffect.nextEffect = X : a.firstEffect = X, a.lastEffect = X));\n } else {\n b = Fe(X);\n if (null !== b) return b.effectTag &= 2047, b;\n null !== a && (a.firstEffect = a.lastEffect = null, a.effectTag |= 2048);\n }\n\n b = X.sibling;\n if (null !== b) return b;\n X = a;\n } while (null !== X);\n\n S === ze && (S = tf);\n return null;\n }\n\n function Sf(a) {\n var b = a.expirationTime;\n a = a.childExpirationTime;\n return b > a ? b : a;\n }\n\n function Tf(a) {\n var b = bc();\n dc(99, gg.bind(null, a, b));\n return null;\n }\n\n function gg(a, b) {\n do {\n Nf();\n } while (null !== Bf);\n\n if ((W & (pf | qf)) !== V) throw Error(n(327));\n var c = a.finishedWork,\n d = a.finishedExpirationTime;\n if (null === c) return null;\n a.finishedWork = null;\n a.finishedExpirationTime = 0;\n if (c === a.current) throw Error(n(177));\n a.callbackNode = null;\n a.callbackExpirationTime = 0;\n a.callbackPriority = 90;\n a.nextKnownPendingLevel = 0;\n var e = Sf(c);\n a.firstPendingTime = e;\n d <= a.lastSuspendedTime ? a.firstSuspendedTime = a.lastSuspendedTime = a.nextKnownPendingLevel = 0 : d <= a.firstSuspendedTime && (a.firstSuspendedTime = d - 1);\n d <= a.lastPingedTime && (a.lastPingedTime = 0);\n d <= a.lastExpiredTime && (a.lastExpiredTime = 0);\n a === T && (X = T = null, U = 0);\n 1 < c.effectTag ? null !== c.lastEffect ? (c.lastEffect.nextEffect = c, e = c.firstEffect) : e = c : e = c.firstEffect;\n\n if (null !== e) {\n var f = W;\n W |= qf;\n nf.current = null;\n Da(a.containerInfo);\n Y = e;\n\n do {\n try {\n hg();\n } catch (t) {\n if (null === Y) throw Error(n(330));\n Ke(Y, t);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n Y = e;\n\n do {\n try {\n for (var g = a, h = b; null !== Y;) {\n var k = Y.effectTag;\n k & 16 && Qa && bb(Y.stateNode);\n\n if (k & 128) {\n var l = Y.alternate;\n\n if (null !== l) {\n var q = l.ref;\n null !== q && (\"function\" === typeof q ? q(null) : q.current = null);\n }\n }\n\n switch (k & 1038) {\n case 2:\n Xe(Y);\n Y.effectTag &= -3;\n break;\n\n case 6:\n Xe(Y);\n Y.effectTag &= -3;\n $e(Y.alternate, Y);\n break;\n\n case 1024:\n Y.effectTag &= -1025;\n break;\n\n case 1028:\n Y.effectTag &= -1025;\n $e(Y.alternate, Y);\n break;\n\n case 4:\n $e(Y.alternate, Y);\n break;\n\n case 8:\n var r = g,\n w = Y,\n z = h;\n Qa ? Se(r, w, z) : Ue(r, w, z);\n Ve(w);\n }\n\n Y = Y.nextEffect;\n }\n } catch (t) {\n if (null === Y) throw Error(n(330));\n Ke(Y, t);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n Ea(a.containerInfo);\n a.current = c;\n Y = e;\n\n do {\n try {\n for (k = a; null !== Y;) {\n var Q = Y.effectTag;\n Q & 36 && Pe(k, Y.alternate, Y);\n\n if (Q & 128) {\n l = void 0;\n var A = Y.ref;\n\n if (null !== A) {\n var v = Y.stateNode;\n\n switch (Y.tag) {\n case 5:\n l = Aa(v);\n break;\n\n default:\n l = v;\n }\n\n \"function\" === typeof A ? A(l) : A.current = l;\n }\n }\n\n Y = Y.nextEffect;\n }\n } catch (t) {\n if (null === Y) throw Error(n(330));\n Ke(Y, t);\n Y = Y.nextEffect;\n }\n } while (null !== Y);\n\n Y = null;\n Xb();\n W = f;\n } else a.current = c;\n\n if (Af) Af = !1, Bf = a, Cf = b;else for (Y = e; null !== Y;) {\n b = Y.nextEffect, Y.nextEffect = null, Y = b;\n }\n b = a.firstPendingTime;\n 0 === b && (kf = null);\n 1073741823 === b ? a === Ff ? Ef++ : (Ef = 0, Ff = a) : Ef = 0;\n \"function\" === typeof ig && ig(c.stateNode, d);\n Z(a);\n if (gf) throw gf = !1, a = hf, hf = null, a;\n if ((W & of) !== V) return null;\n H();\n return null;\n }\n\n function hg() {\n for (; null !== Y;) {\n var a = Y.effectTag;\n 0 !== (a & 256) && Me(Y.alternate, Y);\n 0 === (a & 512) || Af || (Af = !0, ec(97, function () {\n Nf();\n return null;\n }));\n Y = Y.nextEffect;\n }\n }\n\n function Nf() {\n if (90 !== Cf) {\n var a = 97 < Cf ? 97 : Cf;\n Cf = 90;\n return dc(a, jg);\n }\n }\n\n function jg() {\n if (null === Bf) return !1;\n var a = Bf;\n Bf = null;\n if ((W & (pf | qf)) !== V) throw Error(n(331));\n var b = W;\n W |= qf;\n\n for (a = a.current.firstEffect; null !== a;) {\n try {\n var c = a;\n if (0 !== (c.effectTag & 512)) switch (c.tag) {\n case 0:\n case 11:\n case 15:\n case 22:\n Ne(5, c), Oe(5, c);\n }\n } catch (d) {\n if (null === a) throw Error(n(330));\n Ke(a, d);\n }\n\n c = a.nextEffect;\n a.nextEffect = null;\n a = c;\n }\n\n W = b;\n H();\n return !0;\n }\n\n function kg(a, b, c) {\n b = Ge(c, b);\n b = ff(a, b, 1073741823);\n Bc(a, b);\n a = Hf(a, 1073741823);\n null !== a && Z(a);\n }\n\n function Ke(a, b) {\n if (3 === a.tag) kg(a, a, b);else for (var c = a.return; null !== c;) {\n if (3 === c.tag) {\n kg(c, a, b);\n break;\n } else if (1 === c.tag) {\n var d = c.stateNode;\n\n if (\"function\" === typeof c.type.getDerivedStateFromError || \"function\" === typeof d.componentDidCatch && (null === kf || !kf.has(d))) {\n a = Ge(b, a);\n a = jf(c, a, 1073741823);\n Bc(c, a);\n c = Hf(c, 1073741823);\n null !== c && Z(c);\n break;\n }\n }\n\n c = c.return;\n }\n }\n\n function cg(a, b, c) {\n var d = a.pingCache;\n null !== d && d.delete(b);\n T === a && U === c ? S === Be || S === Ae && 1073741823 === vf && G() - cf < zf ? Of(a, U) : yf = !0 : Kf(a, c) && (b = a.lastPingedTime, 0 !== b && b < c || (a.lastPingedTime = c, Z(a)));\n }\n\n function df(a, b) {\n var c = a.stateNode;\n null !== c && c.delete(b);\n b = 0;\n 0 === b && (b = Lc(), b = Mc(b, a, null));\n a = Hf(a, b);\n null !== a && Z(a);\n }\n\n var fg;\n\n fg = function fg(a, b, c) {\n var d = b.expirationTime;\n\n if (null !== a) {\n var e = b.pendingProps;\n if (a.memoizedProps !== e || E.current) wc = !0;else {\n if (d < c) {\n wc = !1;\n\n switch (b.tag) {\n case 3:\n le(b);\n $d();\n break;\n\n case 5:\n jd(b);\n if (b.mode & 4 && 1 !== c && Ka(b.type, e)) return b.expirationTime = b.childExpirationTime = 1, null;\n break;\n\n case 1:\n F(b.type) && Ib(b);\n break;\n\n case 4:\n hd(b, b.stateNode.containerInfo);\n break;\n\n case 10:\n sc(b, b.memoizedProps.value);\n break;\n\n case 13:\n if (null !== b.memoizedState) {\n d = b.child.childExpirationTime;\n if (0 !== d && d >= c) return ne(a, b, c);\n C(K, K.current & 1);\n b = ce(a, b, c);\n return null !== b ? b.sibling : null;\n }\n\n C(K, K.current & 1);\n break;\n\n case 19:\n d = b.childExpirationTime >= c;\n\n if (0 !== (a.effectTag & 64)) {\n if (d) return qe(a, b, c);\n b.effectTag |= 64;\n }\n\n e = b.memoizedState;\n null !== e && (e.rendering = null, e.tail = null);\n C(K, K.current);\n if (!d) return null;\n }\n\n return ce(a, b, c);\n }\n\n wc = !1;\n }\n } else wc = !1;\n\n b.expirationTime = 0;\n\n switch (b.tag) {\n case 2:\n d = b.type;\n null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2);\n a = b.pendingProps;\n e = Eb(b, D.current);\n vc(b, c);\n e = rd(null, b, d, a, e, c);\n b.effectTag |= 1;\n\n if (\"object\" === (0, _typeof2.default)(e) && null !== e && \"function\" === typeof e.render && void 0 === e.$$typeof) {\n b.tag = 1;\n b.memoizedState = null;\n b.updateQueue = null;\n\n if (F(d)) {\n var f = !0;\n Ib(b);\n } else f = !1;\n\n b.memoizedState = null !== e.state && void 0 !== e.state ? e.state : null;\n yc(b);\n var g = d.getDerivedStateFromProps;\n \"function\" === typeof g && Kc(b, d, g, a);\n e.updater = Oc;\n b.stateNode = e;\n e._reactInternalFiber = b;\n Sc(b, d, a, c);\n b = je(null, b, d, !0, f, c);\n } else b.tag = 0, R(null, b, e, c), b = b.child;\n\n return b;\n\n case 16:\n a: {\n e = b.elementType;\n null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2);\n a = b.pendingProps;\n ta(e);\n if (1 !== e._status) throw e._result;\n e = e._result;\n b.type = e;\n f = b.tag = lg(e);\n a = mc(e, a);\n\n switch (f) {\n case 0:\n b = ge(null, b, e, a, c);\n break a;\n\n case 1:\n b = ie(null, b, e, a, c);\n break a;\n\n case 11:\n b = be(null, b, e, a, c);\n break a;\n\n case 14:\n b = de(null, b, e, mc(e.type, a), d, c);\n break a;\n }\n\n throw Error(n(306, e, \"\"));\n }\n\n return b;\n\n case 0:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mc(d, e), ge(a, b, d, e, c);\n\n case 1:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mc(d, e), ie(a, b, d, e, c);\n\n case 3:\n le(b);\n d = b.updateQueue;\n if (null === a || null === d) throw Error(n(282));\n d = b.pendingProps;\n e = b.memoizedState;\n e = null !== e ? e.element : null;\n zc(a, b);\n Dc(b, d, null, c);\n d = b.memoizedState.element;\n if (d === e) $d(), b = ce(a, b, c);else {\n if (e = b.stateNode.hydrate) Sa ? (Sd = sb(b.stateNode.containerInfo), Rd = b, e = Td = !0) : e = !1;\n if (e) for (c = cd(b, null, d, c), b.child = c; c;) {\n c.effectTag = c.effectTag & -3 | 1024, c = c.sibling;\n } else R(a, b, d, c), $d();\n b = b.child;\n }\n return b;\n\n case 5:\n return jd(b), null === a && Xd(b), d = b.type, e = b.pendingProps, f = null !== a ? a.memoizedProps : null, g = e.children, Ja(d, e) ? g = null : null !== f && Ja(d, f) && (b.effectTag |= 16), he(a, b), b.mode & 4 && 1 !== c && Ka(d, e) ? (b.expirationTime = b.childExpirationTime = 1, b = null) : (R(a, b, g, c), b = b.child), b;\n\n case 6:\n return null === a && Xd(b), null;\n\n case 13:\n return ne(a, b, c);\n\n case 4:\n return hd(b, b.stateNode.containerInfo), d = b.pendingProps, null === a ? b.child = bd(b, null, d, c) : R(a, b, d, c), b.child;\n\n case 11:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mc(d, e), be(a, b, d, e, c);\n\n case 7:\n return R(a, b, b.pendingProps, c), b.child;\n\n case 8:\n return R(a, b, b.pendingProps.children, c), b.child;\n\n case 12:\n return R(a, b, b.pendingProps.children, c), b.child;\n\n case 10:\n a: {\n d = b.type._context;\n e = b.pendingProps;\n g = b.memoizedProps;\n f = e.value;\n sc(b, f);\n\n if (null !== g) {\n var h = g.value;\n f = jc(h, f) ? 0 : (\"function\" === typeof d._calculateChangedBits ? d._calculateChangedBits(h, f) : 1073741823) | 0;\n\n if (0 === f) {\n if (g.children === e.children && !E.current) {\n b = ce(a, b, c);\n break a;\n }\n } else for (h = b.child, null !== h && (h.return = b); null !== h;) {\n var k = h.dependencies;\n\n if (null !== k) {\n g = h.child;\n\n for (var l = k.firstContext; null !== l;) {\n if (l.context === d && 0 !== (l.observedBits & f)) {\n 1 === h.tag && (l = Ac(c, null), l.tag = 2, Bc(h, l));\n h.expirationTime < c && (h.expirationTime = c);\n l = h.alternate;\n null !== l && l.expirationTime < c && (l.expirationTime = c);\n uc(h.return, c);\n k.expirationTime < c && (k.expirationTime = c);\n break;\n }\n\n l = l.next;\n }\n } else g = 10 === h.tag ? h.type === b.type ? null : h.child : h.child;\n\n if (null !== g) g.return = h;else for (g = h; null !== g;) {\n if (g === b) {\n g = null;\n break;\n }\n\n h = g.sibling;\n\n if (null !== h) {\n h.return = g.return;\n g = h;\n break;\n }\n\n g = g.return;\n }\n h = g;\n }\n }\n\n R(a, b, e.children, c);\n b = b.child;\n }\n\n return b;\n\n case 9:\n return e = b.type, f = b.pendingProps, d = f.children, vc(b, c), e = I(e, f.unstable_observedBits), d = d(e), b.effectTag |= 1, R(a, b, d, c), b.child;\n\n case 14:\n return e = b.type, f = mc(e, b.pendingProps), f = mc(e.type, f), de(a, b, e, f, d, c);\n\n case 15:\n return fe(a, b, b.type, b.pendingProps, d, c);\n\n case 17:\n return d = b.type, e = b.pendingProps, e = b.elementType === d ? e : mc(d, e), null !== a && (a.alternate = null, b.alternate = null, b.effectTag |= 2), b.tag = 1, F(d) ? (a = !0, Ib(b)) : a = !1, vc(b, c), Qc(b, d, e), Sc(b, d, e, c), je(null, b, d, !0, a, c);\n\n case 19:\n return qe(a, b, c);\n }\n\n throw Error(n(156, b.tag));\n };\n\n var mg = {\n current: !1\n },\n ig = null,\n Re = null;\n\n function ng(a) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var b = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (b.isDisabled || !b.supportsFiber) return !0;\n\n try {\n var c = b.inject(a);\n\n ig = function ig(a) {\n try {\n b.onCommitFiberRoot(c, a, void 0, 64 === (a.current.effectTag & 64));\n } catch (e) {}\n };\n\n Re = function Re(a) {\n try {\n b.onCommitFiberUnmount(c, a);\n } catch (e) {}\n };\n } catch (d) {}\n\n return !0;\n }\n\n function og(a, b, c, d) {\n this.tag = a;\n this.key = c;\n this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = b;\n this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null;\n this.mode = d;\n this.effectTag = 0;\n this.lastEffect = this.firstEffect = this.nextEffect = null;\n this.childExpirationTime = this.expirationTime = 0;\n this.alternate = null;\n }\n\n function Vd(a, b, c, d) {\n return new og(a, b, c, d);\n }\n\n function ee(a) {\n a = a.prototype;\n return !(!a || !a.isReactComponent);\n }\n\n function lg(a) {\n if (\"function\" === typeof a) return ee(a) ? 1 : 0;\n\n if (void 0 !== a && null !== a) {\n a = a.$$typeof;\n if (a === la) return 11;\n if (a === oa) return 14;\n }\n\n return 2;\n }\n\n function Xc(a, b) {\n var c = a.alternate;\n null === c ? (c = Vd(a.tag, b, a.key, a.mode), c.elementType = a.elementType, c.type = a.type, c.stateNode = a.stateNode, c.alternate = a, a.alternate = c) : (c.pendingProps = b, c.effectTag = 0, c.nextEffect = null, c.firstEffect = null, c.lastEffect = null);\n c.childExpirationTime = a.childExpirationTime;\n c.expirationTime = a.expirationTime;\n c.child = a.child;\n c.memoizedProps = a.memoizedProps;\n c.memoizedState = a.memoizedState;\n c.updateQueue = a.updateQueue;\n b = a.dependencies;\n c.dependencies = null === b ? null : {\n expirationTime: b.expirationTime,\n firstContext: b.firstContext,\n responders: b.responders\n };\n c.sibling = a.sibling;\n c.index = a.index;\n c.ref = a.ref;\n return c;\n }\n\n function Zc(a, b, c, d, e, f) {\n var g = 2;\n d = a;\n if (\"function\" === typeof a) ee(a) && (g = 1);else if (\"string\" === typeof a) g = 5;else a: switch (a) {\n case ea:\n return ad(c.children, e, f, b);\n\n case ka:\n g = 8;\n e |= 7;\n break;\n\n case fa:\n g = 8;\n e |= 1;\n break;\n\n case ha:\n return a = Vd(12, c, b, e | 8), a.elementType = ha, a.type = ha, a.expirationTime = f, a;\n\n case ma:\n return a = Vd(13, c, b, e), a.type = ma, a.elementType = ma, a.expirationTime = f, a;\n\n case na:\n return a = Vd(19, c, b, e), a.elementType = na, a.expirationTime = f, a;\n\n default:\n if (\"object\" === (0, _typeof2.default)(a) && null !== a) switch (a.$$typeof) {\n case ia:\n g = 10;\n break a;\n\n case ja:\n g = 9;\n break a;\n\n case la:\n g = 11;\n break a;\n\n case oa:\n g = 14;\n break a;\n\n case pa:\n g = 16;\n d = null;\n break a;\n\n case qa:\n g = 22;\n break a;\n }\n throw Error(n(130, null == a ? a : (0, _typeof2.default)(a), \"\"));\n }\n b = Vd(g, c, b, e);\n b.elementType = a;\n b.type = d;\n b.expirationTime = f;\n return b;\n }\n\n function ad(a, b, c, d) {\n a = Vd(7, a, d, b);\n a.expirationTime = c;\n return a;\n }\n\n function Yc(a, b, c) {\n a = Vd(6, a, null, b);\n a.expirationTime = c;\n return a;\n }\n\n function $c(a, b, c) {\n b = Vd(4, null !== a.children ? a.children : [], a.key, b);\n b.expirationTime = c;\n b.stateNode = {\n containerInfo: a.containerInfo,\n pendingChildren: null,\n implementation: a.implementation\n };\n return b;\n }\n\n function pg(a, b, c) {\n this.tag = b;\n this.current = null;\n this.containerInfo = a;\n this.pingCache = this.pendingChildren = null;\n this.finishedExpirationTime = 0;\n this.finishedWork = null;\n this.timeoutHandle = Oa;\n this.pendingContext = this.context = null;\n this.hydrate = c;\n this.callbackNode = null;\n this.callbackPriority = 90;\n this.lastExpiredTime = this.lastPingedTime = this.nextKnownPendingLevel = this.lastSuspendedTime = this.firstSuspendedTime = this.firstPendingTime = 0;\n }\n\n function Kf(a, b) {\n var c = a.firstSuspendedTime;\n a = a.lastSuspendedTime;\n return 0 !== c && c >= b && a <= b;\n }\n\n function De(a, b) {\n var c = a.firstSuspendedTime,\n d = a.lastSuspendedTime;\n c < b && (a.firstSuspendedTime = b);\n if (d > b || 0 === c) a.lastSuspendedTime = b;\n b <= a.lastPingedTime && (a.lastPingedTime = 0);\n b <= a.lastExpiredTime && (a.lastExpiredTime = 0);\n }\n\n function Ee(a, b) {\n b > a.firstPendingTime && (a.firstPendingTime = b);\n var c = a.firstSuspendedTime;\n 0 !== c && (b >= c ? a.firstSuspendedTime = a.lastSuspendedTime = a.nextKnownPendingLevel = 0 : b >= a.lastSuspendedTime && (a.lastSuspendedTime = b + 1), b > a.nextKnownPendingLevel && (a.nextKnownPendingLevel = b));\n }\n\n function Mf(a, b) {\n var c = a.lastExpiredTime;\n if (0 === c || c > b) a.lastExpiredTime = b;\n }\n\n var qg = null;\n\n function rg(a) {\n if (null === qg) try {\n var b = (\"require\" + Math.random()).slice(0, 7);\n qg = (module && module[b])(\"timers\").setImmediate;\n } catch (c) {\n qg = function qg(a) {\n var b = new MessageChannel();\n b.port1.onmessage = a;\n b.port2.postMessage(void 0);\n };\n }\n return qg(a);\n }\n\n function sg(a) {\n var b = a._reactInternalFiber;\n\n if (void 0 === b) {\n if (\"function\" === typeof a.render) throw Error(n(188));\n throw Error(n(268, Object.keys(a)));\n }\n\n a = ya(b);\n return null === a ? null : a.stateNode;\n }\n\n function tg(a, b) {\n a = a.memoizedState;\n null !== a && null !== a.dehydrated && a.retryTime < b && (a.retryTime = b);\n }\n\n function ug(a, b) {\n tg(a, b);\n (a = a.alternate) && tg(a, b);\n }\n\n var vg = p.IsSomeRendererActing,\n wg = \"function\" === typeof m.unstable_flushAllWithoutAsserting,\n xg = m.unstable_flushAllWithoutAsserting || function () {\n for (var a = !1; Nf();) {\n a = !0;\n }\n\n return a;\n };\n\n function yg(a) {\n try {\n xg(), rg(function () {\n xg() ? yg(a) : a();\n });\n } catch (b) {\n a(b);\n }\n }\n\n var zg = 0,\n Ag = !1,\n Bg = {\n __proto__: null,\n createContainer: function createContainer(a, b, c) {\n a = new pg(a, b, c);\n b = Vd(3, null, null, 2 === b ? 7 : 1 === b ? 3 : 0);\n a.current = b;\n b.stateNode = a;\n yc(b);\n return a;\n },\n updateContainer: function updateContainer(a, b, c, d) {\n var e = b.current,\n f = Lc(),\n g = Ic.suspense;\n f = Mc(f, e, g);\n\n a: if (c) {\n c = c._reactInternalFiber;\n\n b: {\n if (va(c) !== c || 1 !== c.tag) throw Error(n(170));\n var h = c;\n\n do {\n switch (h.tag) {\n case 3:\n h = h.stateNode.context;\n break b;\n\n case 1:\n if (F(h.type)) {\n h = h.stateNode.__reactInternalMemoizedMergedChildContext;\n break b;\n }\n\n }\n\n h = h.return;\n } while (null !== h);\n\n throw Error(n(171));\n }\n\n if (1 === c.tag) {\n var k = c.type;\n\n if (F(k)) {\n c = Hb(c, k, h);\n break a;\n }\n }\n\n c = h;\n } else c = Cb;\n\n null === b.context ? b.context = c : b.pendingContext = c;\n b = Ac(f, g);\n b.payload = {\n element: a\n };\n d = void 0 === d ? null : d;\n null !== d && (b.callback = d);\n Bc(e, b);\n Nc(e, f);\n return f;\n },\n batchedEventUpdates: function batchedEventUpdates(a, b) {\n var c = W;\n W |= 2;\n\n try {\n return a(b);\n } finally {\n W = c, W === V && H();\n }\n },\n batchedUpdates: Xf,\n unbatchedUpdates: function unbatchedUpdates(a, b) {\n var c = W;\n W &= -2;\n W |= of;\n\n try {\n return a(b);\n } finally {\n W = c, W === V && H();\n }\n },\n deferredUpdates: function deferredUpdates(a) {\n return dc(97, a);\n },\n syncUpdates: function syncUpdates(a, b, c, d) {\n return dc(99, a.bind(null, b, c, d));\n },\n discreteUpdates: function discreteUpdates(a, b, c, d, e) {\n var f = W;\n W |= 4;\n\n try {\n return dc(98, a.bind(null, b, c, d, e));\n } finally {\n W = f, W === V && H();\n }\n },\n flushDiscreteUpdates: function flushDiscreteUpdates() {\n (W & (1 | pf | qf)) === V && (Wf(), Nf());\n },\n flushControlled: function flushControlled(a) {\n var b = W;\n W |= 1;\n\n try {\n dc(99, a);\n } finally {\n W = b, W === V && H();\n }\n },\n flushSync: Yf,\n flushPassiveEffects: Nf,\n IsThisRendererActing: mg,\n getPublicRootInstance: function getPublicRootInstance(a) {\n a = a.current;\n if (!a.child) return null;\n\n switch (a.child.tag) {\n case 5:\n return Aa(a.child.stateNode);\n\n default:\n return a.child.stateNode;\n }\n },\n attemptSynchronousHydration: function attemptSynchronousHydration(a) {\n switch (a.tag) {\n case 3:\n var b = a.stateNode;\n b.hydrate && Vf(b, b.firstPendingTime);\n break;\n\n case 13:\n Yf(function () {\n return Nc(a, 1073741823);\n }), b = hc(Lc(), 150, 100), ug(a, b);\n }\n },\n attemptUserBlockingHydration: function attemptUserBlockingHydration(a) {\n if (13 === a.tag) {\n var b = hc(Lc(), 150, 100);\n Nc(a, b);\n ug(a, b);\n }\n },\n attemptContinuousHydration: function attemptContinuousHydration(a) {\n 13 === a.tag && (Nc(a, 3), ug(a, 3));\n },\n attemptHydrationAtCurrentPriority: function attemptHydrationAtCurrentPriority(a) {\n if (13 === a.tag) {\n var b = Lc();\n b = Mc(b, a, null);\n Nc(a, b);\n ug(a, b);\n }\n },\n findHostInstance: sg,\n findHostInstanceWithWarning: function findHostInstanceWithWarning(a) {\n return sg(a);\n },\n findHostInstanceWithNoPortals: function findHostInstanceWithNoPortals(a) {\n a = za(a);\n return null === a ? null : 20 === a.tag ? a.stateNode.instance : a.stateNode;\n },\n shouldSuspend: function shouldSuspend() {\n return !1;\n },\n injectIntoDevTools: function injectIntoDevTools(a) {\n var b = a.findFiberByHostInstance;\n return ng(aa({}, a, {\n overrideHookState: null,\n overrideProps: null,\n setSuspenseHandler: null,\n scheduleUpdate: null,\n currentDispatcherRef: p.ReactCurrentDispatcher,\n findHostInstanceByFiber: function findHostInstanceByFiber(a) {\n a = ya(a);\n return null === a ? null : a.stateNode;\n },\n findFiberByHostInstance: function findFiberByHostInstance(a) {\n return b ? b(a) : null;\n },\n findHostInstancesForRefresh: null,\n scheduleRefresh: null,\n scheduleRoot: null,\n setRefreshHandler: null,\n getCurrentFiber: null\n }));\n },\n act: function act(a) {\n function b() {\n zg--;\n vg.current = c;\n mg.current = d;\n }\n\n !1 === Ag && (Ag = !0, console.error(\"act(...) is not supported in production builds of React, and might not behave as expected.\"));\n zg++;\n var c = vg.current;\n var d = mg.current;\n vg.current = !0;\n mg.current = !0;\n\n try {\n var e = Xf(a);\n } catch (f) {\n throw b(), f;\n }\n\n if (null !== e && \"object\" === (0, _typeof2.default)(e) && \"function\" === typeof e.then) return {\n then: function then(a, d) {\n e.then(function () {\n 1 < zg || !0 === wg && !0 === c ? (b(), a()) : yg(function (c) {\n b();\n c ? d(c) : a();\n });\n }, function (a) {\n b();\n d(a);\n });\n }\n };\n\n try {\n 1 !== zg || !1 !== wg && !1 !== c || xg(), b();\n } catch (f) {\n throw b(), f;\n }\n\n return {\n then: function then(a) {\n a();\n }\n };\n }\n },\n Cg = Bg && Bg[\"default\"] || Bg;\n module.exports = Cg.default || Cg;\n var $$$renderer = module.exports;\n module.exports = $$$reconciler;\n return $$$renderer;\n};\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(470)(module)))\n\n/***/ }),\n/* 980 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n if (val === null || val === undefined) {\n throw new TypeError('Object.assign cannot be called with null or undefined');\n }\n\n return Object(val);\n}\n\nfunction shouldUseNative() {\n try {\n if (!Object.assign) {\n return false;\n } // Detect buggy property enumeration order in older V8 versions.\n // https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\n\n var test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\n test1[5] = 'de';\n\n if (Object.getOwnPropertyNames(test1)[0] === '5') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test2 = {};\n\n for (var i = 0; i < 10; i++) {\n test2['_' + String.fromCharCode(i)] = i;\n }\n\n var order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n return test2[n];\n });\n\n if (order2.join('') !== '0123456789') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test3 = {};\n 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n test3[letter] = letter;\n });\n\n if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n return false;\n }\n\n return true;\n } catch (err) {\n // We don't expect any of the above to throw, but better to be safe.\n return false;\n }\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n var from;\n var to = toObject(target);\n var symbols;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n\n if (getOwnPropertySymbols) {\n symbols = getOwnPropertySymbols(from);\n\n for (var i = 0; i < symbols.length; i++) {\n if (propIsEnumerable.call(from, symbols[i])) {\n to[symbols[i]] = from[symbols[i]];\n }\n }\n }\n }\n\n return to;\n};\n\n/***/ }),\n/* 981 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nif (true) {\n module.exports = __webpack_require__(982);\n} else {}\n\n/***/ }),\n/* 982 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar _f, g, h, k, l;\n\nif (\"undefined\" === typeof window || \"function\" !== typeof MessageChannel) {\n var p = null,\n q = null,\n t = function t() {\n if (null !== p) try {\n var a = exports.unstable_now();\n p(!0, a);\n p = null;\n } catch (b) {\n throw setTimeout(t, 0), b;\n }\n },\n u = Date.now();\n\n exports.unstable_now = function () {\n return Date.now() - u;\n };\n\n _f = function f(a) {\n null !== p ? setTimeout(_f, 0, a) : (p = a, setTimeout(t, 0));\n };\n\n g = function g(a, b) {\n q = setTimeout(a, b);\n };\n\n h = function h() {\n clearTimeout(q);\n };\n\n k = function k() {\n return !1;\n };\n\n l = exports.unstable_forceFrameRate = function () {};\n} else {\n var w = window.performance,\n x = window.Date,\n y = window.setTimeout,\n z = window.clearTimeout;\n\n if (\"undefined\" !== typeof console) {\n var A = window.cancelAnimationFrame;\n \"function\" !== typeof window.requestAnimationFrame && console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\n \"function\" !== typeof A && console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\n }\n\n if (\"object\" === (0, _typeof2.default)(w) && \"function\" === typeof w.now) exports.unstable_now = function () {\n return w.now();\n };else {\n var B = x.now();\n\n exports.unstable_now = function () {\n return x.now() - B;\n };\n }\n var C = !1,\n D = null,\n E = -1,\n F = 5,\n G = 0;\n\n k = function k() {\n return exports.unstable_now() >= G;\n };\n\n l = function l() {};\n\n exports.unstable_forceFrameRate = function (a) {\n 0 > a || 125 < a ? console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\") : F = 0 < a ? Math.floor(1E3 / a) : 5;\n };\n\n var H = new MessageChannel(),\n I = H.port2;\n\n H.port1.onmessage = function () {\n if (null !== D) {\n var a = exports.unstable_now();\n G = a + F;\n\n try {\n D(!0, a) ? I.postMessage(null) : (C = !1, D = null);\n } catch (b) {\n throw I.postMessage(null), b;\n }\n } else C = !1;\n };\n\n _f = function _f(a) {\n D = a;\n C || (C = !0, I.postMessage(null));\n };\n\n g = function g(a, b) {\n E = y(function () {\n a(exports.unstable_now());\n }, b);\n };\n\n h = function h() {\n z(E);\n E = -1;\n };\n}\n\nfunction J(a, b) {\n var c = a.length;\n a.push(b);\n\n a: for (;;) {\n var d = c - 1 >>> 1,\n e = a[d];\n if (void 0 !== e && 0 < K(e, b)) a[d] = b, a[c] = e, c = d;else break a;\n }\n}\n\nfunction L(a) {\n a = a[0];\n return void 0 === a ? null : a;\n}\n\nfunction M(a) {\n var b = a[0];\n\n if (void 0 !== b) {\n var c = a.pop();\n\n if (c !== b) {\n a[0] = c;\n\n a: for (var d = 0, e = a.length; d < e;) {\n var m = 2 * (d + 1) - 1,\n n = a[m],\n v = m + 1,\n r = a[v];\n if (void 0 !== n && 0 > K(n, c)) void 0 !== r && 0 > K(r, n) ? (a[d] = r, a[v] = c, d = v) : (a[d] = n, a[m] = c, d = m);else if (void 0 !== r && 0 > K(r, c)) a[d] = r, a[v] = c, d = v;else break a;\n }\n }\n\n return b;\n }\n\n return null;\n}\n\nfunction K(a, b) {\n var c = a.sortIndex - b.sortIndex;\n return 0 !== c ? c : a.id - b.id;\n}\n\nvar N = [],\n O = [],\n P = 1,\n Q = null,\n R = 3,\n S = !1,\n T = !1,\n U = !1;\n\nfunction V(a) {\n for (var b = L(O); null !== b;) {\n if (null === b.callback) M(O);else if (b.startTime <= a) M(O), b.sortIndex = b.expirationTime, J(N, b);else break;\n b = L(O);\n }\n}\n\nfunction W(a) {\n U = !1;\n V(a);\n if (!T) if (null !== L(N)) T = !0, _f(X);else {\n var b = L(O);\n null !== b && g(W, b.startTime - a);\n }\n}\n\nfunction X(a, b) {\n T = !1;\n U && (U = !1, h());\n S = !0;\n var c = R;\n\n try {\n V(b);\n\n for (Q = L(N); null !== Q && (!(Q.expirationTime > b) || a && !k());) {\n var d = Q.callback;\n\n if (null !== d) {\n Q.callback = null;\n R = Q.priorityLevel;\n var e = d(Q.expirationTime <= b);\n b = exports.unstable_now();\n \"function\" === typeof e ? Q.callback = e : Q === L(N) && M(N);\n V(b);\n } else M(N);\n\n Q = L(N);\n }\n\n if (null !== Q) var m = !0;else {\n var n = L(O);\n null !== n && g(W, n.startTime - b);\n m = !1;\n }\n return m;\n } finally {\n Q = null, R = c, S = !1;\n }\n}\n\nfunction Y(a) {\n switch (a) {\n case 1:\n return -1;\n\n case 2:\n return 250;\n\n case 5:\n return 1073741823;\n\n case 4:\n return 1E4;\n\n default:\n return 5E3;\n }\n}\n\nvar Z = l;\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\n\nexports.unstable_cancelCallback = function (a) {\n a.callback = null;\n};\n\nexports.unstable_continueExecution = function () {\n T || S || (T = !0, _f(X));\n};\n\nexports.unstable_getCurrentPriorityLevel = function () {\n return R;\n};\n\nexports.unstable_getFirstCallbackNode = function () {\n return L(N);\n};\n\nexports.unstable_next = function (a) {\n switch (R) {\n case 1:\n case 2:\n case 3:\n var b = 3;\n break;\n\n default:\n b = R;\n }\n\n var c = R;\n R = b;\n\n try {\n return a();\n } finally {\n R = c;\n }\n};\n\nexports.unstable_pauseExecution = function () {};\n\nexports.unstable_requestPaint = Z;\n\nexports.unstable_runWithPriority = function (a, b) {\n switch (a) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n\n default:\n a = 3;\n }\n\n var c = R;\n R = a;\n\n try {\n return b();\n } finally {\n R = c;\n }\n};\n\nexports.unstable_scheduleCallback = function (a, b, c) {\n var d = exports.unstable_now();\n\n if (\"object\" === (0, _typeof2.default)(c) && null !== c) {\n var e = c.delay;\n e = \"number\" === typeof e && 0 < e ? d + e : d;\n c = \"number\" === typeof c.timeout ? c.timeout : Y(a);\n } else c = Y(a), e = d;\n\n c = e + c;\n a = {\n id: P++,\n callback: b,\n priorityLevel: a,\n startTime: e,\n expirationTime: c,\n sortIndex: -1\n };\n e > d ? (a.sortIndex = e, J(O, a), null === L(N) && a === L(O) && (U ? h() : U = !0, g(W, e - d))) : (a.sortIndex = c, J(N, a), T || S || (T = !0, _f(X)));\n return a;\n};\n\nexports.unstable_shouldYield = function () {\n var a = exports.unstable_now();\n V(a);\n var b = L(N);\n return b !== Q && null !== Q && null !== b && null !== b.callback && b.startTime <= a && b.expirationTime < Q.expirationTime || k();\n};\n\nexports.unstable_wrapCallback = function (a) {\n var b = R;\n return function () {\n var c = R;\n R = b;\n\n try {\n return a.apply(this, arguments);\n } finally {\n R = c;\n }\n };\n};\n\n/***/ }),\n/* 983 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;\n\n/***/ }),\n/* 984 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;\n\n/***/ }),\n/* 985 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;\n\n/***/ }),\n/* 986 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar arrayLikeToArray = __webpack_require__(472);\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\n\n/***/ }),\n/* 987 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\n\n/***/ }),\n/* 988 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\n\n/***/ }),\n/* 989 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar isArrayLike = function isArrayLike(value) {\n /**\n * isArrayLike([1, 2, 3]) => true\n * isArrayLike(document.body.children) => true\n * isArrayLike('abc') => true\n * isArrayLike(Function) => false\n */\n return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\n\nexports.default = isArrayLike;\n\n/***/ }),\n/* 990 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar is_object_like_1 = __webpack_require__(473);\n\nvar is_type_1 = __webpack_require__(117);\n\nvar isPlainObject = function isPlainObject(value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n * isObjectLike(Object.create(null)) => true\n */\n if (!is_object_like_1.default(value) || !is_type_1.default(value, 'Object')) {\n return false;\n }\n\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n};\n\nexports.default = isPlainObject;\n\n/***/ }),\n/* 991 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\n\nvar is_type_1 = __webpack_require__(117);\n\nvar isNumber = function isNumber(value) {\n return is_type_1.default(value, 'Number');\n};\n\nexports.default = isNumber;\n\n/***/ }),\n/* 992 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeSensor = exports.getSensor = void 0;\n\nvar _id = _interopRequireDefault(__webpack_require__(993));\n\nvar _sensors = __webpack_require__(994);\n\nvar _constant = __webpack_require__(487);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\n/**\n * all the sensor objects.\n * sensor pool\n */\n\n\nvar Sensors = {};\n/**\n * get one sensor\n * @param element\n * @returns {*}\n */\n\nvar getSensor = function getSensor(element) {\n var sensorId = element.getAttribute(_constant.SizeSensorId); // 1. if the sensor exists, then use it\n\n if (sensorId && Sensors[sensorId]) {\n return Sensors[sensorId];\n } // 2. not exist, then create one\n\n\n var newId = (0, _id[\"default\"])();\n element.setAttribute(_constant.SizeSensorId, newId);\n var sensor = (0, _sensors.createSensor)(element); // add sensor into pool\n\n Sensors[newId] = sensor;\n return sensor;\n};\n/**\n * 移除 sensor\n * @param sensor\n */\n\n\nexports.getSensor = getSensor;\n\nvar removeSensor = function removeSensor(sensor) {\n var sensorId = sensor.element.getAttribute(_constant.SizeSensorId); // remove attribute\n\n sensor.element.removeAttribute(_constant.SizeSensorId); // remove event, dom of the sensor used\n\n sensor.destroy(); // exist, then remove from pool\n\n if (sensorId && Sensors[sensorId]) {\n delete Sensors[sensorId];\n }\n};\n\nexports.removeSensor = removeSensor;\n\n/***/ }),\n/* 993 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar id = 1;\n/**\n * generate unique id in application\n * @return {string}\n */\n\nvar _default = function _default() {\n return \"\".concat(id++);\n};\n\nexports[\"default\"] = _default;\n\n/***/ }),\n/* 994 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _object = __webpack_require__(995);\n\nvar _resizeObserver = __webpack_require__(996);\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\n/**\n * sensor strategies\n */\n// export const createSensor = createObjectSensor;\n\n\nvar createSensor = typeof ResizeObserver !== 'undefined' ? _resizeObserver.createSensor : _object.createSensor;\nexports.createSensor = createSensor;\n\n/***/ }),\n/* 995 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _debounce = _interopRequireDefault(__webpack_require__(486));\n\nvar _constant = __webpack_require__(487);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\n\nvar createSensor = function createSensor(element) {\n var sensor = undefined; // callback\n\n var listeners = [];\n /**\n * create object DOM of sensor\n * @returns {HTMLObjectElement}\n */\n\n var newSensor = function newSensor() {\n // adjust style\n if (getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n\n var obj = document.createElement('object');\n\n obj.onload = function () {\n obj.contentDocument.defaultView.addEventListener('resize', resizeListener); // 直接触发一次 resize\n\n resizeListener();\n };\n\n obj.style.display = 'block';\n obj.style.position = 'absolute';\n obj.style.top = '0';\n obj.style.left = '0';\n obj.style.height = '100%';\n obj.style.width = '100%';\n obj.style.overflow = 'hidden';\n obj.style.pointerEvents = 'none';\n obj.style.zIndex = '-1';\n obj.style.opacity = '0';\n obj.setAttribute('class', _constant.SensorClassName);\n obj.setAttribute('tabindex', _constant.SensorTabIndex);\n obj.type = 'text/html'; // append into dom\n\n element.appendChild(obj); // for ie, should set data attribute delay, or will be white screen\n\n obj.data = 'about:blank';\n return obj;\n };\n /**\n * trigger listeners\n */\n\n\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all listener\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n /**\n * listen with one callback function\n * @param cb\n */\n\n var bind = function bind(cb) {\n // if not exist sensor, then create one\n if (!sensor) {\n sensor = newSensor();\n }\n\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n /**\n * destroy all\n */\n\n\n var destroy = function destroy() {\n if (sensor && sensor.parentNode) {\n if (sensor.contentDocument) {\n // remote event\n sensor.contentDocument.defaultView.removeEventListener('resize', resizeListener);\n } // remove dom\n\n\n sensor.parentNode.removeChild(sensor); // initial variable\n\n sensor = undefined;\n listeners = [];\n }\n };\n /**\n * cancel listener bind\n * @param cb\n */\n\n\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n\n if (idx !== -1) {\n listeners.splice(idx, 1);\n } // no listener, and sensor is exist\n // then destroy the sensor\n\n\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\n\nexports.createSensor = createSensor;\n\n/***/ }),\n/* 996 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _debounce = _interopRequireDefault(__webpack_require__(486));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\n\nvar createSensor = function createSensor(element) {\n var sensor = undefined; // callback\n\n var listeners = [];\n /**\n * trigger listeners\n */\n\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n /**\n * create ResizeObserver sensor\n * @returns\n */\n\n var newSensor = function newSensor() {\n var s = new ResizeObserver(resizeListener); // listen element\n\n s.observe(element); // trigger once\n\n resizeListener();\n return s;\n };\n /**\n * listen with callback\n * @param cb\n */\n\n\n var bind = function bind(cb) {\n if (!sensor) {\n sensor = newSensor();\n }\n\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n /**\n * destroy\n */\n\n\n var destroy = function destroy() {\n sensor.disconnect();\n listeners = [];\n sensor = undefined;\n };\n /**\n * cancel bind\n * @param cb\n */\n\n\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n\n if (idx !== -1) {\n listeners.splice(idx, 1);\n } // no listener, and sensor is exist\n // then destroy the sensor\n\n\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\n\nexports.createSensor = createSensor;\n\n/***/ }),\n/* 997 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flow = void 0;\n/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\n\nfunction flow() {\n var flows = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n flows[_i] = arguments[_i];\n }\n\n return function (param) {\n return flows.reduce(function (result, f) {\n return f(result);\n }, param);\n };\n}\n\nexports.flow = flow;\n\n/***/ }),\n/* 998 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pick = void 0;\n/**\n * 类似 lodash.pick 的方法\n * @param obj\n * @param keys\n */\n\nfunction pick(obj, keys) {\n var r = {};\n\n if (obj !== null && (0, _typeof2.default)(obj) === 'object') {\n keys.forEach(function (key) {\n var v = obj[key];\n\n if (v !== undefined) {\n r[key] = v;\n }\n });\n }\n\n return r;\n}\n\nexports.pick = pick;\n\n/***/ }),\n/* 999 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.template = void 0;\n\nvar util_1 = __webpack_require__(0);\n/**\n * 简单的模板引擎,使用方式如下(空格自动忽略):\n * template('hello, {name}', { name: 'AntV' }); // hello, AntV\n * @param string\n * @param options\n */\n\n\nfunction template(source, data) {\n return util_1.reduce( // @ts-ignore\n data, function (r, v, k) {\n return r.replace(new RegExp(\"{\\\\s*\" + k + \"\\\\s*}\", 'g'), v);\n }, source);\n}\n\nexports.template = template;\n\n/***/ }),\n/* 1000 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n/**\n * Simplified from https://github.com/zertosh/invariant.\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.log = exports.invariant = exports.LEVEL = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar LEVEL;\n\n(function (LEVEL) {\n LEVEL[\"ERROR\"] = \"error\";\n LEVEL[\"WARN\"] = \"warn\";\n LEVEL[\"INFO\"] = \"log\";\n})(LEVEL = exports.LEVEL || (exports.LEVEL = {}));\n\nvar BRAND = 'AntV/G2Plot';\n/**\n * 获取错误消息\n * @param format\n * @param args\n */\n\nfunction getMessage(format) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var argIndex = 0;\n return BRAND + \": \" + format.replace(/%s/g, function () {\n return \"\" + args[argIndex++];\n });\n}\n/**\n * invariant error\n * @param condition\n * @param format\n * @param args\n */\n\n\nfunction invariant(condition, format) {\n var args = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n\n if (!condition) {\n var error = new Error(getMessage.apply(void 0, tslib_1.__spreadArrays([format], args)));\n error.name = BRAND; // error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n\nexports.invariant = invariant;\n/**\n * 打印语句\n * @param level\n * @param condition\n * @param format\n * @param args\n */\n\nfunction log(level, condition, format) {\n var args = [];\n\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n\n if (!condition) {\n console[level](getMessage.apply(void 0, tslib_1.__spreadArrays([format], args)));\n }\n}\n\nexports.log = log;\n\n/***/ }),\n/* 1001 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getContainerSize = void 0;\n/**\n * get the element's bounding size\n * @param ele dom element\n * @returns the element width and height\n */\n\nfunction getContainerSize(ele) {\n if (!ele) {\n return {\n width: 0,\n height: 0\n };\n }\n\n var style = getComputedStyle(ele);\n return {\n width: (ele.clientWidth || parseInt(style.width, 10)) - parseInt(style.paddingLeft, 10) - parseInt(style.paddingRight, 10),\n height: (ele.clientHeight || parseInt(style.height, 10)) - parseInt(style.paddingTop, 10) - parseInt(style.paddingBottom, 10)\n };\n}\n\nexports.getContainerSize = getContainerSize;\n\n/***/ }),\n/* 1002 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getAllElements = exports.findGeometry = void 0;\n\nvar util_1 = __webpack_require__(0);\n/**\n * 在 Chart 中查找第一个指定 type 类型的 geometry\n * @param chart\n * @param type\n */\n\n\nfunction findGeometry(chart, type) {\n return chart.geometries.find(function (g) {\n return g.type === type;\n });\n}\n\nexports.findGeometry = findGeometry;\n/**\n * 获取 Chart 的 所有 elements\n */\n\nfunction getAllElements(chart) {\n return util_1.reduce(chart.geometries, function (r, geometry) {\n return r.concat(geometry.elements);\n }, []);\n}\n\nexports.getAllElements = getAllElements;\n\n/***/ }),\n/* 1003 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findViewById = void 0;\n/**\n * 在 Chart 中查找特定 id 的子 View\n * @param chart\n * @param id\n */\n\nfunction findViewById(chart, id) {\n return chart.views.find(function (view) {\n return view.id === id;\n });\n}\n\nexports.findViewById = findViewById;\n\n/***/ }),\n/* 1004 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformLabel = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n/**\n * 兼容 v1 label formatter\n * @param labelOptions\n */\n\n\nfunction transformLabel(labelOptions) {\n if (!util_1.isType(labelOptions, 'Object')) {\n return labelOptions;\n }\n\n var label = tslib_1.__assign({}, labelOptions);\n\n if (label.formatter && !label.content) {\n label.content = label.formatter;\n }\n\n return label;\n}\n\nexports.transformLabel = transformLabel;\n\n/***/ }),\n/* 1005 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getSplinePath = exports.catmullRom2bezier = exports.smoothBezier = exports.points2Path = void 0;\n\nvar matrix_util_1 = __webpack_require__(33);\n\nfunction points2Path(points, isInCircle) {\n var path = [];\n\n if (points.length) {\n path.push(['M', points[0].x, points[0].y]);\n\n for (var i = 1, length_1 = points.length; i < length_1; i += 1) {\n var item = points[i];\n path.push(['L', item.x, item.y]);\n }\n\n if (isInCircle) {\n path.push(['Z']);\n }\n }\n\n return path;\n}\n\nexports.points2Path = points2Path;\n/**\n * @ignore\n * 计算光滑的贝塞尔曲线\n */\n\nexports.smoothBezier = function (points, smooth, isLoop, constraint) {\n var cps = [];\n var prevPoint;\n var nextPoint;\n var hasConstraint = !!constraint;\n var min;\n var max;\n\n if (hasConstraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\n for (var i = 0, l = points.length; i < l; i++) {\n var point = points[i];\n min = matrix_util_1.vec2.min([0, 0], min, point);\n max = matrix_util_1.vec2.max([0, 0], max, point);\n }\n\n min = matrix_util_1.vec2.min([0, 0], min, constraint[0]);\n max = matrix_util_1.vec2.max([0, 0], max, constraint[1]);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n } else {\n if (i === 0 || i === len - 1) {\n cps.push(point);\n continue;\n } else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n var v = [0, 0];\n v = matrix_util_1.vec2.sub(v, nextPoint, prevPoint);\n v = matrix_util_1.vec2.scale(v, v, smooth);\n var d0 = matrix_util_1.vec2.distance(point, prevPoint);\n var d1 = matrix_util_1.vec2.distance(point, nextPoint);\n var sum = d0 + d1;\n\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n var v1 = matrix_util_1.vec2.scale([0, 0], v, -d0);\n var v2 = matrix_util_1.vec2.scale([0, 0], v, d1);\n var cp0 = matrix_util_1.vec2.add([0, 0], point, v1);\n var cp1 = matrix_util_1.vec2.add([0, 0], point, v2);\n\n if (hasConstraint) {\n cp0 = matrix_util_1.vec2.max([0, 0], cp0, min);\n cp0 = matrix_util_1.vec2.min([0, 0], cp0, max);\n cp1 = matrix_util_1.vec2.max([0, 0], cp1, min);\n cp1 = matrix_util_1.vec2.min([0, 0], cp1, max);\n }\n\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n};\n/**\n * @ignore\n * 贝塞尔曲线\n */\n\n\nfunction catmullRom2bezier(crp, z, constraint) {\n var isLoop = !!z;\n var pointList = [];\n\n for (var i = 0, l = crp.length; i < l; i += 2) {\n pointList.push([crp[i], crp[i + 1]]);\n }\n\n var controlPointList = exports.smoothBezier(pointList, 0.4, isLoop, constraint);\n var len = pointList.length;\n var d1 = [];\n var cp1;\n var cp2;\n var p;\n\n for (var i = 0; i < len - 1; i++) {\n cp1 = controlPointList[i * 2];\n cp2 = controlPointList[i * 2 + 1];\n p = pointList[i + 1];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n\n if (isLoop) {\n cp1 = controlPointList[len];\n cp2 = controlPointList[len + 1];\n p = pointList[0];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n\n return d1;\n}\n\nexports.catmullRom2bezier = catmullRom2bezier;\n/**\n * @ignore\n * 根据关键点获取限定了范围的平滑线\n */\n\nfunction getSplinePath(points, isInCircle, constaint) {\n var data = [];\n var first = points[0];\n var prePoint = null;\n\n if (points.length <= 2) {\n // 两点以内直接绘制成路径\n return points2Path(points, isInCircle);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (!prePoint || !(prePoint.x === point.x && prePoint.y === point.y)) {\n data.push(point.x);\n data.push(point.y);\n prePoint = point;\n }\n }\n\n var constraint = constaint || [// 范围\n [0, 0], [1, 1]];\n var splinePath = catmullRom2bezier(data, isInCircle, constraint);\n splinePath.unshift(['M', first.x, first.y]);\n return splinePath;\n}\n\nexports.getSplinePath = getSplinePath;\n\n/***/ }),\n/* 1006 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.deepAssign = void 0;\nvar MAX_MIX_LEVEL = 5; // 最大比对层级\n\nvar toString = {}.toString; // 类型检测\n\nvar isType = function isType(value, type) {\n return toString.call(value) === '[object ' + type + ']';\n};\n\nvar isArray = function isArray(value) {\n return isType(value, 'Array');\n};\n\nvar isObjectLike = function isObjectLike(value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n */\n return (0, _typeof2.default)(value) === 'object' && value !== null;\n};\n\nvar isPlainObject = function isPlainObject(value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n};\n/***\n * @param {any} dist\n * @param {any} src\n * @param {number} level 当前层级\n * @param {number} maxLevel 最大层级\n */\n\n\nvar deep = function deep(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n\n for (var key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n var value = src[key];\n\n if (!value) {\n // null 、 undefined 等情况直接赋值\n dist[key] = value;\n } else {\n if (isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n\n if (level < maxLevel) {\n deep(dist[key], value, level + 1, maxLevel);\n } else {\n // 层级过深直接赋值,性能问题\n dist[key] = src[key];\n }\n } else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else {\n dist[key] = value;\n }\n }\n }\n }\n};\n/**\n * deepAssign 功能类似 deepMix\n * 不同点在于 deepAssign 会将 null undefined 等类型直接覆盖给 source\n * 详细参考: __tests__/unit/utils/deep-assign-spec.ts\n */\n\n\nexports.deepAssign = function (rst) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n for (var i = 0; i < args.length; i += 1) {\n deep(rst, args[i]);\n }\n\n return rst;\n};\n\n/***/ }),\n/* 1007 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.kebabCase = void 0;\n/**\n * @desc simple kebabCase like lodash\n *\n * kebabCase('fooBar'); => 'foo-bar'\n */\n\nfunction kebabCase(word) {\n if (!word) {\n return word;\n }\n\n var result = word.match(/(([A-Z]{0,1}[a-z]*[^A-Z])|([A-Z]{1}))/g);\n return result.map(function (s) {\n return s.toLowerCase();\n }).join('-');\n}\n\nexports.kebabCase = kebabCase;\n\n/***/ }),\n/* 1008 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.measureTextWidth = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar context_1 = __webpack_require__(1009);\n/**\n * 计算文本在画布中的宽度\n * @param text 文本\n * @param font 字体\n */\n\n\nexports.measureTextWidth = util_1.memoize(function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n var fontSize = font.fontSize,\n _a = font.fontFamily,\n fontFamily = _a === void 0 ? 'sans-serif' : _a,\n fontWeight = font.fontWeight,\n fontStyle = font.fontStyle,\n fontVariant = font.fontVariant;\n var ctx = context_1.getCanvasContext(); // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font\n\n ctx.font = [fontStyle, fontWeight, fontVariant, fontSize + \"px\", fontFamily].join(' ');\n var metrics = ctx.measureText(util_1.isString(text) ? text : '');\n return metrics.width;\n}, function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n return tslib_1.__spreadArrays([text], util_1.values(font)).join('');\n});\n\n/***/ }),\n/* 1009 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getCanvasContext = void 0;\nvar ctx;\n/**\n * 获取 canvas context\n */\n\nfunction getCanvasContext() {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n\n return ctx;\n}\n\nexports.getCanvasContext = getCanvasContext;\n\n/***/ }),\n/* 1010 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.area = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar utils_1 = __webpack_require__(16);\n\nvar base_1 = __webpack_require__(89);\n/**\n * area geometry 的配置处理\n * @param params\n */\n\n\nfunction area(params) {\n var options = params.options;\n var area = options.area,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n smooth = options.smooth,\n tooltip = options.tooltip;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 如果存在才处理\n\n\n return area ? base_1.geometry(utils_1.deepAssign({}, params, {\n options: {\n type: 'area',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: tslib_1.__assign({\n shape: smooth ? 'smooth' : 'area',\n tooltip: formatter\n }, area)\n }\n })) : params;\n}\n\nexports.area = area;\n\n/***/ }),\n/* 1011 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.line = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar utils_1 = __webpack_require__(16);\n\nvar base_1 = __webpack_require__(89);\n/**\n * line 辅助点的配置处理\n * @param params\n */\n\n\nfunction line(params) {\n var options = params.options;\n var line = options.line,\n stepType = options.stepType,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n smooth = options.smooth,\n connectNulls = options.connectNulls,\n tooltip = options.tooltip;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 如果存在才处理\n\n\n return line ? base_1.geometry(utils_1.deepAssign({}, params, {\n options: {\n type: 'line',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: util_1.deepMix({\n shape: stepType || (smooth ? 'smooth' : 'line'),\n tooltip: formatter\n }, line),\n args: {\n connectNulls: connectNulls\n }\n }\n })) : params;\n}\n\nexports.line = line;\n\n/***/ }),\n/* 1012 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.point = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar utils_1 = __webpack_require__(16);\n\nvar base_1 = __webpack_require__(89);\n/**\n * point 辅助点的配置处理\n * @param params\n */\n\n\nfunction point(params) {\n var options = params.options;\n var point = options.point,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n sizeField = options.sizeField,\n shapeField = options.shapeField,\n tooltip = options.tooltip;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, seriesField, sizeField, shapeField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n return point ? base_1.geometry(utils_1.deepAssign({}, params, {\n options: {\n type: 'point',\n colorField: seriesField,\n shapeField: shapeField,\n tooltipFields: fields,\n mapping: tslib_1.__assign({\n tooltip: formatter\n }, point)\n }\n })) : params;\n}\n\nexports.point = point;\n\n/***/ }),\n/* 1013 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interval = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar base_1 = __webpack_require__(89);\n/**\n * 柱形图其他的 adaptor\n * @param params\n */\n\n\nfunction otherAdaptor(params) {\n var chart = params.chart,\n options = params.options,\n ext = params.ext;\n var seriesField = options.seriesField,\n isGroup = options.isGroup,\n isStack = options.isStack,\n marginRatio = options.marginRatio,\n widthRatio = options.widthRatio,\n groupField = options.groupField,\n theme = options.theme;\n /**\n * adjust\n */\n\n var adjust = [];\n\n if (seriesField) {\n // group\n if (isGroup) {\n adjust.push({\n type: 'dodge',\n dodgeBy: groupField || seriesField,\n marginRatio: marginRatio\n });\n } // stack\n\n\n if (isStack) {\n adjust.push({\n type: 'stack',\n marginRatio: marginRatio\n });\n }\n }\n\n if (adjust.length && (ext === null || ext === void 0 ? void 0 : ext.geometry)) {\n var g = ext === null || ext === void 0 ? void 0 : ext.geometry;\n g.adjust(adjust);\n } // widthRatio\n\n\n if (!util_1.isNil(widthRatio)) {\n chart.theme(utils_1.deepAssign({}, util_1.isObject(theme) ? theme : g2_1.getTheme(theme), {\n // columWidthRatio 配置覆盖 theme 中的配置\n columnWidthRatio: widthRatio\n }));\n }\n\n return params;\n}\n\nfunction interval(params) {\n var options = params.options;\n var xField = options.xField,\n yField = options.yField,\n interval = options.interval,\n seriesField = options.seriesField,\n tooltip = options.tooltip,\n minColumnWidth = options.minColumnWidth,\n maxColumnWidth = options.maxColumnWidth,\n columnBackground = options.columnBackground;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 保障一定要存在 interval 映射\n\n\n var ext = (interval ? base_1.geometry(utils_1.deepAssign({}, params, {\n options: {\n type: 'interval',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: tslib_1.__assign({\n tooltip: formatter\n }, interval),\n args: {\n minColumnWidth: minColumnWidth,\n maxColumnWidth: maxColumnWidth,\n background: columnBackground\n }\n }\n })) : params).ext;\n return otherAdaptor(tslib_1.__assign(tslib_1.__assign({}, params), {\n ext: ext\n }));\n}\n\nexports.interval = interval;\n\n/***/ }),\n/* 1014 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.edge = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar utils_1 = __webpack_require__(16);\n\nvar base_1 = __webpack_require__(89);\n/**\n * edge 的配置处理\n * @param params\n */\n\n\nfunction edge(params) {\n var options = params.options;\n var edge = options.edge,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n tooltip = options.tooltip;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n return edge ? base_1.geometry(utils_1.deepAssign({}, params, {\n options: {\n type: 'edge',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: tslib_1.__assign({\n tooltip: formatter\n }, edge)\n }\n })) : params;\n}\n\nexports.edge = edge;\n\n/***/ }),\n/* 1015 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.statistic = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar common_1 = __webpack_require__(34);\n\nvar adaptor_1 = __webpack_require__(489);\n\nvar constant_1 = __webpack_require__(194);\n/**\n * coordinate 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n radius = options.radius; // coordinate\n\n chart.coordinate('theta', {\n innerRadius: innerRadius,\n radius: radius\n });\n return params;\n}\n/**\n * statistic 配置\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n statistic = options.statistic,\n percent = options.percent,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n /** 中心文本 指标卡 */\n\n if (innerRadius && statistic) {\n var transformContent = statistic.content;\n\n if (transformContent && !transformContent.formatter) {\n // @ts-ignore\n transformContent.formatter = function (_a) {\n var percent = _a.percent;\n var metaFormatter = util_1.get(meta, [constant_1.PERCENT, 'formatter']);\n\n if (metaFormatter) {\n return metaFormatter(percent);\n }\n\n return percent;\n };\n }\n\n utils_1.renderStatistic(chart, {\n statistic: tslib_1.__assign(tslib_1.__assign({}, statistic), {\n content: transformContent\n }),\n plotType: 'ring-progress'\n }, {\n percent: percent\n });\n }\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n\nexports.statistic = statistic;\n/**\n * 环形进度图适配器\n * @param chart\n * @param options\n */\n\nfunction adaptor(params) {\n return utils_1.flow(adaptor_1.geometry, common_1.scale({}), coordinate, statistic, common_1.animation, common_1.theme, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1016 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar constants_1 = __webpack_require__(152);\n\nvar utils_2 = __webpack_require__(118);\n\nvar data_1 = __webpack_require__(153);\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n columnStyle = options.columnStyle,\n columnWidthRatio = options.columnWidthRatio;\n var seriesData = utils_2.getTinyData(data);\n chart.data(seriesData);\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: constants_1.X_FIELD,\n yField: constants_1.Y_FIELD,\n widthRatio: columnWidthRatio,\n interval: {\n style: columnStyle,\n color: color\n }\n }\n });\n geometries_1.interval(p);\n chart.axis(false);\n chart.legend(false);\n chart.interaction('element-active'); // scale\n\n common_1.scale((_a = {}, _a[constants_1.X_FIELD] = xAxis, _a[constants_1.Y_FIELD] = yAxis, _a), (_b = {}, _b[constants_1.X_FIELD] = {\n type: 'cat'\n }, _b[constants_1.Y_FIELD] = data_1.adjustYMetaByZero(seriesData, constants_1.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你柱形图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return utils_1.flow(geometry, common_1.tooltip, common_1.theme, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1017 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DEFAULT_TOOLTIP_OPTIONS = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nexports.DEFAULT_TOOLTIP_OPTIONS = {\n showTitle: false,\n shared: true,\n showMarkers: false,\n customContent: function customContent(x, data) {\n return \"\" + util_1.get(data, [0, 'data', 'y'], 0);\n },\n containerTpl: '',\n itemTpl: '{value}',\n domStyles: {\n 'g2-tooltip': {\n padding: '2px 4px',\n fontSize: '10px'\n }\n }\n};\n\n/***/ }),\n/* 1018 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar constants_1 = __webpack_require__(152);\n\nvar utils_2 = __webpack_require__(118);\n\nvar data_1 = __webpack_require__(153);\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n areaStyle = options.areaStyle,\n pointOptions = options.point,\n lineOptions = options.line;\n var seriesData = utils_2.getTinyData(data);\n chart.data(seriesData);\n var primary = utils_1.deepAssign({}, params, {\n options: {\n xField: constants_1.X_FIELD,\n yField: constants_1.Y_FIELD,\n area: {\n color: color,\n style: areaStyle\n },\n line: lineOptions,\n point: pointOptions\n }\n });\n var second = utils_1.deepAssign({}, primary, {\n options: {\n tooltip: false\n }\n }); // area geometry 处理\n\n geometries_1.area(primary);\n geometries_1.line(second);\n geometries_1.point(second);\n chart.axis(false);\n chart.legend(false); // scale\n\n common_1.scale((_a = {}, _a[constants_1.X_FIELD] = xAxis, _a[constants_1.Y_FIELD] = yAxis, _a), (_b = {}, _b[constants_1.X_FIELD] = {\n type: 'cat'\n }, _b[constants_1.Y_FIELD] = data_1.adjustYMetaByZero(seriesData, constants_1.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你面积图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return utils_1.flow(geometry, common_1.tooltip, common_1.theme, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1019 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar utils_1 = __webpack_require__(16);\n\nvar common_1 = __webpack_require__(34);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar data_1 = __webpack_require__(153);\n\nvar utils_2 = __webpack_require__(118);\n\nvar constants_1 = __webpack_require__(152);\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n lineStyle = options.lineStyle,\n pointMapping = options.point;\n var seriesData = utils_2.getTinyData(data);\n chart.data(seriesData); // line geometry 处理\n\n var primary = utils_1.deepAssign({}, params, {\n options: {\n xField: constants_1.X_FIELD,\n yField: constants_1.Y_FIELD,\n line: {\n color: color,\n style: lineStyle\n },\n point: pointMapping\n }\n });\n var second = utils_1.deepAssign({}, primary, {\n options: {\n tooltip: false\n }\n });\n geometries_1.line(primary);\n geometries_1.point(second);\n chart.axis(false);\n chart.legend(false); // scale\n\n common_1.scale((_a = {}, _a[constants_1.X_FIELD] = xAxis, _a[constants_1.Y_FIELD] = yAxis, _a), (_b = {}, _b[constants_1.X_FIELD] = {\n type: 'cat'\n }, _b[constants_1.Y_FIELD] = data_1.adjustYMetaByZero(seriesData, constants_1.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你折线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return utils_1.flow(geometry, common_1.theme, common_1.tooltip, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1020 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar g2_1 = __webpack_require__(17);\n\nvar marker_active_1 = __webpack_require__(1021);\n\ng2_1.registerAction('marker-active', marker_active_1.MarkerActiveAction);\ng2_1.registerInteraction('marker-active', {\n start: [{\n trigger: 'tooltip:show',\n action: 'marker-active:active'\n }]\n});\n\n/***/ }),\n/* 1021 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MarkerActiveAction = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar g2_1 = __webpack_require__(17);\n\nvar MarkerActiveAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(MarkerActiveAction, _super);\n\n function MarkerActiveAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n MarkerActiveAction.prototype.active = function () {\n var view = this.getView();\n var evt = this.context.event;\n\n if (evt.data) {\n // items: 数组对象,当前 tooltip 显示的每条内容\n var items_1 = evt.data.items;\n var points = view.geometries.filter(function (geom) {\n return geom.type === 'point';\n });\n util_1.each(points, function (point) {\n util_1.each(point.elements, function (element) {\n var active = util_1.findIndex(items_1, function (item) {\n return item.data === element.data;\n }) !== -1; // @ts-ignore\n\n element.setState('active', active);\n });\n });\n }\n };\n\n MarkerActiveAction.prototype.getView = function () {\n return this.context.view;\n };\n\n return MarkerActiveAction;\n}(g2_1.InteractionAction);\n\nexports.MarkerActiveAction = MarkerActiveAction;\n\n/***/ }),\n/* 1022 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.interaction = void 0;\n\nvar polygon_1 = __webpack_require__(490);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar utils_2 = __webpack_require__(493);\n/**\n * 获取默认 option\n * @param params\n */\n\n\nfunction defaultOptions(params) {\n var options = params.options;\n var colorField = options.colorField;\n return utils_1.deepAssign({\n options: {\n // 默认按照 name 字段对颜色进行分类\n colorField: 'name',\n rectStyle: {\n lineWidth: 1,\n stroke: '#fff'\n },\n hierarchyConfig: {\n tile: 'treemapResquarify'\n },\n label: {\n fields: ['name'],\n layout: {\n type: 'limit-in-shape'\n }\n },\n tooltip: {\n showMarkers: false,\n showTitle: false,\n fields: ['name', 'value', colorField],\n formatter: function formatter(data) {\n return {\n name: data.name,\n value: data.value\n };\n }\n },\n interactions: [{\n type: 'view-zoom'\n }, {\n type: 'treemap-element-zoom'\n }]\n }\n }, params);\n}\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var color = options.color,\n colorField = options.colorField,\n rectStyle = options.rectStyle;\n var data = utils_2.transformData({\n data: options.data,\n colorField: options.colorField,\n openDrillDown: utils_2.isDrillDown(options.interactions)\n });\n chart.data(data); // geometry\n\n polygon_1.polygon(utils_1.deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n rawFields: ['value'],\n polygon: {\n color: color,\n style: rectStyle\n }\n }\n }));\n return params;\n}\n/**\n * 坐标轴\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\n\n\nfunction interaction(params) {\n var chart = params.chart,\n options = params.options;\n var interactions = options.interactions,\n hierarchyConfig = options.hierarchyConfig;\n common_1.interaction({\n chart: chart,\n options: {\n interactions: utils_2.getFommatInteractions(interactions, hierarchyConfig)\n }\n });\n return params;\n}\n\nexports.interaction = interaction;\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\n\nfunction adaptor(params) {\n return utils_1.flow(defaultOptions, geometry, axis, common_1.theme, common_1.legend, common_1.tooltip, interaction, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1023 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.treemap = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar d3Hierarchy = tslib_1.__importStar(__webpack_require__(294));\n\nvar util_1 = __webpack_require__(0);\n\nvar util_2 = __webpack_require__(1047);\n\nvar DEFAULT_OPTIONS = {\n field: 'value',\n tile: 'treemapSquarify',\n size: [1, 1],\n round: false,\n ignoreParentValue: true,\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n as: ['x', 'y']\n};\n\nfunction treemap(data, options) {\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n\n if (!util_1.isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n\n var field;\n\n try {\n field = util_2.getField(options);\n } catch (e) {\n console.warn(e);\n }\n\n var partition = function partition(data) {\n return d3Hierarchy.treemap().tile(d3Hierarchy[options.tile]).size(options.size).round(options.round).padding(options.padding).paddingInner(options.paddingInner).paddingOuter(options.paddingOuter).paddingTop(options.paddingTop).paddingRight(options.paddingRight).paddingBottom(options.paddingBottom).paddingLeft(options.paddingLeft)(\n /**\n * d3Hierarchy 布局中需指定 sum 函数计算 node 值,规则是:从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数,并返回当前 node。\n * for example:\n * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n * ignoreParentValue 为 true(默认) 时,父元素的值由子元素累加而来,该值为 0 + 5 + 5 = 10\n * ignoreParentValue 为 false 时,父元素的值由当前节点 及子元素累加而来,该值为 10 + 5 + 5 = 20\n * sum 函数中,d 为用户传入的 data, children 为保留字段\n */\n d3Hierarchy.hierarchy(data).sum(function (d) {\n return options.ignoreParentValue && d.children ? 0 : d[field];\n }));\n };\n\n var root = partition(data);\n /*\n * points:\n * 3 2\n * 0 1\n */\n\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n return util_2.getAllNodes(root);\n}\n\nexports.treemap = treemap;\n\n/***/ }),\n/* 1024 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n\n while (children = node.children) {\n node = children[0];\n }\n\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n\n while (children = node.children) {\n node = children[children.length - 1];\n }\n\n return node;\n}\n\nfunction _default() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0; // First walk, computing the initial x & y values.\n\n root.eachAfter(function (node) {\n var children = node.children;\n\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2; // Second walk, normalizing x & y to the desired size.\n\n return root.eachAfter(nodeSize ? function (node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function (node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function (x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : nodeSize ? null : [dx, dy];\n };\n\n cluster.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : nodeSize ? [dx, dy] : null;\n };\n\n return cluster;\n}\n\n/***/ }),\n/* 1025 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;else while (--i >= 0) {\n sum += children[i].value;\n }\n node.value = sum;\n}\n\nfunction _default() {\n return this.eachAfter(count);\n}\n\n/***/ }),\n/* 1026 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _default(callback, that) {\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(this),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n callback.call(that, node, ++index, this);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return this;\n}\n\n/***/ }),\n/* 1027 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(callback, that) {\n var node = this,\n nodes = [node],\n children,\n i,\n index = -1;\n\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n\n return this;\n}\n\n/***/ }),\n/* 1028 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(callback, that) {\n var node = this,\n nodes = [node],\n next = [],\n children,\n i,\n n,\n index = -1;\n\n while (node = nodes.pop()) {\n next.push(node);\n\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n\n return this;\n}\n\n/***/ }),\n/* 1029 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _default(callback, that) {\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(this),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\n/***/ }),\n/* 1030 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(value) {\n return this.eachAfter(function (node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n\n while (--i >= 0) {\n sum += children[i].value;\n }\n\n node.value = sum;\n });\n}\n\n/***/ }),\n/* 1031 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(compare) {\n return this.eachBefore(function (node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n\n/***/ }),\n/* 1032 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n\n var k = nodes.length;\n\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n\n return c;\n}\n\n/***/ }),\n/* 1033 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default() {\n var node = this,\n nodes = [node];\n\n while (node = node.parent) {\n nodes.push(node);\n }\n\n return nodes;\n}\n\n/***/ }),\n/* 1034 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default() {\n return Array.from(this);\n}\n\n/***/ }),\n/* 1035 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default() {\n var leaves = [];\n this.eachBefore(function (node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n\n/***/ }),\n/* 1036 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default() {\n var root = this,\n links = [];\n root.each(function (node) {\n if (node !== root) {\n // Don’t include the root’s parent, if any.\n links.push({\n source: node.parent,\n target: node\n });\n }\n });\n return links;\n}\n\n/***/ }),\n/* 1037 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _callee;\n\nvar _regenerator = _interopRequireDefault(__webpack_require__(154));\n\nvar _marked = /*#__PURE__*/_regenerator.default.mark(_callee);\n\nfunction _callee() {\n var node, current, next, children, i, n;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n node = this, next = [node];\n\n case 1:\n current = next.reverse(), next = [];\n\n case 2:\n if (!(node = current.pop())) {\n _context.next = 8;\n break;\n }\n\n _context.next = 5;\n return node;\n\n case 5:\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n\n _context.next = 2;\n break;\n\n case 8:\n if (next.length) {\n _context.next = 1;\n break;\n }\n\n case 9:\n case \"end\":\n return _context.stop();\n }\n }\n }, _marked, this);\n}\n\n/***/ }),\n/* 1038 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(module) {\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"); // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && (0, _typeof2.default)(value) === \"object\" && hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n define(Gp, toStringTagSymbol, \"Generator\"); // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\n( false ? undefined : (0, _typeof2.default)(module)) === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(470)(module)))\n\n/***/ }),\n/* 1039 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _siblings = __webpack_require__(494);\n\nvar _accessors = __webpack_require__(296);\n\nvar _constant = _interopRequireWildcard(__webpack_require__(497));\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nfunction _default() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = _constant.constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n\n if (radius) {\n root.eachBefore(radiusLeaf(radius)).eachAfter(packChildren(padding, 0.5)).eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius)).eachAfter(packChildren(_constant.constantZero, 1)).eachAfter(packChildren(padding, root.r / Math.min(dx, dy))).eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n\n return root;\n }\n\n pack.radius = function (x) {\n return arguments.length ? (radius = (0, _accessors.optional)(x), pack) : radius;\n };\n\n pack.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function (x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : (0, _constant.default)(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function (node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function (node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n if (r) for (i = 0; i < n; ++i) {\n children[i].r += r;\n }\n e = (0, _siblings.packEnclose)(children);\n if (r) for (i = 0; i < n; ++i) {\n children[i].r -= r;\n }\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function (node) {\n var parent = node.parent;\n node.r *= k;\n\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\n/***/ }),\n/* 1040 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _round = _interopRequireDefault(__webpack_require__(498));\n\nvar _dice = _interopRequireDefault(__webpack_require__(155));\n\nfunction _default() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 = root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(_round.default);\n return root;\n }\n\n function positionNode(dy, n) {\n return function (node) {\n if (node.children) {\n (0, _dice.default)(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function (x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function (x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n\n/***/ }),\n/* 1041 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _accessors = __webpack_require__(296);\n\nvar _index = __webpack_require__(295);\n\nvar preroot = {\n depth: -1\n},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nfunction _default() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var nodes = Array.from(data),\n n = nodes.length,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map();\n\n for (i = 0; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new _index.Node(d);\n\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n\n if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function (node) {\n node.depth = node.parent.depth + 1;\n --n;\n }).eachBefore(_index.computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n return root;\n }\n\n stratify.id = function (x) {\n return arguments.length ? (id = (0, _accessors.required)(x), stratify) : id;\n };\n\n stratify.parentId = function (x) {\n return arguments.length ? (parentId = (0, _accessors.required)(x), stratify) : parentId;\n };\n\n return stratify;\n}\n\n/***/ }),\n/* 1042 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _index = __webpack_require__(295);\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n} // function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\n\n\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n} // This function works analogously to nextLeft.\n\n\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n} // Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\n\n\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n} // All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\n\n\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n} // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\n\n\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n\n this.a = this; // ancestor\n\n this.z = 0; // prelim\n\n this.m = 0; // mod\n\n this.c = 0; // change\n\n this.s = 0; // shift\n\n this.t = null; // thread\n\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(_index.Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n} // Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\n\n\nfunction _default() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root); // Compute the layout using Buchheim et al.’s algorithm.\n\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk); // If a fixed node size is specified, scale x and y.\n\n if (nodeSize) root.eachBefore(sizeNode); // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function (node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function (node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return root;\n } // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n\n\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n } // Computes all real x-coordinates by summing up the modifiers recursively.\n\n\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n } // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n\n\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function (x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : nodeSize ? null : [dx, dy];\n };\n\n tree.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : nodeSize ? [dx, dy] : null;\n };\n\n return tree;\n}\n\n/***/ }),\n/* 1043 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _round = _interopRequireDefault(__webpack_require__(498));\n\nvar _squarify = _interopRequireDefault(__webpack_require__(297));\n\nvar _accessors = __webpack_require__(296);\n\nvar _constant = _interopRequireWildcard(__webpack_require__(497));\n\nfunction _default() {\n var tile = _squarify.default,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = _constant.constantZero,\n paddingTop = _constant.constantZero,\n paddingRight = _constant.constantZero,\n paddingBottom = _constant.constantZero,\n paddingLeft = _constant.constantZero;\n\n function treemap(root) {\n root.x0 = root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(_round.default);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function (x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function (x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function (x) {\n return arguments.length ? (tile = (0, _accessors.required)(x), treemap) : tile;\n };\n\n treemap.padding = function (x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function (x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : (0, _constant.default)(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function (x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function (x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : (0, _constant.default)(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function (x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : (0, _constant.default)(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function (x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : (0, _constant.default)(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function (x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : (0, _constant.default)(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n\n/***/ }),\n/* 1044 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i,\n n = nodes.length,\n sum,\n sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = value / 2 + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;else hi = mid;\n }\n\n if (valueTarget - sums[k - 1] < sums[k] - valueTarget && i + 1 < k) --k;\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if (x1 - x0 > y1 - y0) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n\n/***/ }),\n/* 1045 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _dice = _interopRequireDefault(__webpack_require__(155));\n\nvar _slice = _interopRequireDefault(__webpack_require__(195));\n\nfunction _default(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? _slice.default : _dice.default)(parent, x0, y0, x1, y1);\n}\n\n/***/ }),\n/* 1046 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _dice = _interopRequireDefault(__webpack_require__(155));\n\nvar _slice = _interopRequireDefault(__webpack_require__(195));\n\nvar _squarify = __webpack_require__(297);\n\nvar _default = function custom(ratio) {\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && rows.ratio === ratio) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n\n for (i = row.value = 0, n = nodes.length; i < n; ++i) {\n row.value += nodes[i].value;\n }\n\n if (row.dice) (0, _dice.default)(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);else (0, _slice.default)(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = (0, _squarify.squarifyRatio)(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function (x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n}(_squarify.phi);\n\nexports.default = _default;\n\n/***/ }),\n/* 1047 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getAllNodes = exports.getField = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar INVALID_FIELD_ERR_MSG = 'Invalid field: it must be a string!';\n\nfunction getField(options, defaultField) {\n var field = options.field,\n fields = options.fields;\n\n if (util_1.isString(field)) {\n return field;\n }\n\n if (util_1.isArray(field)) {\n console.warn(INVALID_FIELD_ERR_MSG);\n return field[0];\n }\n\n console.warn(INVALID_FIELD_ERR_MSG + \" will try to get fields instead.\");\n\n if (util_1.isString(fields)) {\n return fields;\n }\n\n if (util_1.isArray(fields) && fields.length) {\n return fields[0];\n }\n\n if (defaultField) {\n return defaultField;\n }\n\n throw new TypeError(INVALID_FIELD_ERR_MSG);\n}\n\nexports.getField = getField;\n\nfunction getAllNodes(root) {\n var nodes = [];\n\n if (root && root.each) {\n // d3-hierarchy\n root.each(function (node) {\n nodes.push(node);\n });\n } else if (root && root.eachNode) {\n // @antv/hierarchy\n root.eachNode(function (node) {\n nodes.push(node);\n });\n }\n\n return nodes;\n}\n\nexports.getAllNodes = getAllNodes;\n\n/***/ }),\n/* 1048 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar g2_1 = __webpack_require__(17);\n\nvar treemap_drill_down_action_1 = __webpack_require__(1049);\n\nvar util_1 = __webpack_require__(1050);\n\ng2_1.registerAction('treemap-drill-down-action', treemap_drill_down_action_1.TreemapDrillDownAction);\ng2_1.registerInteraction('treemap-drill-down', {\n showEnable: [{\n trigger: 'plot:mouseenter',\n action: 'cursor:pointer'\n }, {\n trigger: 'plot:mouseleave',\n action: 'cursor:default'\n }],\n start: [{\n trigger: 'element:click',\n isEnable: util_1.isTopParentNode,\n action: ['treemap-drill-down-action:click', 'reset-button:show']\n }],\n rollback: [{\n trigger: 'reset-button:click',\n action: ['treemap-drill-down-action:reset']\n }, {\n trigger: 'reset-button:click',\n action: ['reset-button:hide'],\n isEnable: function isEnable(context) {\n return !util_1.hasHistoryDrill(context);\n }\n }]\n});\n\n/***/ }),\n/* 1049 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TreemapDrillDownAction = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(493);\n\nvar TreemapDrillDownAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(TreemapDrillDownAction, _super);\n\n function TreemapDrillDownAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this; // 存储历史下钻 scale\n\n\n _this.cacheDataStack = [];\n return _this;\n }\n\n TreemapDrillDownAction.prototype.drill = function (data) {\n var view = this.context.view;\n var currentData = view.getData();\n var groupScales = view.getGroupScales();\n var hierarchyConfig = util_1.get(view, ['interactions', 'treemap-drill-down', 'cfg', 'hierarchyConfig'], {}); // 重新 update 数据\n\n var drillData = utils_1.transformData({\n data: data,\n colorField: util_1.get(groupScales, [0, 'field']),\n openDrillDown: true,\n hierarchyConfig: hierarchyConfig\n });\n view.changeData(drillData);\n this.cacheDataStack.push(currentData);\n };\n\n TreemapDrillDownAction.prototype.click = function () {\n var data = util_1.get(this.context, ['event', 'data', 'data']);\n if (!data) return false;\n this.drill(data);\n };\n\n TreemapDrillDownAction.prototype.reset = function () {\n var view = this.context.view;\n\n if (!util_1.isArray(this.cacheDataStack) || this.cacheDataStack.length <= 0) {\n return;\n }\n\n var cacheData = this.cacheDataStack.splice(this.cacheDataStack.length - 1, 1);\n view.changeData(cacheData[0]);\n };\n\n return TreemapDrillDownAction;\n}(g2_1.Action);\n\nexports.TreemapDrillDownAction = TreemapDrillDownAction;\n\n/***/ }),\n/* 1050 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hasHistoryDrill = exports.isTopParentNode = void 0;\n\nvar util_1 = __webpack_require__(0);\n/**\n * 判断是否为父节点\n */\n\n\nfunction isTopParentNode(context) {\n var data = util_1.get(context, ['event', 'data', 'data'], {});\n return util_1.isArray(data.children) && data.children.length > 0 && data.depth === 1;\n}\n\nexports.isTopParentNode = isTopParentNode;\n/**\n * 判断是否仍有历史下钻\n */\n\nfunction hasHistoryDrill(context) {\n if (!context || !context.getAction) return false;\n var treemapElementDrillAction = context.getAction('treemap-drill-down-action');\n if (!treemapElementDrillAction) return false; // @ts-ignore\n\n var cacheDataStack = treemapElementDrillAction.cacheDataStack;\n return util_1.isArray(cacheDataStack) && cacheDataStack.length > 0;\n}\n\nexports.hasHistoryDrill = hasHistoryDrill;\n\n/***/ }),\n/* 1051 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar adaptor_1 = __webpack_require__(500);\n/**\n * 柱形图适配器\n * @param params\n */\n\n\nfunction adaptor(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n barStyle = options.barStyle,\n barWidthRatio = options.barWidthRatio,\n label = options.label,\n data = options.data,\n seriesField = options.seriesField,\n isStack = options.isStack,\n minBarWidth = options.minBarWidth,\n maxBarWidth = options.maxBarWidth; // label of bar charts default position is left, if plot has label\n\n if (label && !label.position) {\n label.position = 'left'; // 配置默认的 label layout: 如果用户没有指定 layout 和 position, 则自动配置 layout\n\n if (!label.layout) {\n label.layout = [{\n type: 'interval-adjust-position'\n }, {\n type: 'interval-hide-overlap'\n }, {\n type: 'adjust-color'\n }, {\n type: 'limit-in-plot',\n cfg: {\n action: 'hide'\n }\n }];\n }\n } // 默认 legend 位置\n\n\n var legend = options.legend;\n\n if (seriesField) {\n if (legend !== false) {\n legend = tslib_1.__assign({\n position: isStack ? 'top-left' : 'right-top',\n reversed: isStack ? false : true\n }, legend || {});\n }\n } else {\n legend = false;\n } // @ts-ignore 直接改值\n\n\n params.options.legend = legend; // 默认 tooltip 配置\n\n var tooltip = options.tooltip;\n\n if (seriesField) {\n if (tooltip !== false) {\n tooltip = tslib_1.__assign({\n reversed: isStack ? false : true\n }, tooltip || {});\n }\n } // @ts-ignore 直接改值\n\n\n params.options.tooltip = tooltip; // transpose column to bar\n\n chart.coordinate().transpose();\n return adaptor_1.adaptor({\n chart: chart,\n options: tslib_1.__assign(tslib_1.__assign({}, options), {\n label: label,\n // switch xField and yField\n xField: yField,\n yField: xField,\n xAxis: yAxis,\n yAxis: xAxis,\n // rename attrs as column\n columnStyle: barStyle,\n columnWidthRatio: barWidthRatio,\n minColumnWidth: minBarWidth,\n maxColumnWidth: maxBarWidth,\n columnBackground: options.barBackground,\n // bar 调整数据顺序\n data: data ? data.slice().reverse() : data\n })\n }, true);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1052 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.conversionTag = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar g2_1 = __webpack_require__(17);\n\nvar utils_1 = __webpack_require__(16);\n\nvar conversion_1 = __webpack_require__(501);\n\nfunction getConversionTagOptionsWithDefaults(options, horizontal) {\n return utils_1.deepAssign({\n size: horizontal ? 32 : 80,\n spacing: horizontal ? 8 : 12,\n offset: horizontal ? 32 : 0,\n arrow: options.arrow !== false && {\n headSize: 12,\n style: {\n fill: 'rgba(0, 0, 0, 0.05)'\n }\n },\n text: options.text !== false && {\n style: {\n fontSize: 12,\n fill: 'rgba(0, 0, 0, 0.85)',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n formatter: conversion_1.conversionTagFormatter\n }\n }, options);\n}\n\nfunction parsePoints(coordinate, element) {\n // @ts-ignore\n return util_1.map(element.getModel().points, function (point) {\n return coordinate.convertPoint(point);\n });\n}\n\nfunction renderArrowTag(config, elemPrev, elemNext) {\n var view = config.view,\n geometry = config.geometry,\n group = config.group,\n options = config.options,\n horizontal = config.horizontal;\n var offset = options.offset,\n size = options.size,\n arrow = options.arrow;\n var coordinate = view.getCoordinate();\n var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n var totalHeight = pointNext.y - pointPrev.y;\n var totalWidth = pointNext.x - pointPrev.x;\n\n if (typeof arrow === 'boolean') {\n return;\n }\n\n var headSize = arrow.headSize;\n var spacing = options.spacing;\n var points;\n\n if (horizontal) {\n if ((totalWidth - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalWidth - headSize) / 2);\n points = [[pointPrev.x + spacing, pointPrev.y - offset], [pointPrev.x + spacing, pointPrev.y - offset - size], [pointNext.x - spacing, pointNext.y - offset - size / 2]];\n } else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [[pointPrev.x + spacing, pointPrev.y - offset], [pointPrev.x + spacing, pointPrev.y - offset - size], [pointNext.x - spacing - headSize, pointNext.y - offset - size], [pointNext.x - spacing, pointNext.y - offset - size / 2], [pointNext.x - spacing - headSize, pointNext.y - offset]];\n }\n } else {\n if ((totalHeight - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalHeight - headSize) / 2);\n points = [[pointPrev.x + offset, pointPrev.y + spacing], [pointPrev.x + offset + size, pointPrev.y + spacing], [pointNext.x + offset + size / 2, pointNext.y - spacing]];\n } else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [[pointPrev.x + offset, pointPrev.y + spacing], [pointPrev.x + offset + size, pointPrev.y + spacing], [pointNext.x + offset + size, pointNext.y - spacing - headSize], [pointNext.x + offset + size / 2, pointNext.y - spacing], [pointNext.x + offset, pointNext.y - spacing - headSize]];\n }\n }\n\n group.addShape('polygon', {\n id: view.id + \"-conversion-tag-arrow-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-arrow',\n attrs: tslib_1.__assign(tslib_1.__assign({}, arrow.style || {}), {\n points: points\n })\n });\n}\n\nfunction renderTextTag(config, elemPrev, elemNext) {\n var _a, _b, _c;\n\n var view = config.view,\n geometry = config.geometry,\n group = config.group,\n options = config.options,\n field = config.field,\n horizontal = config.horizontal;\n var offset = options.offset,\n size = options.size;\n\n if (typeof options.text === 'boolean') {\n return;\n }\n\n var coordinate = view.getCoordinate();\n var text = ((_a = options.text) === null || _a === void 0 ? void 0 : _a.formatter) && ((_b = options.text) === null || _b === void 0 ? void 0 : _b.formatter(elemPrev.getData()[field], elemNext.getData()[field]));\n var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n var textShape = group.addShape('text', {\n id: view.id + \"-conversion-tag-text-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-text',\n attrs: tslib_1.__assign(tslib_1.__assign({}, ((_c = options.text) === null || _c === void 0 ? void 0 : _c.style) || {}), {\n text: text,\n x: horizontal ? (pointPrev.x + pointNext.x) / 2 : pointPrev.x + offset + size / 2,\n y: horizontal ? pointPrev.y - offset - size / 2 : (pointPrev.y + pointNext.y) / 2\n })\n });\n\n if (horizontal) {\n var totalWidth = pointNext.x - pointPrev.x;\n var textWidth = textShape.getBBox().width;\n\n if (textWidth > totalWidth) {\n var cWidth = textWidth / text.length;\n var cEnd = Math.max(1, Math.ceil(totalWidth / cWidth) - 1);\n var textAdjusted = text.slice(0, cEnd) + \"...\";\n textShape.attr('text', textAdjusted);\n }\n }\n}\n\nfunction renderTag(options, elemPrev, elemNext) {\n renderArrowTag(options, elemPrev, elemNext);\n renderTextTag(options, elemPrev, elemNext);\n}\n/**\n * 返回支持转化率组件的 adaptor,适用于柱形图/条形图\n * @param field 用户转化率计算的字段\n * @param horizontal 是否水平方向的转化率\n * @param disabled 是否禁用\n */\n\n\nfunction conversionTag(field, horizontal, disabled) {\n if (horizontal === void 0) {\n horizontal = true;\n }\n\n if (disabled === void 0) {\n disabled = false;\n }\n\n return function (params) {\n var options = params.options,\n chart = params.chart;\n var conversionTag = options.conversionTag,\n theme = options.theme;\n\n if (conversionTag && !disabled) {\n // 有转化率组件时,柱子宽度占比自动为 1/3\n chart.theme(utils_1.deepAssign({}, util_1.isObject(theme) ? theme : g2_1.getTheme(theme), {\n columnWidthRatio: 1 / 3\n })); // 使用 shape annotation 绘制转化率组件\n\n chart.annotation().shape({\n render: function render(container, view) {\n var group = container.addGroup({\n id: chart.id + \"-conversion-tag-group\",\n name: 'conversion-tag-group'\n });\n var interval = util_1.find(chart.geometries, function (geom) {\n return geom.type === 'interval';\n });\n var config = {\n view: view,\n geometry: interval,\n group: group,\n field: field,\n horizontal: horizontal,\n options: getConversionTagOptionsWithDefaults(conversionTag, horizontal)\n };\n var elements = horizontal ? interval.elements : interval.elements.slice().reverse();\n util_1.each(elements, function (elem, idx) {\n if (idx > 0) {\n renderTag(config, elements[idx - 1], elem);\n }\n });\n }\n });\n }\n\n return params;\n };\n}\n\nexports.conversionTag = conversionTag;\n\n/***/ }),\n/* 1053 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.connectedArea = void 0;\n\nvar g2_1 = __webpack_require__(17);\n\nvar INTERACTION_MAP = {\n hover: '__interval-connected-area-hover__',\n click: '__interval-connected-area-click__'\n};\n/** hover 触发的连通区域交互 */\n\ng2_1.registerInteraction(INTERACTION_MAP.hover, {\n start: [{\n trigger: \"interval:mouseenter\",\n action: ['element-highlight-by-color:highlight', 'element-link-by-color:link']\n }],\n end: [{\n trigger: 'interval:mouseleave',\n action: ['element-highlight-by-color:reset', 'element-link-by-color:unlink']\n }]\n});\n/** click 触发的联通区域交互 */\n\ng2_1.registerInteraction(INTERACTION_MAP.click, {\n start: [{\n trigger: \"interval:click\",\n action: ['element-highlight-by-color:clear', 'element-highlight-by-color:highlight', 'element-link-by-color:clear', 'element-link-by-color:unlink', 'element-link-by-color:link']\n }],\n end: [{\n trigger: 'document:mousedown',\n action: ['element-highlight-by-color:clear', 'element-link-by-color:clear']\n }]\n});\n/**\n * 返回支持联通区域组件交互的 adaptor,适用于堆叠柱形图/堆叠条形图\n * @param disable\n */\n\nfunction connectedArea(disable) {\n if (disable === void 0) {\n disable = false;\n }\n\n return function (params) {\n var chart = params.chart,\n options = params.options;\n var connectedArea = options.connectedArea;\n\n var clear = function clear() {\n chart.removeInteraction(INTERACTION_MAP.hover);\n chart.removeInteraction(INTERACTION_MAP.click);\n };\n\n if (!disable && connectedArea) {\n var trigger = connectedArea.trigger || 'hover';\n clear();\n chart.interaction(INTERACTION_MAP[trigger]);\n } else {\n clear();\n }\n\n return params;\n };\n}\n\nexports.connectedArea = connectedArea;\n\n/***/ }),\n/* 1054 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_2 = __webpack_require__(16);\n\nvar percent_1 = __webpack_require__(156);\n\nvar adaptor_1 = __webpack_require__(492);\n/**\n * geometry 处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n areaStyle = options.areaStyle,\n color = options.color,\n pointMapping = options.point,\n lineMapping = options.line,\n isPercent = options.isPercent,\n xField = options.xField,\n yField = options.yField,\n tooltip = options.tooltip,\n seriesField = options.seriesField;\n var chartData = percent_1.getDataWhetherPecentage(data, yField, xField, yField, isPercent);\n chart.data(chartData); // 百分比堆积图,默认会给一个 % 格式化逻辑, 用户可自定义\n\n var tooltipOptions = isPercent ? tslib_1.__assign({\n formatter: function formatter(datum) {\n return {\n name: datum[seriesField] || datum[xField],\n value: (Number(datum[yField]) * 100).toFixed(2) + '%'\n };\n }\n }, tooltip) : tooltip;\n var primary = utils_2.deepAssign({}, params, {\n options: {\n area: {\n color: color,\n style: areaStyle\n },\n // 颜色保持一致,因为如果颜色不一致,会导致 tooltip 中元素重复。\n // 如果存在,才设置,否则为空\n line: lineMapping && tslib_1.__assign({\n color: color\n }, lineMapping),\n point: pointMapping && tslib_1.__assign({\n color: color\n }, pointMapping),\n tooltip: tooltipOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined\n }\n });\n var second = utils_2.deepAssign({}, primary, {\n options: {\n tooltip: false\n }\n }); // area geometry 处理\n\n geometries_1.area(primary);\n geometries_1.line(second);\n geometries_1.point(second);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var areaGeometry = utils_1.findGeometry(chart, 'area'); // label 为 false, 空 则不显示 label\n\n if (!label) {\n areaGeometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n areaGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: tslib_1.__assign({\n layout: [{\n type: 'limit-in-plot'\n }, {\n type: 'path-adjust-position'\n }, {\n type: 'point-adjust-position'\n }, {\n type: 'limit-in-plot',\n cfg: {\n action: 'hide'\n }\n }]\n }, utils_2.transformLabel(cfg))\n });\n }\n\n return params;\n}\n/**\n * 处理 adjust\n * @param params\n */\n\n\nfunction adjust(params) {\n var chart = params.chart,\n options = params.options;\n var isStack = options.isStack,\n isPercent = options.isPercent;\n\n if (isPercent || isStack) {\n util_1.each(chart.geometries, function (g) {\n g.adjust('stack');\n });\n }\n\n return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_2.flow(geometry, adaptor_1.meta, adjust, common_1.theme, adaptor_1.axis, adaptor_1.legend, common_1.tooltip, label, common_1.slider, common_1.annotation(), common_1.interaction, common_1.animation, common_1.limitInPlot)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1055 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.pieAnnotation = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_1 = __webpack_require__(16);\n\nvar contants_1 = __webpack_require__(502);\n\nvar utils_2 = __webpack_require__(503);\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n angleField = options.angleField,\n colorField = options.colorField,\n color = options.color,\n pieStyle = options.pieStyle; // 处理不合法的数据\n\n var processData = utils_2.processIllegalData(data, angleField);\n\n if (utils_2.isAllZero(processData, angleField)) {\n // 数据全 0 处理,调整 position 映射\n var percentageField_1 = '$$percentage$$';\n processData = processData.map(function (d) {\n var _a;\n\n return tslib_1.__assign(tslib_1.__assign({}, d), (_a = {}, _a[percentageField_1] = 1 / processData.length, _a));\n });\n chart.data(processData);\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: '1',\n yField: percentageField_1,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle\n },\n args: {\n zIndexReversed: true\n }\n }\n });\n geometries_1.interval(p); // all zero 额外处理\n\n chart.geometries[0].tooltip(colorField + \"*\" + angleField);\n } else {\n chart.data(processData);\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: '1',\n yField: angleField,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle\n },\n args: {\n zIndexReversed: true\n }\n }\n });\n geometries_1.interval(p);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var meta = options.meta,\n colorField = options.colorField; // meta 直接是 scale 的信息\n\n var scales = utils_1.deepAssign({}, meta);\n chart.scale(scales, (_a = {}, _a[colorField] = {\n type: 'cat'\n }, _a));\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius,\n innerRadius = options.innerRadius,\n startAngle = options.startAngle,\n endAngle = options.endAngle;\n chart.coordinate({\n type: 'theta',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n }\n });\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n colorField = options.colorField,\n angleField = options.angleField;\n var geometry = chart.geometries[0]; // label 为 false, 空 则不显示 label\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n var labelCfg = utils_1.transformLabel(cfg); // ① 提供模板字符串的 label content 配置\n\n if (labelCfg.content) {\n var content_1 = labelCfg.content;\n\n labelCfg.content = function (data, dataum, index) {\n var name = data[colorField];\n var value = data[angleField]; // dymatic get scale, scale is ready this time\n\n var angleScale = chart.getScaleByField(angleField);\n var percent = angleScale === null || angleScale === void 0 ? void 0 : angleScale.scale(value);\n return util_1.isFunction(content_1) ? // append pecent (number) to data, users can get origin data from `dataum._origin`\n content_1(tslib_1.__assign(tslib_1.__assign({}, data), {\n percent: percent\n }), dataum, index) : util_1.isString(content_1) ? utils_1.template(content_1, {\n value: value,\n name: name,\n // percentage (string), default keep 2\n percentage: util_1.isNumber(percent) && !util_1.isNil(value) ? (percent * 100).toFixed(2) + \"%\" : null\n }) : content_1;\n };\n }\n\n var LABEL_LAYOUT_TYPE_MAP = {\n inner: '',\n outer: 'pie-outer',\n spider: 'pie-spider'\n };\n var labelLayoutType = labelCfg.type ? LABEL_LAYOUT_TYPE_MAP[labelCfg.type] : 'pie-outer';\n var labelLayoutCfg = labelCfg.layout ? !util_1.isArray(labelCfg.layout) ? [labelCfg.layout] : labelCfg.layout : [];\n labelCfg.layout = (labelLayoutType ? [{\n type: labelLayoutType\n }] : []).concat(labelLayoutCfg);\n geometry.label({\n // fix: could not create scale, when field is undefined(attributes 中的 fields 定义都会被用来创建 scale)\n fields: colorField ? [angleField, colorField] : [angleField],\n callback: callback,\n cfg: tslib_1.__assign(tslib_1.__assign({}, labelCfg), {\n offset: utils_2.adaptOffset(labelCfg.type, labelCfg.offset),\n type: 'pie'\n })\n });\n }\n\n return params;\n}\n/**\n * statistic 中心文本配置\n * @param params\n */\n\n\nfunction pieAnnotation(params) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n statistic = options.statistic,\n angleField = options.angleField,\n colorField = options.colorField,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true); // 先进行其他 annotations,再去渲染统计文本\n\n utils_1.flow(common_1.annotation())(params);\n /** 中心文本 指标卡 */\n\n if (innerRadius && statistic) {\n var _a = utils_1.deepAssign({}, contants_1.DEFAULT_OPTIONS.statistic, statistic),\n title = _a.title,\n content = _a.content;\n\n if (title !== false) {\n title = utils_1.deepAssign({}, {\n formatter: function formatter(datum) {\n return datum ? datum[colorField] : '总计';\n }\n }, title);\n }\n\n if (content !== false) {\n content = utils_1.deepAssign({}, {\n formatter: function formatter(datum, data) {\n var metaFormatter = util_1.get(meta, [angleField, 'formatter']);\n var dataValue = datum ? datum[angleField] : utils_2.getTotalValue(data, angleField);\n return metaFormatter ? metaFormatter(dataValue) : dataValue;\n }\n }, content);\n }\n\n utils_1.renderStatistic(chart, {\n statistic: {\n title: title,\n content: content\n },\n plotType: 'pie'\n });\n }\n\n return params;\n}\n\nexports.pieAnnotation = pieAnnotation;\n/**\n * 饼图 tooltip 配置适配,强制 tooltip.shared 为 false\n * @param params\n */\n\nfunction adaptorTooltipOptions(params) {\n return util_1.get(params, ['options', 'tooltip']) !== false ? utils_1.deepAssign({}, params, {\n options: {\n tooltip: {\n shared: false\n }\n }\n }) : params;\n}\n/**\n * 饼图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_1.flow(geometry, meta, common_1.theme, coordinate, common_1.legend, function (args) {\n return common_1.tooltip(adaptorTooltipOptions(args));\n }, label, common_1.state,\n /** 指标卡中心文本 放在下层 */\n pieAnnotation, common_1.interaction, common_1.animation)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1056 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar g2_1 = __webpack_require__(17);\n\nvar pie_legend_action_1 = __webpack_require__(1057);\n\nvar pie_statistic_action_1 = __webpack_require__(1058);\n\ng2_1.registerAction('pie-statistic', pie_statistic_action_1.StatisticAction);\ng2_1.registerInteraction('pie-statistic-active', {\n start: [{\n trigger: 'element:mouseenter',\n action: 'pie-statistic:change'\n }],\n end: [{\n trigger: 'element:mouseleave',\n action: 'pie-statistic:reset'\n }]\n});\ng2_1.registerAction('pie-legend', pie_legend_action_1.PieLegendAction);\ng2_1.registerInteraction('pie-legend-active', {\n start: [{\n trigger: 'legend-item:mouseenter',\n action: 'pie-legend:active'\n }],\n end: [{\n trigger: 'legend-item:mouseleave',\n action: 'pie-legend:reset'\n }]\n});\n\n/***/ }),\n/* 1057 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PieLegendAction = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar matrix_1 = __webpack_require__(504);\n/**\n * 饼图 图例激活 action\n */\n\n\nvar PieLegendAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(PieLegendAction, _super);\n\n function PieLegendAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 获取激活的图形元素\n */\n\n\n PieLegendAction.prototype.getActiveElements = function () {\n var delegateObject = g2_1.Util.getDelegationObject(this.context);\n\n if (delegateObject) {\n var view = this.context.view;\n var component = delegateObject.component,\n item_1 = delegateObject.item;\n var field_1 = component.get('field');\n\n if (field_1) {\n var elements = view.geometries[0].elements;\n return elements.filter(function (ele) {\n return ele.getModel().data[field_1] === item_1.value;\n });\n }\n }\n\n return [];\n };\n /**\n * 获取激活的标签\n */\n\n\n PieLegendAction.prototype.getActiveElementLabels = function () {\n var view = this.context.view;\n var elements = this.getActiveElements();\n var labels = view.geometries[0].labelsContainer.getChildren();\n return labels.filter(function (label) {\n return elements.find(function (ele) {\n return util_1.isEqual(ele.getData(), label.get('data'));\n });\n });\n };\n\n PieLegendAction.prototype.transfrom = function (offset) {\n if (offset === void 0) {\n offset = 7.5;\n }\n\n var elements = this.getActiveElements();\n var elementLabels = this.getActiveElementLabels();\n elements.forEach(function (element, idx) {\n var labelShape = elementLabels[idx];\n var coordinate = element.geometry.coordinate;\n\n if (coordinate.isPolar && coordinate.isTransposed) {\n var _a = g2_1.Util.getAngle(element.getModel(), coordinate),\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var middleAngle = (startAngle + endAngle) / 2;\n var r = offset;\n var x = r * Math.cos(middleAngle);\n var y = r * Math.sin(middleAngle);\n element.shape.setMatrix(matrix_1.transform([['t', x, y]]));\n labelShape.setMatrix(matrix_1.transform([['t', x, y]]));\n }\n });\n };\n\n PieLegendAction.prototype.active = function () {\n this.transfrom();\n };\n /**\n * 激活态还原\n */\n\n\n PieLegendAction.prototype.reset = function () {\n this.transfrom(0);\n };\n\n return PieLegendAction;\n}(g2_1.Action);\n\nexports.PieLegendAction = PieLegendAction;\n\n/***/ }),\n/* 1058 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.StatisticAction = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar statistic_1 = __webpack_require__(488);\n/**\n * Pie 中心文本事件的 Action\n */\n\n\nvar StatisticAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(StatisticAction, _super);\n\n function StatisticAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n StatisticAction.prototype.getAnnotations = function (_view) {\n var view = _view || this.context.view; // @ts-ignore\n\n return view.getController('annotation').option;\n };\n\n StatisticAction.prototype.getInitialAnnotation = function () {\n return this.initialAnnotation;\n };\n\n StatisticAction.prototype.init = function () {\n var _this = this;\n\n var view = this.context.view;\n view.removeInteraction('tooltip');\n view.on('afterchangesize', function () {\n var annotations = _this.getAnnotations(view);\n\n _this.initialAnnotation = annotations;\n });\n };\n\n StatisticAction.prototype.change = function () {\n var _a = this.context,\n view = _a.view,\n event = _a.event;\n var annotations = this.getAnnotations();\n\n if (!this.initialAnnotation) {\n this.initialAnnotation = annotations;\n }\n\n var data = ((event === null || event === void 0 ? void 0 : event.data) || {}).data;\n\n if (event.type.match('legend-item')) {\n var delegateObject = g2_1.Util.getDelegationObject(this.context); // @ts-ignore\n\n var colorField_1 = view.getGroupedFields()[0];\n\n if (delegateObject && colorField_1) {\n var item_1 = delegateObject.item;\n data = view.getData().find(function (d) {\n return d[colorField_1] === item_1.value;\n });\n }\n }\n\n if (data) {\n var annotationController_1 = view.getController('annotation');\n annotationController_1.clear(true); // @ts-ignore\n\n var _b = view.getScaleFields(),\n angleField_1 = _b[1],\n colorField_2 = _b[2];\n\n var angleScale_1 = view.getScaleByField(angleField_1);\n var colorScale_1 = view.getScaleByField(colorField_2);\n var annotationOptions_1 = annotations.filter(function (a) {\n return !util_1.get(a, 'key', '').match('statistic');\n });\n var statisticOptions = annotations.filter(function (a) {\n return util_1.get(a, 'key', '').match('statistic');\n });\n var titleOpt_1 = statisticOptions.filter(function (opt) {\n return opt.key === 'top-statistic';\n });\n var contentOpt_1 = statisticOptions.filter(function (opt) {\n return opt.key === 'bottom-statistic';\n });\n util_1.each(statisticOptions, function (option) {\n var text;\n var transform;\n\n if (option.key === 'top-statistic') {\n text = colorScale_1 ? colorScale_1.getText(data[colorField_2]) : null;\n transform = contentOpt_1 ? 'translate(-50%, -100%)' : 'translate(-50%, -50%)';\n } else {\n text = angleScale_1 ? angleScale_1.getText(data[angleField_1]) : data[angleField_1];\n transform = titleOpt_1 ? 'translate(-50%, 0)' : 'translate(-50%,-50%)';\n }\n\n annotationOptions_1.push(tslib_1.__assign(tslib_1.__assign({}, option), {\n html: function html(container, view) {\n var coordinate = view.getCoordinate();\n var containerWidth = coordinate.getRadius() * coordinate.innerRadius * 2;\n var style = util_1.isFunction(option.style) ? option.style() : option.style;\n statistic_1.setStatisticContainerStyle(container, tslib_1.__assign({\n width: containerWidth + \"px\",\n transform: transform\n }, statistic_1.adapteStyle(style)));\n var filteredData = view.getData();\n\n if (option.customHtml) {\n return option.customHtml(container, view, data, filteredData);\n }\n\n if (option.formatter) {\n text = option.formatter(data, filteredData);\n } // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容,比如数值 number\n\n\n return text ? util_1.isString(text) ? text : \"\" + text : '';\n }\n }));\n annotationOptions_1.forEach(function (opt) {\n // @ts-ignore\n annotationController_1.annotation(opt);\n });\n view.render(true);\n });\n }\n };\n\n StatisticAction.prototype.reset = function () {\n var view = this.context.view;\n var annotationController = view.getController('annotation');\n annotationController.clear(true);\n var initialStatistic = this.getInitialAnnotation();\n util_1.each(initialStatistic, function (a) {\n view.annotation()[a.type](a);\n });\n view.render(true);\n };\n\n return StatisticAction;\n}(g2_1.Action);\n\nexports.StatisticAction = StatisticAction;\n\n/***/ }),\n/* 1059 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar utils_2 = __webpack_require__(16);\n\nvar constant_1 = __webpack_require__(292);\n\nvar common_1 = __webpack_require__(34);\n/**\n * 数据字段映射\n * @param params\n */\n\n\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n type = options.type,\n reflect = options.reflect,\n xField = options.xField,\n yField = options.yField,\n colorField = options.colorField,\n sizeField = options.sizeField,\n sizeRatio = options.sizeRatio,\n shape = options.shape,\n color = options.color;\n chart.data(data);\n var geometry;\n\n if (type === 'density') {\n geometry = chart.heatmap().position(xField + \"*\" + yField);\n } else {\n geometry = chart.polygon().position(xField + \"*\" + yField);\n }\n\n if (colorField) {\n geometry.color(colorField, color || constant_1.DEFAULT_COLORS.GRADIENT.CONTINUOUS);\n }\n\n if (reflect) {\n chart.coordinate().reflect(reflect);\n }\n /**\n * The ratio between the actual size and the max available size, must be in range `[0,1]`.\n *\n * If the `sizeRatio` attribute is undefined or it exceeds the range,\n * `checkedSizeRatio` would be set to 1 as default.\n */\n\n\n var checkedSizeRatio = 1;\n\n if (sizeRatio || sizeRatio === 0) {\n if (!shape && !sizeField) {\n console.warn('sizeRatio is not in effect: Must define shape or sizeField first');\n } else if (sizeRatio < 0 || sizeRatio > 1) {\n console.warn('sizeRatio is not in effect: It must be a number in [0,1]');\n } else {\n checkedSizeRatio = sizeRatio;\n }\n } // when it has to change shape from original rect\n\n\n if (shape) {\n // just to change shape in cell\n if (!sizeField) {\n geometry.shape('', function () {\n return [shape, 1, checkedSizeRatio];\n });\n } // specific shape in different size\n\n\n if (sizeField) {\n var field_1 = data.map(function (row) {\n return row[sizeField];\n });\n var min_1 = Math.min.apply(Math, field_1);\n var max_1 = Math.max.apply(Math, field_1);\n geometry.shape(sizeField, function (v) {\n return [shape, (v - min_1) / (max_1 - min_1), checkedSizeRatio];\n });\n }\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return utils_2.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(yField, false);\n } else {\n chart.axis(yField, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n colorField = options.colorField;\n\n if (legend) {\n chart.legend(colorField, legend);\n } else {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * 样式\n * @param params\n */\n\n\nfunction style(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n colorField = options.colorField,\n sizeField = options.sizeField,\n heatmapStyle = options.heatmapStyle;\n var geometry = chart.geometries[0];\n\n if (heatmapStyle && geometry) {\n if (util_1.isFunction(heatmapStyle)) {\n geometry.style(xField + \"*\" + yField + \"*\" + colorField + \"*\" + sizeField, heatmapStyle);\n } else if (util_1.isObject(heatmapStyle)) {\n geometry.style(heatmapStyle);\n }\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n colorField = options.colorField,\n type = options.type;\n var geometry = utils_1.findGeometry(chart, type === 'density' ? 'heatmap' : 'polygon');\n\n if (!label) {\n geometry.label(false);\n } else if (colorField) {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n geometry.label({\n fields: [colorField],\n callback: callback,\n cfg: utils_2.transformLabel(cfg)\n });\n }\n\n return params;\n}\n/**\n * 热力图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_2.flow(field, meta, common_1.theme, axis, legend, common_1.tooltip, style, label, common_1.annotation(), common_1.interaction, common_1.animation)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1060 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\ng2_1.registerShape('polygon', 'circle', {\n draw: function draw(cfg, group) {\n var _a, _b;\n\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxRadius = Math.min(width, height) / 2;\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var radiusRatio = Math.sqrt(sizeRatio);\n var radius = maxRadius * radiusRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('circle', {\n attrs: tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({\n x: cx,\n y: cy,\n r: radius\n }, cfg.defaultStyle), cfg.style), {\n fill: fill\n })\n });\n return polygon;\n }\n});\n\n/***/ }),\n/* 1061 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\ng2_1.registerShape('polygon', 'square', {\n draw: function draw(cfg, group) {\n var _a, _b;\n\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxSideLength = Math.min(width, height);\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var lenRatio = Math.sqrt(sizeRatio);\n var sideLength = maxSideLength * lenRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('rect', {\n attrs: tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({\n x: cx - sideLength / 2,\n y: cy - sideLength / 2,\n width: sideLength,\n height: sideLength\n }, cfg.defaultStyle), cfg.style), {\n fill: fill\n })\n });\n return polygon;\n }\n});\n\n/***/ }),\n/* 1062 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_2 = __webpack_require__(505);\n/**\n * geometry 配置处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var colorField = options.colorField,\n color = options.color;\n var data = utils_2.transform(params);\n chart.data(data);\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField && 'color',\n point: {\n color: color,\n shape: 'word-cloud'\n }\n }\n });\n var ext = geometries_1.point(p).ext;\n ext.geometry.label(false);\n chart.coordinate().reflect('y');\n chart.axis(false);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n return utils_1.flow(common_1.scale({\n x: {\n nice: false\n },\n y: {\n nice: false\n }\n }))(params);\n}\n/**\n * 词云图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n utils_1.flow(geometry, meta, common_1.tooltip, common_1.legend, common_1.interaction, common_1.animation, common_1.theme, common_1.state)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1063 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.functor = exports.transform = exports.wordCloud = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar DEFAULT_OPTIONS = {\n font: function font() {\n return 'serif';\n },\n padding: 1,\n size: [500, 500],\n spiral: 'archimedean',\n // timeInterval: Infinity // max execute time\n timeInterval: 3000\n};\n/**\n * 根据对应的数据对象,计算每个\n * 词语在画布中的渲染位置,并返回\n * 计算后的数据对象\n * @param words\n * @param options\n */\n\nfunction wordCloud(words, options) {\n // 混入默认配置\n options = util_1.assign({}, DEFAULT_OPTIONS, options);\n return transform(words, options);\n}\n\nexports.wordCloud = wordCloud;\n/**\n * 抛出没有混入默认配置的方法,用于测试。\n * @param words\n * @param options\n */\n\nfunction transform(words, options) {\n // 布局对象\n var layout = tagCloud();\n ['font', 'fontSize', 'fontWeight', 'padding', 'rotate', 'size', 'spiral', 'timeInterval', 'random'].forEach(function (key) {\n if (!util_1.isNil(options[key])) {\n layout[key](options[key]);\n }\n });\n layout.words(words);\n\n if (options.imageMask) {\n layout.createMask(options.imageMask);\n }\n\n var result = layout.start();\n var tags = result._tags;\n tags.forEach(function (tag) {\n tag.x += options.size[0] / 2;\n tag.y += options.size[1] / 2;\n });\n var _a = options.size,\n w = _a[0],\n h = _a[1]; // 添加两个参照数据,分别表示左上角和右下角。\n // 不添加的话不会按照真实的坐标渲染,而是以\n // 数据中的边界坐标为边界进行拉伸,以铺满画布。\n // 这样的后果会导致词语之间的重叠。\n\n tags.push({\n text: '',\n value: 0,\n x: 0,\n y: 0,\n opacity: 0\n });\n tags.push({\n text: '',\n value: 0,\n x: w,\n y: h,\n opacity: 0\n });\n return tags;\n}\n\nexports.transform = transform;\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\n\nfunction cloudText(d) {\n return d.text;\n}\n\nfunction cloudFont() {\n return 'serif';\n}\n\nfunction cloudFontNormal() {\n return 'normal';\n}\n\nfunction cloudFontSize(d) {\n return d.value;\n}\n\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\n\nfunction cloudPadding() {\n return 1;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0;\n var n = data.length;\n --di;\n\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n var w = c.measureText(d.text + 'm').width * ratio,\n h = d.size << 1;\n\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n\n if (h > maxh) maxh = h;\n\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n var w = d.width,\n w32 = w >> 5;\n var h = d.y1 - d.y0; // Zero the buffer\n\n for (var i = 0; i < h * w32; i++) {\n sprite[i] = 0;\n }\n\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n\n for (var j = 0; j < h; j++) {\n for (var i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0;\n var x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n\n x += sw;\n }\n\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1];\n var x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n\n case 1:\n y += dy;\n break;\n\n case 2:\n x -= dx;\n break;\n\n default:\n y -= dy;\n break;\n }\n\n return [x, y];\n };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n var a = [];\n var i = -1;\n\n while (++i < n) {\n a[i] = 0;\n }\n\n return a;\n}\n\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\n\nfunction functor(d) {\n return util_1.isFunction(d) ? d : function () {\n return d;\n };\n}\n\nexports.functor = functor;\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nfunction tagCloud() {\n var size = [256, 256],\n font = cloudFont,\n fontSize = cloudFontSize,\n fontWeight = cloudFontNormal,\n rotate = cloudRotate,\n padding = cloudPadding,\n spiral = archimedeanSpiral,\n random = Math.random,\n words = [],\n timeInterval = Infinity;\n var text = cloudText;\n var fontStyle = cloudFontNormal;\n var canvas = cloudCanvas;\n var cloud = {};\n\n cloud.start = function () {\n var width = size[0],\n height = size[1];\n var contextAndRatio = getContext(canvas()),\n board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]),\n n = words.length,\n tags = [],\n data = words.map(function (d, i, data) {\n d.text = text.call(this, d, i, data);\n d.font = font.call(this, d, i, data);\n d.style = fontStyle.call(this, d, i, data);\n d.weight = fontWeight.call(this, d, i, data);\n d.rotate = rotate.call(this, d, i, data);\n d.size = ~~fontSize.call(this, d, i, data);\n d.padding = padding.call(this, d, i, data);\n return d;\n }).sort(function (a, b) {\n return b.size - a.size;\n });\n var i = -1,\n bounds = !cloud.board ? null : [{\n x: 0,\n y: 0\n }, {\n x: width,\n y: height\n }];\n step();\n\n function step() {\n var start = Date.now();\n\n while (Date.now() - start < timeInterval && ++i < n) {\n var d = data[i];\n d.x = width * (random() + 0.5) >> 1;\n d.y = height * (random() + 0.5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n } else {\n bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n } // Temporary hack\n\n\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n cloud._tags = tags;\n cloud._bounds = bounds;\n }\n\n return cloud;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < 0.5 ? 1 : -1;\n var dxdy,\n t = -dt,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0;\n var last = void 0,\n x = (tag.y + tag.y0) * sw + (lx >> 5);\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n\n x += sw;\n }\n\n delete tag.sprite;\n return true;\n }\n }\n }\n\n return false;\n }\n\n cloud.createMask = function (img) {\n var can = document.createElement('canvas');\n var width = size[0],\n height = size[1]; // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错\n\n if (!width || !height) {\n return;\n }\n\n var w32 = width >> 5;\n var board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n var cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n var imageData = cxt.getImageData(0, 0, width, height).data;\n\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++) {\n var k = w32 * j + (i >> 5);\n var tmp = j * width + i << 2;\n var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250;\n var m = flag ? 1 << 31 - i % 32 : 0;\n board[k] |= m;\n }\n }\n\n cloud.board = board;\n cloud.hasImage = true;\n };\n\n cloud.timeInterval = function (_) {\n timeInterval = _ == null ? Infinity : _;\n };\n\n cloud.words = function (_) {\n words = _;\n };\n\n cloud.size = function (_) {\n size = [+_[0], +_[1]];\n };\n\n cloud.font = function (_) {\n font = functor(_);\n };\n\n cloud.fontWeight = function (_) {\n fontWeight = functor(_);\n };\n\n cloud.rotate = function (_) {\n rotate = functor(_);\n };\n\n cloud.spiral = function (_) {\n spiral = spirals[_] || _;\n };\n\n cloud.fontSize = function (_) {\n fontSize = functor(_);\n };\n\n cloud.padding = function (_) {\n padding = functor(_);\n };\n\n cloud.random = function (_) {\n random = functor(_);\n };\n\n return cloud;\n}\n\n/***/ }),\n/* 1064 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\ng2_1.registerShape('point', 'word-cloud', {\n draw: function draw(cfg, group) {\n var cx = cfg.x;\n var cy = cfg.y;\n var shape = group.addShape('text', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, getTextAttrs(cfg)), {\n x: cx,\n y: cy\n })\n });\n var rotate = cfg.data.rotate;\n\n if (typeof rotate === 'number') {\n g2_1.Util.rotate(shape, rotate * Math.PI / 180);\n }\n\n return shape;\n }\n});\n\nfunction getTextAttrs(cfg) {\n return {\n fontSize: cfg.data.size,\n text: cfg.data.text,\n textAlign: 'center',\n fontFamily: cfg.data.font,\n fontWeight: cfg.data.weight,\n fill: cfg.color || cfg.defaultStyle.stroke,\n textBaseline: 'alphabetic'\n };\n}\n\n/***/ }),\n/* 1065 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.legend = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar common_1 = __webpack_require__(34);\n\nvar geometries_1 = __webpack_require__(48);\n/**\n * geometry 配置处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n sectorStyle = options.sectorStyle,\n color = options.color; // 装载数据\n\n chart.data(data);\n utils_1.flow(geometries_1.interval)(utils_1.deepAssign({}, params, {\n options: {\n marginRatio: 1,\n interval: {\n style: sectorStyle,\n color: color\n }\n }\n }));\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n xField = options.xField;\n var geometry = utils_1.findGeometry(chart, 'interval'); // label 为 false 不显示 label\n\n if (label === false) {\n geometry.label(false);\n } else if (util_1.isObject(label)) {\n var callback = label.callback,\n fields = label.fields,\n cfg = tslib_1.__rest(label, [\"callback\", \"fields\"]);\n\n var offset = cfg.offset;\n var layout = cfg.layout; // 当 label 在 shape 外部显示时,设置 'limit-in-shape' 会\n // 造成 label 不显示。\n\n if (offset === undefined || offset >= 0) {\n layout = layout ? util_1.isArray(layout) ? layout : [layout] : [];\n cfg.layout = util_1.filter(layout, function (v) {\n return v.type !== 'limit-in-shape';\n });\n cfg.layout.length || delete cfg.layout;\n }\n\n geometry.label({\n fields: fields || [xField],\n callback: callback,\n cfg: utils_1.transformLabel(cfg)\n });\n } else {\n utils_1.log(utils_1.LEVEL.WARN, label === null, 'the label option must be an Object.');\n geometry.label({\n fields: [xField]\n });\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n seriesField = options.seriesField;\n\n if (legend === false) {\n chart.legend(false);\n } else if (seriesField) {\n chart.legend(seriesField, legend);\n }\n\n return params;\n}\n\nexports.legend = legend;\n/**\n * coord 配置\n * @param params\n */\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius,\n innerRadius = options.innerRadius;\n chart.coordinate({\n type: 'polar',\n cfg: {\n radius: radius,\n innerRadius: innerRadius\n }\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 falsy 则是不显示轴\n\n if (!xAxis) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (!yAxis) {\n chart.axis(yField, false);\n } else {\n chart.axis(yField, yAxis);\n }\n\n return params;\n}\n/**\n * 玫瑰图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n utils_1.flow(geometry, meta, label, coordinate, axis, legend, common_1.tooltip, common_1.interaction, common_1.animation, common_1.theme, common_1.annotation(), common_1.state)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1066 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.meta = void 0;\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar conversion_1 = __webpack_require__(501);\n\nvar basic_1 = __webpack_require__(506);\n\nvar compare_1 = __webpack_require__(1067);\n\nvar facet_1 = __webpack_require__(1068);\n\nvar dynamic_height_1 = __webpack_require__(1069);\n\nvar constant_1 = __webpack_require__(119);\n/**\n *\n * 各式漏斗图geometry实现细节有较大不同,\n * 1. 普通漏斗图:interval.shape('funnel')\n * 2. 对比漏斗图:分面\n * 3. 动态高度漏斗图:polypon\n * 4. 分面漏斗图:普通 + list 分面\n* /\n\n/**\n * options 处理\n * @param params\n */\n\n\nfunction defaultOptions(params) {\n var _a;\n\n var options = params.options;\n var compareField = options.compareField,\n xField = options.xField,\n yField = options.yField;\n var defaultOption = {\n minSize: 0,\n maxSize: 1,\n meta: (_a = {}, _a[constant_1.FUNNEL_MAPPING_VALUE] = {\n min: 0,\n max: 1,\n nice: false\n }, _a),\n label: compareField ? {\n fields: [xField, yField, compareField, constant_1.FUNNEL_PERCENT, constant_1.FUNNEL_CONVERSATION],\n style: {\n fill: '#fff',\n fontSize: 12\n },\n formatter: function formatter(datum) {\n return \"\" + datum[yField];\n }\n } : {\n fields: [xField, yField, constant_1.FUNNEL_PERCENT, constant_1.FUNNEL_CONVERSATION],\n offset: 0,\n position: 'middle',\n style: {\n fill: '#fff',\n fontSize: 12\n },\n formatter: function formatter(datum) {\n return datum[xField] + \" \" + datum[yField];\n }\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n shared: false,\n title: xField,\n formatter: function formatter(datum) {\n return {\n name: datum[xField],\n value: datum[yField]\n };\n }\n },\n conversionTag: {\n offsetX: 10,\n offsetY: 0,\n style: {},\n // conversionTag 的计算和显示逻辑统一保持一致\n formatter: function formatter(datum) {\n return \"\\u8F6C\\u5316\\u7387: \" + conversion_1.conversionTagFormatter.apply(void 0, datum[constant_1.FUNNEL_CONVERSATION]);\n }\n }\n };\n return utils_1.deepAssign({\n options: defaultOption\n }, params);\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var options = params.options;\n var compareField = options.compareField,\n dynamicHeight = options.dynamicHeight,\n seriesField = options.seriesField;\n\n if (seriesField) {\n return facet_1.facetFunnel(params);\n }\n\n if (compareField) {\n return compare_1.compareFunnel(params);\n }\n\n if (dynamicHeight) {\n return dynamic_height_1.dynamicHeightFunnel(params);\n }\n\n return basic_1.basicFunnel(params);\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n\nexports.meta = meta;\n/**\n * 坐标轴\n * @param params\n */\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend;\n\n if (legend === false) {\n chart.legend(false);\n } else {\n chart.legend(legend); // TODO FIX: legend-click 时间和转化率组件之间的关联\n }\n\n return params;\n}\n/**\n * 漏斗图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return utils_1.flow(defaultOptions, geometry, meta, axis, common_1.tooltip, common_1.interaction, legend, common_1.animation, common_1.theme, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1067 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.compareFunnel = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar base_1 = __webpack_require__(89);\n\nvar constant_1 = __webpack_require__(119);\n\nvar common_1 = __webpack_require__(298);\n/**\n * 处理字段数据\n * @param params\n */\n\n\nfunction field(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var _b = options.data,\n data = _b === void 0 ? [] : _b,\n yField = options.yField; // 绘制漏斗图\n\n chart.data(data);\n chart.scale((_a = {}, _a[yField] = {\n sync: true\n }, _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xField = options.xField,\n yField = options.yField,\n color = options.color,\n compareField = options.compareField,\n isTransposed = options.isTransposed,\n tooltip = options.tooltip,\n maxSize = options.maxSize,\n minSize = options.minSize,\n label = options.label;\n chart.facet('mirror', {\n fields: [compareField],\n // 漏斗图的转置规则与分面相反,默认是垂直布局\n transpose: !isTransposed,\n padding: isTransposed ? 0 : [32, 0, 0, 0],\n eachView: function eachView(view, facet) {\n var index = isTransposed ? facet.rowIndex : facet.columnIndex;\n\n if (!isTransposed) {\n view.coordinate({\n type: 'rect',\n actions: [['transpose'], ['scale', index === 0 ? -1 : 1, -1]]\n });\n }\n\n var formatterData = common_1.transformData(facet.data, data, {\n yField: yField,\n maxSize: maxSize,\n minSize: minSize\n });\n view.data(formatterData); // 绘制图形\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField, compareField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n var defaultFacetLabel = isTransposed ? {\n offset: index === 0 ? 10 : -23,\n position: index === 0 ? 'bottom' : 'top'\n } : {\n offset: 10,\n position: 'left',\n style: {\n textAlign: index === 0 ? 'end' : 'start'\n }\n };\n base_1.geometry({\n chart: view,\n options: {\n type: 'interval',\n xField: xField,\n yField: constant_1.FUNNEL_MAPPING_VALUE,\n colorField: xField,\n tooltipFields: util_1.isArray(fields) && fields.concat([constant_1.FUNNEL_PERCENT, constant_1.FUNNEL_CONVERSATION]),\n mapping: {\n shape: 'funnel',\n tooltip: formatter,\n color: color,\n style: {\n lineWidth: 1,\n stroke: '#fff'\n }\n },\n label: label === false ? false : utils_1.deepAssign({}, defaultFacetLabel, label)\n }\n });\n }\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\n\n\nfunction conversionTag(params) {\n var chart = params.chart,\n options = params.options;\n var conversionTag = options.conversionTag,\n isTransposed = options.isTransposed;\n chart.once('beforepaint', function () {\n chart.views.forEach(function (view, viewIndex) {\n var getLineCoordinate = function getLineCoordinate(datum, datumIndex, data, initLineOption) {\n var ratio = viewIndex === 0 ? -1 : 1;\n return utils_1.deepAssign({}, initLineOption, {\n start: [datumIndex - 0.5, datum[constant_1.FUNNEL_MAPPING_VALUE]],\n end: [datumIndex - 0.5, datum[constant_1.FUNNEL_MAPPING_VALUE] + 0.05],\n text: isTransposed ? {\n style: {\n textAlign: 'start'\n }\n } : {\n offsetX: conversionTag !== false ? ratio * conversionTag.offsetX : 0,\n style: {\n textAlign: viewIndex === 0 ? 'end' : 'start'\n }\n }\n });\n };\n\n common_1.conversionTagComponent(getLineCoordinate)(utils_1.deepAssign({}, {\n chart: view,\n options: options\n }));\n });\n });\n return params;\n}\n/**\n * 对比漏斗\n * @param chart\n * @param options\n */\n\n\nfunction compareFunnel(params) {\n return utils_1.flow(field, geometry, conversionTag)(params);\n}\n\nexports.compareFunnel = compareFunnel;\n\n/***/ }),\n/* 1068 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.facetFunnel = void 0;\n\nvar utils_1 = __webpack_require__(16);\n\nvar basic_1 = __webpack_require__(506);\n/**\n * 处理字段数据\n * @param params\n */\n\n\nfunction field(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var _b = options.data,\n data = _b === void 0 ? [] : _b,\n yField = options.yField; // 绘制漏斗图\n\n chart.data(data);\n chart.scale((_a = {}, _a[yField] = {\n sync: true\n }, _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var seriesField = options.seriesField,\n isTransposed = options.isTransposed;\n chart.facet('rect', {\n fields: [seriesField],\n padding: [isTransposed ? 0 : 32, 10, 0, 10],\n eachView: function eachView(view, facet) {\n basic_1.basicFunnel(utils_1.deepAssign({}, params, {\n chart: view,\n options: {\n data: facet.data\n }\n }));\n }\n });\n return params;\n}\n/**\n * 分面漏斗\n * @param chart\n * @param options\n */\n\n\nfunction facetFunnel(params) {\n return utils_1.flow(field, geometry)(params);\n}\n\nexports.facetFunnel = facetFunnel;\n\n/***/ }),\n/* 1069 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dynamicHeightFunnel = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar constant_1 = __webpack_require__(119);\n\nvar base_1 = __webpack_require__(89);\n\nvar tooltip_1 = __webpack_require__(88);\n\nvar common_1 = __webpack_require__(298);\n/**\n * 动态高度漏斗图\n * @param params\n * 需求: 每个漏斗项的高度根据 yfield 等比生成。漏斗上下宽度比为2,即斜率为 2。\n * 实现方式: 使用 g2 多边形,data -> 点坐标 -> 绘制\n * 以漏斗底部中心点为坐标轴原点,漏斗在 -0.5 <= x <= 0.5, 0 <= y <= 1 的正方形中绘制\n * 先计算第一象限的点, 第二象限的点即为镜像 x 轴取反。\n * 第一象限共需计算 data.length + 1 个点,在 y = 4x - 1 上。首尾分别是[0.5, 1], [0.25, 0]。根据 data 计算出 y 值,从而得到 y 值\n */\n\n/**\n * 处理数据\n * @param params\n */\n\n\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var _a = options.data,\n data = _a === void 0 ? [] : _a,\n yField = options.yField; // 计算各数据项所占高度\n\n var sum = util_1.reduce(data, function (total, item) {\n return total + (item[yField] || 0);\n }, 0);\n var max = util_1.maxBy(data, yField)[yField];\n var formatData = util_1.map(data, function (row, index) {\n // 储存四个点 x,y 坐标,方向为顺时针,即 [左上, 右上,右下,左下]\n var x = [];\n var y = [];\n row[constant_1.FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum; // 获取左上角,右上角坐标\n\n if (index) {\n var preItemX = data[index - 1][constant_1.PLOYGON_X];\n var preItemY = data[index - 1][constant_1.PLOYGON_Y];\n x[0] = preItemX[3];\n y[0] = preItemY[3];\n x[1] = preItemX[2];\n y[1] = preItemY[2];\n } else {\n x[0] = -0.5;\n y[0] = 1;\n x[1] = 0.5;\n y[1] = 1;\n } // 获取右下角坐标\n\n\n y[2] = y[1] - row[constant_1.FUNNEL_TOTAL_PERCENT];\n x[2] = (y[2] + 1) / 4;\n y[3] = y[2];\n x[3] = -x[2]; // 赋值\n\n row[constant_1.PLOYGON_X] = x;\n row[constant_1.PLOYGON_Y] = y;\n row[constant_1.FUNNEL_PERCENT] = (row[yField] || 0) / max;\n row[constant_1.FUNNEL_CONVERSATION] = [util_1.get(data, [index - 1, yField]), row[yField]];\n return row;\n });\n chart.data(formatData);\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n color = options.color,\n tooltip = options.tooltip,\n label = options.label;\n\n var _a = tooltip_1.getTooltipMapping(tooltip, [xField, yField]),\n fields = _a.fields,\n formatter = _a.formatter; // 绘制漏斗图\n\n\n base_1.geometry({\n chart: chart,\n options: {\n type: 'polygon',\n xField: constant_1.PLOYGON_X,\n yField: constant_1.PLOYGON_Y,\n colorField: xField,\n tooltipFields: util_1.isArray(fields) && fields.concat([constant_1.FUNNEL_PERCENT, constant_1.FUNNEL_CONVERSATION]),\n label: label,\n mapping: {\n tooltip: formatter,\n color: color\n }\n }\n });\n return params;\n}\n/**\n * 转置处理\n * @param params\n */\n\n\nfunction transpose(params) {\n var chart = params.chart,\n options = params.options;\n var isTransposed = options.isTransposed;\n chart.coordinate({\n type: 'rect',\n actions: isTransposed ? [['transpose'], ['reflect', 'x']] : []\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\n\n\nfunction conversionTag(params) {\n var getLineCoordinate = function getLineCoordinate(datum, datumIndex, data, initLineOption) {\n return tslib_1.__assign(tslib_1.__assign({}, initLineOption), {\n start: [datum[constant_1.PLOYGON_X][1], datum[constant_1.PLOYGON_Y][1]],\n end: [datum[constant_1.PLOYGON_X][1] + 0.05, datum[constant_1.PLOYGON_Y][1]]\n });\n };\n\n common_1.conversionTagComponent(getLineCoordinate)(params);\n return params;\n}\n/**\n * 动态高度漏斗\n * @param chart\n * @param options\n */\n\n\nfunction dynamicHeightFunnel(params) {\n return utils_1.flow(field, geometry, transpose, conversionTag)(params);\n}\n\nexports.dynamicHeightFunnel = dynamicHeightFunnel;\n\n/***/ }),\n/* 1070 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar common_1 = __webpack_require__(34);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_1 = __webpack_require__(16);\n/**\n * geometry 配置处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n lineStyle = options.lineStyle,\n color = options.color,\n pointOptions = options.point,\n areaOptions = options.area;\n chart.data(data); // 雷达图 主 geometry\n\n var primary = utils_1.deepAssign({}, params, {\n options: {\n line: {\n style: lineStyle,\n color: color\n },\n point: pointOptions ? tslib_1.__assign({\n color: color\n }, pointOptions) : pointOptions,\n area: areaOptions ? tslib_1.__assign({\n color: color\n }, areaOptions) : areaOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined\n }\n }); // 副 Geometry\n\n var second = utils_1.deepAssign({}, primary, {\n options: {\n tooltip: false\n }\n });\n geometries_1.line(primary);\n geometries_1.point(second);\n geometries_1.area(second);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coord(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius;\n chart.coordinate('polar', {\n radius: radius\n });\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n xAxis = options.xAxis,\n yField = options.yField,\n yAxis = options.yAxis;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var geometry = utils_1.findGeometry(chart, 'line');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n geometry.label({\n fields: [yField],\n callback: callback,\n cfg: utils_1.transformLabel(cfg)\n });\n }\n\n return params;\n}\n/**\n * 雷达图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_1.flow(geometry, meta, common_1.theme, coord, axis, common_1.legend, common_1.tooltip, label, common_1.interaction, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1071 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar g2_1 = __webpack_require__(17);\n\nvar radar_tooltip_action_1 = __webpack_require__(1072);\n\ng2_1.registerAction('radar-tooltip', radar_tooltip_action_1.RadarTooltipAction);\ng2_1.registerInteraction('radar-tooltip', {\n start: [{\n trigger: 'plot:mousemove',\n action: 'radar-tooltip:show'\n }],\n end: [{\n trigger: 'plot:mouseleave',\n action: 'radar-tooltip:hide'\n }]\n});\n\n/***/ }),\n/* 1072 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RadarTooltipAction = exports.RadarTooltipController = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar RadarTooltipController =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(RadarTooltipController, _super);\n\n function RadarTooltipController() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Object.defineProperty(RadarTooltipController.prototype, \"name\", {\n get: function get() {\n return 'radar-tooltip';\n },\n enumerable: false,\n configurable: true\n });\n\n RadarTooltipController.prototype.getTooltipItems = function (point) {\n var _a = this.getTooltipCfg(),\n shared = _a.shared,\n cfgTitle = _a.title;\n\n var hintItems = _super.prototype.getTooltipItems.call(this, point);\n\n if (hintItems.length > 0) {\n var geometry_1 = this.view.geometries[0];\n var dataArray = geometry_1.dataArray;\n var title_1 = hintItems[0].name;\n var result_1 = [];\n dataArray.forEach(function (mappingData) {\n mappingData.forEach(function (d) {\n var items = g2_1.Util.getTooltipItems(d, geometry_1);\n var item = items[0];\n\n if (!shared && item && item.name === title_1) {\n var displayTitle = util_1.isNil(cfgTitle) ? title_1 : cfgTitle;\n result_1.push(tslib_1.__assign(tslib_1.__assign({}, item), {\n name: item.title,\n title: displayTitle\n }));\n } else if (shared && item) {\n var displayTitle = util_1.isNil(cfgTitle) ? item.name || title_1 : cfgTitle;\n result_1.push(tslib_1.__assign(tslib_1.__assign({}, item), {\n name: item.title,\n title: displayTitle\n }));\n }\n });\n });\n return result_1;\n }\n\n return [];\n };\n\n return RadarTooltipController;\n}(g2_1.TooltipController);\n\nexports.RadarTooltipController = RadarTooltipController;\ng2_1.registerComponentController('radar-tooltip', RadarTooltipController);\n/**\n * 雷达图 tooltip 激活 action\n */\n\nvar RadarTooltipAction =\n/** @class */\nfunction (_super) {\n tslib_1.__extends(RadarTooltipAction, _super);\n\n function RadarTooltipAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n RadarTooltipAction.prototype.init = function () {\n var view = this.context.view;\n view.removeInteraction('tooltip');\n };\n\n RadarTooltipAction.prototype.show = function () {\n var event = this.context.event;\n var controller = this.getTooltipController();\n controller.showTooltip({\n x: event.x,\n y: event.y\n });\n };\n\n RadarTooltipAction.prototype.hide = function () {\n var controller = this.getTooltipController();\n controller.hideTooltip();\n };\n\n RadarTooltipAction.prototype.getTooltipController = function () {\n var view = this.context.view;\n return view.getController('radar-tooltip');\n };\n\n return RadarTooltipAction;\n}(g2_1.Action);\n\nexports.RadarTooltipAction = RadarTooltipAction;\n\n/***/ }),\n/* 1073 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.statistic = void 0;\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_2 = __webpack_require__(507);\n/**\n * geometry 处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var percent = options.percent,\n color = options.color,\n liquidStyle = options.liquidStyle,\n radius = options.radius,\n outline = options.outline,\n wave = options.wave;\n chart.scale({\n percent: {\n min: 0,\n max: 1\n }\n });\n chart.data(utils_2.getLiquidData(percent));\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: 'type',\n yField: 'percent',\n // radius 放到 columnWidthRatio 中。\n // 保证横向的大小是根据 redius 生成的\n widthRatio: radius,\n interval: {\n color: color,\n style: liquidStyle,\n shape: 'liquid-fill-gauge'\n }\n }\n });\n var ext = geometries_1.interval(p).ext;\n var geometry = ext.geometry; // 将 radius 传入到自定义 shape 中\n\n geometry.customInfo({\n radius: radius,\n outline: outline,\n wave: wave\n }); // 关闭组件\n\n chart.legend(false);\n chart.axis(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 统计指标文档\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var statistic = options.statistic,\n percent = options.percent,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n\n if (statistic.content && !statistic.content.formatter) {\n var metaFormatter_1 = util_1.get(meta, ['percent', 'formatter']); // @ts-ignore\n\n statistic.content.formatter = function (_a) {\n var percent = _a.percent;\n return metaFormatter_1 ? metaFormatter_1(percent) : (percent * 100).toFixed(2) + \"%\";\n };\n }\n\n utils_1.renderStatistic(chart, {\n statistic: statistic,\n plotType: 'liquid'\n }, {\n percent: percent\n });\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n\nexports.statistic = statistic;\n/**\n * 水波图适配器\n * @param chart\n * @param options\n */\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_1.flow(geometry, statistic, common_1.scale({}), common_1.animation, common_1.theme, common_1.interaction)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1074 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar matrix_1 = __webpack_require__(504);\n\nvar DURATION = 5000;\n/**\n * 一个线性映射的函数\n * @param min\n * @param max\n * @param factor\n */\n\nfunction lerp(min, max, factor) {\n return min + (max - min) * factor;\n}\n/**\n * 波浪的 attrs\n * @param cfg\n */\n\n\nfunction getFillAttrs(cfg) {\n var attrs = tslib_1.__assign({\n opacity: 1\n }, cfg.style);\n\n if (cfg.color && !attrs.fill) {\n attrs.fill = cfg.color;\n }\n\n return attrs;\n}\n/**\n * 圆圈的 attrs\n * @param cfg\n */\n\n\nfunction getLineAttrs(cfg) {\n var defaultAttrs = {\n fill: '#fff',\n fillOpacity: 0,\n lineWidth: 4\n };\n var attrs = util_1.mix({}, defaultAttrs, cfg.style);\n\n if (cfg.color && !attrs.stroke) {\n attrs.stroke = cfg.color;\n }\n\n if (util_1.isNumber(cfg.opacity)) {\n attrs.opacity = attrs.strokeOpacity = cfg.opacity;\n }\n\n return attrs;\n}\n/**\n * 用贝塞尔曲线模拟正弦波\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n * c *----* d\n * b *\n * |\n * ... a * ..................\n *\n * whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1)\n *\n * @param x x position of the left-most point (a)\n * @param stage 0-3, stating which part of the wave it is\n * @param waveLength wave length of the sine wave\n * @param amplitude wave amplitude\n * @return 正弦片段曲线\n */\n\n\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n if (stage === 0) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2, amplitude / 2], [x + 1 / 2 * waveLength / Math.PI, amplitude], [x + waveLength / 4, amplitude]];\n }\n\n if (stage === 1) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), amplitude], [x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), amplitude / 2], [x + waveLength / 4, 0]];\n }\n\n if (stage === 2) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2, -amplitude / 2], [x + 1 / 2 * waveLength / Math.PI, -amplitude], [x + waveLength / 4, -amplitude]];\n }\n\n return [[x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), -amplitude], [x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), -amplitude / 2], [x + waveLength / 4, 0]];\n}\n/**\n * 获取水波路径\n * @param radius 半径\n * @param waterLevel 水位\n * @param waveLength 波长\n * @param phase 相位\n * @param amplitude 震幅\n * @param cx 圆心x\n * @param cy 圆心y\n * @return path 路径\n * @reference http://gitlab.alipay-inc.com/datavis/g6/blob/1.2.0/src/graph/utils/path.js#L135\n */\n\n\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n var curves = Math.ceil(2 * radius / waveLength * 4) * 4;\n var path = [];\n var _phase = phase; // map phase to [-Math.PI * 2, 0]\n\n while (_phase < -Math.PI * 2) {\n _phase += Math.PI * 2;\n }\n\n while (_phase > 0) {\n _phase -= Math.PI * 2;\n }\n\n _phase = _phase / Math.PI / 2 * waveLength;\n var left = cx - radius + _phase - radius * 2;\n /**\n * top-left corner as start point\n *\n * draws this point\n * |\n * \\|/\n * ~~~~~~~~\n * | |\n * +------+\n */\n\n path.push(['M', left, waterLevel]);\n /**\n * top wave\n *\n * ~~~~~~~~ <- draws this sine wave\n * | |\n * +------+\n */\n\n var waveRight = 0;\n\n for (var c = 0; c < curves; ++c) {\n var stage = c % 4;\n var pos = getWaterWavePositions(c * waveLength / 4, stage, waveLength, amplitude);\n path.push(['C', pos[0][0] + left, -pos[0][1] + waterLevel, pos[1][0] + left, -pos[1][1] + waterLevel, pos[2][0] + left, -pos[2][1] + waterLevel]);\n\n if (c === curves - 1) {\n waveRight = pos[2][0];\n }\n }\n /**\n * top-right corner\n *\n * ~~~~~~~~\n * 3. draws this line -> | | <- 1. draws this line\n * +------+\n * ^\n * |\n * 2. draws this line\n */\n\n\n path.push(['L', waveRight + left, cy + radius]);\n path.push(['L', left, cy + radius]);\n path.push(['Z']); // path.push(['L', left, waterLevel]);\n\n return path;\n}\n/**\n * 添加水波\n * @param x 中心x\n * @param y 中心y\n * @param level 水位等级 0~1\n * @param waveCount 水波数\n * @param waveAttrs 色值\n * @param group 图组\n * @param clip 用于剪切的图形\n * @param radius 绘制图形的高度\n * @param waveLength 波的长度\n */\n\n\nfunction addWaterWave(x, y, level, waveCount, waveAttrs, group, clip, radius, waveLength) {\n var fill = waveAttrs.fill,\n opacity = waveAttrs.opacity;\n var bbox = clip.getBBox();\n var width = bbox.maxX - bbox.minX;\n var height = bbox.maxY - bbox.minY;\n\n for (var idx = 0; idx < waveCount; idx++) {\n var factor = waveCount <= 1 ? 0 : idx / (waveCount - 1);\n var wave = group.addShape('path', {\n name: \"waterwave-path\",\n attrs: {\n path: getWaterWavePath(radius, bbox.minY + height * level, waveLength, 0, width / 32, // 波幅高度\n x, y),\n fill: fill,\n opacity: lerp(0.2, 0.9, factor) * opacity\n }\n });\n\n try {\n var matrix = matrix_1.transform([['t', waveLength, 0]]);\n wave.stopAnimate();\n wave.animate({\n matrix: matrix\n }, {\n duration: lerp(0.5 * DURATION, DURATION, factor),\n repeat: true\n });\n } catch (e) {\n // TODO off-screen canvas 中动画会找不到 canvas\n console.warn('off-screen group animate error!');\n }\n }\n}\n\ng2_1.registerShape('interval', 'liquid-fill-gauge', {\n draw: function draw(cfg, container) {\n var cx = 0.5;\n var cy = 0.5;\n var customInfo = cfg.customInfo;\n var radio = customInfo.radius;\n var outline = customInfo.outline;\n var wave = customInfo.wave;\n var border = outline.border,\n distance = outline.distance;\n var waveCount = wave.count,\n waveLength = wave.length; // 获取最小 minX\n\n var minX = util_1.reduce(cfg.points, function (r, p) {\n return Math.min(r, p.x);\n }, Infinity);\n var center = this.parsePoint({\n x: cx,\n y: cy\n });\n var minXPoint = this.parsePoint({\n x: minX,\n y: cy\n });\n var halfWidth = center.x - minXPoint.x; // 保证半径是 画布宽高最小值的 radius 值\n\n var radius = Math.min(halfWidth, minXPoint.y * radio);\n var waveAttrs = getFillAttrs(cfg);\n var circleAttrs = getLineAttrs(cfg); // 1. 首先绘制一个外圆\n\n container.addShape('circle', {\n name: 'wrap',\n attrs: util_1.mix(circleAttrs, {\n x: center.x,\n y: center.y,\n r: radius,\n fill: 'transparent',\n lineWidth: border\n })\n }); // 2. 绘制波的 group\n\n var waves = container.addGroup({\n name: 'waves'\n }); // 3. 波对应的 clip 裁剪形状\n\n var clipCircle = waves.setClip({\n type: 'circle',\n attrs: {\n x: center.x,\n y: center.y,\n r: radius - distance - border / 2\n }\n }); // 4. 绘制波形\n\n addWaterWave(center.x, center.y, 1 - cfg.points[1].y, waveCount, waveAttrs, waves, clipCircle, radius * 2, waveLength);\n return container;\n }\n});\n\n/***/ }),\n/* 1075 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar utils_2 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar histogram_1 = __webpack_require__(508);\n/**\n * geometry 处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n binField = options.binField,\n binNumber = options.binNumber,\n binWidth = options.binWidth,\n color = options.color,\n stackField = options.stackField,\n legend = options.legend,\n columnStyle = options.columnStyle; // 处理数据\n\n var plotData = histogram_1.binHistogram(data, binField, binWidth, binNumber, stackField);\n chart.data(plotData);\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: 'range',\n yField: 'count',\n seriesField: stackField,\n isStack: true,\n interval: {\n color: color,\n style: columnStyle\n }\n }\n });\n geometries_1.interval(p); // 图例\n\n if (legend && stackField) {\n chart.legend(stackField, legend);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis;\n return utils_2.flow(common_1.scale({\n range: xAxis,\n count: yAxis\n }))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis('range', false);\n } else {\n chart.axis('range', xAxis);\n }\n\n if (yAxis === false) {\n chart.axis('count', false);\n } else {\n chart.axis('count', yAxis);\n }\n\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label;\n var geometry = utils_1.findGeometry(chart, 'interval');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n geometry.label({\n fields: ['count'],\n callback: callback,\n cfg: utils_2.transformLabel(cfg)\n });\n }\n\n return params;\n}\n/**\n * 直方图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_2.flow(geometry, meta, axis, common_1.theme, label, common_1.tooltip, common_1.interaction, common_1.animation)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1076 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.tooltip = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_1 = __webpack_require__(16);\n\nvar constants_1 = __webpack_require__(509);\n\nvar utils_2 = __webpack_require__(510);\n\n__webpack_require__(1077);\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xField = options.xField,\n yField = options.yField,\n total = options.total,\n leaderLine = options.leaderLine,\n columnWidthRatio = options.columnWidthRatio,\n waterfallStyle = options.waterfallStyle,\n risingFill = options.risingFill,\n fallingFill = options.fallingFill,\n color = options.color; // 数据处理\n\n chart.data(utils_2.transformData(data, xField, yField, total)); // 瀑布图自带的 colorMapping\n\n var colorMapping = color || function (datum) {\n if (util_1.get(datum, [constants_1.IS_TOTAL])) {\n return util_1.get(total, ['style', 'fill'], '');\n }\n\n return util_1.get(datum, [constants_1.Y_FIELD, 1]) - util_1.get(datum, [constants_1.Y_FIELD, 0]) > 0 ? risingFill : fallingFill;\n };\n\n var p = utils_1.deepAssign({}, params, {\n options: {\n xField: xField,\n yField: constants_1.Y_FIELD,\n seriesField: xField,\n rawFields: [yField, constants_1.DIFF_FIELD, constants_1.IS_TOTAL, constants_1.Y_FIELD],\n widthRatio: columnWidthRatio,\n interval: {\n style: waterfallStyle,\n shape: 'waterfall',\n color: colorMapping\n }\n }\n });\n var ext = geometries_1.interval(p).ext;\n var geometry = ext.geometry; // 将 waterfall leaderLineCfg 传入到自定义 shape 中\n\n geometry.customInfo({\n leaderLine: leaderLine\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField,\n meta = options.meta;\n var Y_FIELD_META = utils_1.deepAssign({}, {\n alias: yField\n }, util_1.get(meta, yField));\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a[constants_1.Y_FIELD] = yAxis, _a), utils_1.deepAssign({}, meta, (_b = {}, _b[constants_1.Y_FIELD] = Y_FIELD_META, _b[constants_1.DIFF_FIELD] = Y_FIELD_META, _b[constants_1.ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(yField, false);\n chart.axis(constants_1.Y_FIELD, false);\n } else {\n chart.axis(yField, yAxis);\n chart.axis(constants_1.Y_FIELD, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置 todo 添加 hover 交互\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n total = options.total,\n risingFill = options.risingFill,\n fallingFill = options.fallingFill;\n\n if (legend === false) {\n chart.legend(false);\n } else {\n var items = [{\n name: '增加',\n value: 'increase',\n marker: {\n symbol: 'square',\n style: {\n r: 5,\n fill: risingFill\n }\n }\n }, {\n name: '减少',\n value: 'decrease',\n marker: {\n symbol: 'square',\n style: {\n r: 5,\n fill: fallingFill\n }\n }\n }];\n\n if (total) {\n items.push({\n name: total.label || '',\n value: 'total',\n marker: {\n symbol: 'square',\n style: utils_1.deepAssign({}, {\n r: 5\n }, util_1.get(total, 'style'))\n }\n });\n }\n\n chart.legend(utils_1.deepAssign({}, {\n custom: true,\n position: 'top',\n items: items\n }, legend));\n chart.removeInteraction('legend-filter');\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n labelMode = options.labelMode,\n xField = options.xField;\n var geometry = utils_1.findGeometry(chart, 'interval');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n geometry.label({\n fields: labelMode === 'absolute' ? [constants_1.ABSOLUTE_FIELD, xField] : [constants_1.DIFF_FIELD, xField],\n callback: callback,\n cfg: utils_1.transformLabel(cfg)\n });\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip,\n xField = options.xField,\n yField = options.yField;\n\n if (tooltip !== false) {\n chart.tooltip(tslib_1.__assign({\n showCrosshairs: false,\n showMarkers: false,\n shared: true,\n // tooltip 默认展示 y 字段值\n fields: [yField]\n }, tooltip)); // 瀑布图默认以 yField 作为 tooltip 内容\n\n var geometry_1 = chart.geometries[0];\n (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter) ? geometry_1.tooltip(xField + \"*\" + yField, tooltip.formatter) : geometry_1.tooltip(yField);\n } else {\n chart.tooltip(false);\n }\n\n return params;\n}\n\nexports.tooltip = tooltip;\n/**\n * 瀑布图适配器\n * @param params\n */\n\nfunction adaptor(params) {\n return utils_1.flow(geometry, meta, axis, legend, tooltip, label, common_1.state, common_1.theme, common_1.interaction, common_1.animation, common_1.annotation())(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1077 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n/**\n * 获取柱子 path\n * @param points\n */\n\n\nfunction getRectPath(points) {\n var path = [];\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n\n if (point) {\n var action = i === 0 ? 'M' : 'L';\n path.push([action, point.x, point.y]);\n }\n }\n\n var first = points[0];\n path.push(['L', first.x, first.y]);\n path.push(['z']);\n return path;\n}\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\n\n\nfunction getFillAttrs(cfg) {\n return utils_1.deepAssign({}, cfg.defaultStyle, cfg.style, {\n fill: cfg.color\n });\n}\n\ng2_1.registerShape('interval', 'waterfall', {\n draw: function draw(cfg, container) {\n var customInfo = cfg.customInfo,\n points = cfg.points,\n nextPoints = cfg.nextPoints;\n var group = container.addGroup(); // ① 绘制柱体\n\n var rectPath = this.parsePath(getRectPath(points));\n var fillAttrs = getFillAttrs(cfg);\n group.addShape('path', {\n attrs: tslib_1.__assign(tslib_1.__assign({}, fillAttrs), {\n path: rectPath\n })\n }); // ② 绘制连接线\n\n var leaderLineCfg = util_1.get(customInfo, 'leaderLine');\n\n if (leaderLineCfg && nextPoints) {\n var linkPath = [['M', points[2].x, points[2].y], ['L', nextPoints[0].x, nextPoints[0].y]];\n\n if (points[2].y === nextPoints[1].y) {\n linkPath[1] = ['L', nextPoints[1].x, nextPoints[1].y];\n }\n\n linkPath = this.parsePath(linkPath);\n group.addShape('path', {\n attrs: tslib_1.__assign({\n path: linkPath\n }, leaderLineCfg.style || {})\n });\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1078 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.tooltip = exports.meta = exports.transformOptions = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_2 = __webpack_require__(16);\n\nvar util_2 = __webpack_require__(1079);\n/**\n * 散点图 data.length === 1 时居中显示,\n * @param params\n * @returns params\n */\n\n\nfunction transformOptions(options) {\n var _a = options.data,\n data = _a === void 0 ? [] : _a; // 仅对 data.length === 1 的情况进行处理\n\n if (data.length === 1) {\n return utils_1.deepAssign({}, options, {\n meta: util_2.getMeta(options)\n });\n }\n\n return options;\n}\n\nexports.transformOptions = transformOptions;\n/**\n * 字段\n * @param params\n */\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n type = options.type,\n color = options.color,\n shape = options.shape,\n pointStyle = options.pointStyle,\n shapeField = options.shapeField,\n colorField = options.colorField,\n xField = options.xField,\n yField = options.yField,\n sizeField = options.sizeField;\n var size = options.size;\n var tooltip = options.tooltip;\n\n if (sizeField) {\n if (!size) {\n size = [2, 8];\n }\n\n if (util_1.isNumber(size)) {\n size = [size, size];\n }\n }\n\n if (tooltip && !tooltip.fields) {\n tooltip = tslib_1.__assign(tslib_1.__assign({}, tooltip), {\n fields: [xField, yField, colorField, sizeField, shapeField]\n });\n } // 数据\n\n\n chart.data(data); // geometry\n\n geometries_1.point(utils_1.deepAssign({}, params, {\n options: {\n seriesField: colorField,\n point: {\n color: color,\n shape: shape,\n size: size,\n style: pointStyle\n },\n tooltip: tooltip\n }\n }));\n var geometry = utils_2.findGeometry(chart, 'point'); // 数据调整\n\n if (type) {\n geometry.adjust(type);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n var newOptions = options; // 仅对 data.length === 1 的情况进行处理\n\n if (data.length === 1) {\n newOptions = transformOptions(utils_1.deepAssign({}, options, {\n meta: util_2.getMeta(options)\n }));\n }\n\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(utils_1.deepAssign({}, params, {\n options: newOptions\n }));\n}\n\nexports.meta = meta;\n/**\n * axis 配置\n * @param params\n */\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n colorField = options.colorField,\n shapeField = options.shapeField,\n sizeField = options.sizeField; // legend 没有指定时根据 shapeField 和 colorField 来设置默认值\n\n var showLegend = util_1.isBoolean(legend) ? legend : legend || !!(shapeField || colorField);\n\n if (showLegend) {\n chart.legend(colorField || shapeField, legend); // 隐藏连续图例\n\n if (sizeField) {\n chart.legend(sizeField, false);\n }\n } else {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var scatterGeometry = utils_2.findGeometry(chart, 'point'); // label 为 false, 空 则不显示 label\n\n if (!label) {\n scatterGeometry.label(false);\n } else {\n var callback = label.callback,\n cfg = tslib_1.__rest(label, [\"callback\"]);\n\n scatterGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: utils_2.transformLabel(cfg)\n });\n }\n\n return params;\n}\n/**\n * annotation 配置\n * - 特殊 annotation: quadrant(四象限)\n * @param params\n */\n\n\nfunction scatterAnnotation(params) {\n var options = params.options;\n var quadrant = options.quadrant;\n var annotationOptions = [];\n\n if (quadrant) {\n var _a = quadrant.xBaseline,\n xBaseline = _a === void 0 ? 0 : _a,\n _b = quadrant.yBaseline,\n yBaseline = _b === void 0 ? 0 : _b,\n labels_1 = quadrant.labels,\n regionStyle_1 = quadrant.regionStyle,\n lineStyle = quadrant.lineStyle;\n var defaultConfig_1 = util_2.getQuadrantDefaultConfig(xBaseline, yBaseline); // 仅支持四象限\n\n var quadrants = new Array(4).join(',').split(',');\n quadrants.forEach(function (_, index) {\n annotationOptions.push(tslib_1.__assign(tslib_1.__assign({\n type: 'region',\n top: false\n }, defaultConfig_1.regionStyle[index].position), {\n style: utils_1.deepAssign({}, defaultConfig_1.regionStyle[index].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index])\n }), tslib_1.__assign({\n type: 'text',\n top: true\n }, utils_1.deepAssign({}, defaultConfig_1.labelStyle[index], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index])));\n }); // 生成坐标轴\n\n annotationOptions.push({\n type: 'line',\n top: false,\n start: ['min', yBaseline],\n end: ['max', yBaseline],\n style: utils_1.deepAssign({}, defaultConfig_1.lineStyle, lineStyle)\n }, {\n type: 'line',\n top: false,\n start: [xBaseline, 'min'],\n end: [xBaseline, 'max'],\n style: utils_1.deepAssign({}, defaultConfig_1.lineStyle, lineStyle)\n });\n }\n\n return utils_1.flow(common_1.annotation(annotationOptions))(params);\n} // 趋势线\n\n\nfunction regressionLine(params) {\n var options = params.options,\n chart = params.chart;\n var regressionLine = options.regressionLine;\n\n if (regressionLine) {\n var style_1 = regressionLine.style,\n _a = regressionLine.top,\n top_1 = _a === void 0 ? false : _a;\n var defaultStyle_1 = {\n stroke: '#9ba29a',\n lineWidth: 2,\n opacity: 0.5\n };\n chart.annotation().shape({\n top: top_1,\n render: function render(container, view) {\n var group = container.addGroup({\n id: chart.id + \"-regression-line\",\n name: 'regression-line-group'\n });\n var path = util_2.getPath({\n view: view,\n options: options\n });\n group.addShape('path', {\n name: 'regression-line',\n attrs: tslib_1.__assign(tslib_1.__assign({\n path: path\n }, defaultStyle_1), style_1)\n });\n }\n });\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip;\n\n if (tooltip) {\n chart.tooltip(tooltip);\n } else if (tooltip === false) {\n chart.tooltip(false);\n }\n\n return params;\n}\n\nexports.tooltip = tooltip;\n/**\n * 散点图适配器\n * @param chart\n * @param options\n */\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_1.flow(geometry, meta, axis, legend, tooltip, label, common_1.interaction, scatterAnnotation, common_1.animation, common_1.theme, regressionLine)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1079 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getMeta = exports.getPath = exports.getQuadrantDefaultConfig = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar d3_regression_1 = __webpack_require__(511);\n\nvar util_1 = __webpack_require__(0);\n\nvar utils_1 = __webpack_require__(16);\n\nvar REGRESSION_MAP = {\n exp: d3_regression_1.regressionExp,\n linear: d3_regression_1.regressionLinear,\n loess: d3_regression_1.regressionLoess,\n log: d3_regression_1.regressionLog,\n poly: d3_regression_1.regressionPoly,\n pow: d3_regression_1.regressionPow,\n quad: d3_regression_1.regressionQuad\n};\n/**\n * 获取四象限默认配置\n * @param {number} xBaseline\n * @param {number} yBaseline\n */\n\nfunction getQuadrantDefaultConfig(xBaseline, yBaseline) {\n // 文本便宜距离\n var textOffset = 10; // 四象限默认样式\n\n var defaultConfig = {\n regionStyle: [{\n position: {\n start: [xBaseline, 'max'],\n end: ['max', yBaseline]\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4\n }\n }, {\n position: {\n start: ['min', 'max'],\n end: [xBaseline, yBaseline]\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4\n }\n }, {\n position: {\n start: ['min', yBaseline],\n end: [xBaseline, 'min']\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4\n }\n }, {\n position: {\n start: [xBaseline, yBaseline],\n end: ['max', 'min']\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4\n }\n }],\n lineStyle: {\n stroke: '#9ba29a',\n lineWidth: 1\n },\n labelStyle: [{\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc'\n }\n }]\n };\n return defaultConfig;\n}\n\nexports.getQuadrantDefaultConfig = getQuadrantDefaultConfig;\n\nvar splinePath = function splinePath(data, config) {\n var view = config.view,\n _a = config.options,\n xField = _a.xField,\n yField = _a.yField;\n var xScaleView = view.getScaleByField(xField);\n var yScaleView = view.getScaleByField(yField);\n var pathData = data.map(function (d) {\n return view.getCoordinate().convert({\n x: xScaleView.scale(d[0]),\n y: yScaleView.scale(d[1])\n });\n });\n return utils_1.getSplinePath(pathData, false);\n};\n\nexports.getPath = function (config) {\n var options = config.options;\n var xField = options.xField,\n yField = options.yField,\n data = options.data,\n regressionLine = options.regressionLine;\n var _a = regressionLine.type,\n type = _a === void 0 ? 'linear' : _a,\n algorithm = regressionLine.algorithm;\n var pathData;\n\n if (algorithm) {\n pathData = util_1.isArray(algorithm) ? algorithm : algorithm(data);\n } else {\n var reg = REGRESSION_MAP[type]().x(function (d) {\n return d[xField];\n }).y(function (d) {\n return d[yField];\n });\n pathData = reg(data);\n }\n\n return splinePath(pathData, config);\n}; // 散点图data.length === 1时调整 meta: {min, max}\n\n\nexports.getMeta = function (options) {\n var _a;\n\n var _b = options.meta,\n meta = _b === void 0 ? {} : _b,\n xField = options.xField,\n yField = options.yField,\n data = options.data;\n var xFieldValue = data[0][xField];\n var yFieldValue = data[0][yField];\n var xIsPositiveNumber = xFieldValue > 0;\n var yIsPositiveNumber = yFieldValue > 0;\n\n var getValue = function getValue(field, type, axis) {\n var customValue = util_1.get(meta, [field, type]);\n\n if (util_1.isNumber(customValue)) {\n return customValue;\n }\n\n if (axis === 'x') {\n var rangeX = {\n min: xIsPositiveNumber ? 0 : xFieldValue * 2,\n max: xIsPositiveNumber ? xFieldValue * 2 : 0\n };\n return rangeX[type];\n }\n\n var rangeY = {\n min: yIsPositiveNumber ? 0 : yFieldValue * 2,\n max: yIsPositiveNumber ? yFieldValue * 2 : 0\n };\n return rangeY[type];\n };\n\n return tslib_1.__assign(tslib_1.__assign({}, meta), (_a = {}, _a[xField] = tslib_1.__assign(tslib_1.__assign({}, meta[xField]), {\n min: getValue(xField, 'min', 'x'),\n max: getValue(xField, 'max', 'x')\n }), _a[yField] = tslib_1.__assign(tslib_1.__assign({}, meta[yField]), {\n min: getValue(yField, 'min', 'y'),\n max: getValue(yField, 'max', 'y')\n }), _a));\n};\n\n/***/ }),\n/* 1080 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _determination = __webpack_require__(120);\n\nvar _interpose = __webpack_require__(157);\n\nvar _ols3 = __webpack_require__(158);\n\nvar _points = __webpack_require__(98);\n\nfunction _default() {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function exponential(data) {\n var n = 0,\n Y = 0,\n YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n (0, _points.visitPoints)(data, x, y, function (dx, dy) {\n var ly = Math.log(dy),\n xy = dx * dy;\n ++n;\n Y += (dy - Y) / n;\n XY += (xy - XY) / n;\n X2Y += (dx * xy - X2Y) / n;\n YL += (dy * ly - YL) / n;\n XYL += (xy * ly - XYL) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = (0, _ols3.ols)(XY / Y, YL / Y, XYL / Y, X2Y / Y),\n _ols2 = (0, _slicedToArray2.default)(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n a = Math.exp(a);\n\n var fn = function fn(x) {\n return a * Math.exp(b * x);\n },\n out = (0, _interpose.interpose)(xmin, xmax, fn);\n\n out.a = a;\n out.b = b;\n out.predict = fn;\n out.rSquared = (0, _determination.determination)(data, x, y, Y, fn);\n return out;\n }\n\n exponential.domain = function (arr) {\n return arguments.length ? (domain = arr, exponential) : domain;\n };\n\n exponential.x = function (fn) {\n return arguments.length ? (x = fn, exponential) : x;\n };\n\n exponential.y = function (fn) {\n return arguments.length ? (y = fn, exponential) : y;\n };\n\n return exponential;\n}\n\n/***/ }),\n/* 1081 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.angle = angle;\nexports.midpoint = midpoint;\n\n// Returns the angle of a line in degrees.\nfunction angle(line) {\n return Math.atan2(line[1][1] - line[0][1], line[1][0] - line[0][0]) * 180 / Math.PI;\n} // Returns the midpoint of a line.\n\n\nfunction midpoint(line) {\n return [(line[0][0] + line[1][0]) / 2, (line[0][1] + line[1][1]) / 2];\n}\n\n/***/ }),\n/* 1082 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _median = __webpack_require__(1083);\n\nvar _ols3 = __webpack_require__(158);\n\nvar _points3 = __webpack_require__(98);\n\n// Adapted from science.js by Jason Davies\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// Adapted from vega-statistics by Jeffrey Heer\n// License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n// Source: https://github.com/vega/vega/blob/f21cb8792b4e0cbe2b1a3fd44b0f5db370dbaadb/packages/vega-statistics/src/regression/loess.js\nvar maxiters = 2,\n epsilon = 1e-12;\n\nfunction _default() {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n bandwidth = .3;\n\n function loess(data) {\n var _points = (0, _points3.points)(data, x, y, true),\n _points2 = (0, _slicedToArray2.default)(_points, 4),\n xv = _points2[0],\n yv = _points2[1],\n ux = _points2[2],\n uy = _points2[3],\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (var iter = -1; ++iter <= maxiters;) {\n var interval = [0, bw - 1];\n\n for (var i = 0; i < n; ++i) {\n var dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n var W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n denom = 1 / Math.abs(xv[edge] - dx || 1); // Avoid singularity\n\n for (var k = i0; k <= i1; ++k) {\n var xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // Linear regression fit\n\n\n var _ols = (0, _ols3.ols)(X / W, Y / W, XY / W, X2 / W),\n _ols2 = (0, _slicedToArray2.default)(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n var medianResidual = (0, _median.median)(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (var _i = 0, arg, _w; _i < n; ++_i) {\n arg = residuals[_i] / (6 * medianResidual); // Default to epsilon (rather than zero) for large deviations\n // Keeping weights tiny but non-zero prevents singularites\n\n robustWeights[_i] = arg >= 1 ? epsilon : (_w = 1 - arg * arg) * _w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n }\n\n loess.bandwidth = function (bw) {\n return arguments.length ? (bandwidth = bw, loess) : bandwidth;\n };\n\n loess.x = function (fn) {\n return arguments.length ? (x = fn, loess) : x;\n };\n\n loess.y = function (fn) {\n return arguments.length ? (y = fn, loess) : y;\n };\n\n return loess;\n} // Weighting kernel for local regression\n\n\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n} // Advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n var val = xv[i],\n left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // Step right if distance to new right edge is <= distance to old left edge\n // Step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n} // Generate smoothed output points\n// Average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n var n = xv.length,\n out = [];\n var i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // Average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // Add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n}\n\n/***/ }),\n/* 1083 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.median = median;\n\n// Returns the medium value of an array of numbers.\nfunction median(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n var i = arr.length / 2;\n return i % 1 === 0 ? (arr[i - 1] + arr[i]) / 2 : arr[Math.floor(i)];\n}\n\n/***/ }),\n/* 1084 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _determination = __webpack_require__(120);\n\nvar _interpose = __webpack_require__(157);\n\nvar _ols3 = __webpack_require__(158);\n\nvar _points = __webpack_require__(98);\n\nfunction _default() {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function logarithmic(data) {\n var n = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n (0, _points.visitPoints)(data, x, y, function (dx, dy) {\n var lx = Math.log(dx);\n ++n;\n X += (lx - X) / n;\n Y += (dy - Y) / n;\n XY += (lx * dy - XY) / n;\n X2 += (lx * lx - X2) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = (0, _ols3.ols)(X, Y, XY, X2),\n _ols2 = (0, _slicedToArray2.default)(_ols, 2),\n intercept = _ols2[0],\n slope = _ols2[1],\n fn = function fn(x) {\n return slope * Math.log(x) + intercept;\n },\n out = (0, _interpose.interpose)(xmin, xmax, fn);\n\n out.a = slope;\n out.b = intercept;\n out.predict = fn;\n out.rSquared = (0, _determination.determination)(data, x, y, Y, fn);\n return out;\n }\n\n logarithmic.domain = function (arr) {\n return arguments.length ? (domain = arr, logarithmic) : domain;\n };\n\n logarithmic.x = function (fn) {\n return arguments.length ? (x = fn, logarithmic) : x;\n };\n\n logarithmic.y = function (fn) {\n return arguments.length ? (y = fn, logarithmic) : y;\n };\n\n return logarithmic;\n}\n\n/***/ }),\n/* 1085 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _determination = __webpack_require__(120);\n\nvar _interpose = __webpack_require__(157);\n\nvar _points3 = __webpack_require__(98);\n\nvar _linear = _interopRequireDefault(__webpack_require__(512));\n\nvar _quadratic = _interopRequireDefault(__webpack_require__(513));\n\n// Adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n// ...with ideas from vega-statistics by Jeffrey Heer\n// Source: https://github.com/vega/vega/blob/f21cb8792b4e0cbe2b1a3fd44b0f5db370dbaadb/packages/vega-statistics/src/regression/poly.js\n// License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\nfunction _default() {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n order = 3,\n domain;\n\n function polynomial(data) {\n // Use more efficient methods for lower orders\n if (order === 1) {\n var o = (0, _linear.default)().x(x).y(y).domain(domain)(data);\n o.coefficients = [o.b, o.a];\n delete o.a;\n delete o.b;\n return o;\n }\n\n if (order === 2) {\n var _o = (0, _quadratic.default)().x(x).y(y).domain(domain)(data);\n\n _o.coefficients = [_o.c, _o.b, _o.a];\n delete _o.a;\n delete _o.b;\n delete _o.c;\n return _o;\n }\n\n var _points = (0, _points3.points)(data, x, y),\n _points2 = (0, _slicedToArray2.default)(_points, 4),\n xv = _points2[0],\n yv = _points2[1],\n ux = _points2[2],\n uy = _points2[3],\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n\n var Y = 0,\n n0 = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n (0, _points3.visitPoints)(data, x, y, function (dx, dy) {\n ++n0;\n Y += (dy - Y) / n0;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n var i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n var coef = gaussianElimination(rhs),\n fn = function fn(x) {\n x -= ux;\n var y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) {\n y += coef[i] * Math.pow(x, i);\n }\n\n return y;\n },\n out = (0, _interpose.interpose)(xmin, xmax, fn);\n\n out.coefficients = uncenter(k, coef, -ux, uy);\n out.predict = fn;\n out.rSquared = (0, _determination.determination)(data, x, y, Y, fn);\n return out;\n }\n\n polynomial.domain = function (arr) {\n return arguments.length ? (domain = arr, polynomial) : domain;\n };\n\n polynomial.x = function (fn) {\n return arguments.length ? (x = fn, polynomial) : x;\n };\n\n polynomial.y = function (fn) {\n return arguments.length ? (y = fn, polynomial) : y;\n };\n\n polynomial.order = function (n) {\n return arguments.length ? (order = n, polynomial) : order;\n };\n\n return polynomial;\n}\n\nfunction uncenter(k, a, x, y) {\n var z = Array(k);\n var i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) {\n z[i] = 0;\n } // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n var n = matrix.length - 1,\n coef = [];\n var i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n}\n\n/***/ }),\n/* 1086 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _determination = __webpack_require__(120);\n\nvar _interpose = __webpack_require__(157);\n\nvar _ols3 = __webpack_require__(158);\n\nvar _points = __webpack_require__(98);\n\nfunction _default() {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function power(data) {\n var n = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n (0, _points.visitPoints)(data, x, y, function (dx, dy) {\n var lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = (0, _ols3.ols)(X, Y, XY, X2),\n _ols2 = (0, _slicedToArray2.default)(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n a = Math.exp(a);\n\n var fn = function fn(x) {\n return a * Math.pow(x, b);\n },\n out = (0, _interpose.interpose)(xmin, xmax, fn);\n\n out.a = a;\n out.b = b;\n out.predict = fn;\n out.rSquared = (0, _determination.determination)(data, x, y, YS, fn);\n return out;\n }\n\n power.domain = function (arr) {\n return arguments.length ? (domain = arr, power) : domain;\n };\n\n power.x = function (fn) {\n return arguments.length ? (x = fn, power) : x;\n };\n\n power.y = function (fn) {\n return arguments.length ? (y = fn, power) : y;\n };\n\n return power;\n}\n\n/***/ }),\n/* 1087 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.meta = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar utils_1 = __webpack_require__(16);\n\nvar geometries_1 = __webpack_require__(48);\n\nvar utils_2 = __webpack_require__(514);\n/**\n * geometry 处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var bulletStyle = options.bulletStyle,\n targetField = options.targetField,\n rangeField = options.rangeField,\n measureField = options.measureField,\n xField = options.xField,\n color = options.color,\n layout = options.layout,\n size = options.size,\n label = options.label; // 处理数据\n\n var _a = utils_2.transformData(options),\n min = _a.min,\n max = _a.max,\n ds = _a.ds;\n\n chart.data(ds); // rangeGeometry\n\n var r = utils_1.deepAssign({}, params, {\n options: {\n xField: xField,\n yField: rangeField,\n seriesField: 'rKey',\n isStack: true,\n label: util_1.get(label, 'range'),\n interval: {\n color: util_1.get(color, 'range'),\n style: util_1.get(bulletStyle, 'range'),\n size: util_1.get(size, 'range')\n }\n }\n });\n geometries_1.interval(r); // 范围值的 tooltip 隐藏掉\n\n chart.geometries[0].tooltip(false); // measureGeometry\n\n var m = utils_1.deepAssign({}, params, {\n options: {\n xField: xField,\n yField: measureField,\n seriesField: 'mKey',\n isStack: true,\n label: util_1.get(label, 'measure'),\n interval: {\n color: util_1.get(color, 'measure'),\n style: util_1.get(bulletStyle, 'measure'),\n size: util_1.get(size, 'measure')\n }\n }\n });\n geometries_1.interval(m); // targetGeometry\n\n var t = utils_1.deepAssign({}, params, {\n options: {\n xField: xField,\n yField: targetField,\n seriesField: 'tKey',\n label: util_1.get(label, 'target'),\n point: {\n color: util_1.get(color, 'target'),\n style: util_1.get(bulletStyle, 'target'),\n size: util_1.get(size, 'target') / 2,\n shape: layout === 'horizontal' ? 'line' : 'hyphen'\n }\n }\n });\n geometries_1.point(t); // 水平的时候,要转换坐标轴\n\n if (layout === 'horizontal') {\n chart.coordinate().transpose();\n }\n\n return tslib_1.__assign(tslib_1.__assign({}, params), {\n ext: {\n data: {\n min: min,\n max: max\n }\n }\n });\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var options = params.options,\n ext = params.ext;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n targetField = options.targetField,\n rangeField = options.rangeField,\n measureField = options.measureField,\n xField = options.xField;\n var extData = ext.data;\n return utils_1.flow(common_1.scale((_a = {}, _a[xField] = xAxis, _a[measureField] = yAxis, _a), (_b = {}, _b[measureField] = {\n min: extData === null || extData === void 0 ? void 0 : extData.min,\n max: extData === null || extData === void 0 ? void 0 : extData.max\n }, _b[targetField] = {\n sync: \"\" + measureField\n }, _b[rangeField] = {\n sync: \"\" + measureField\n }, _b)))(params);\n}\n\nexports.meta = meta;\n/**\n * axis 配置\n * @param params\n */\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n measureField = options.measureField,\n rangeField = options.rangeField,\n targetField = options.targetField;\n chart.axis(\"\" + rangeField, false);\n chart.axis(\"\" + targetField, false); // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(\"\" + xField, false);\n } else {\n chart.axis(\"\" + xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(\"\" + measureField, false);\n } else {\n chart.axis(\"\" + measureField, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend;\n chart.removeInteraction('legend-filter'); // @TODO 后续看是否内部自定义一个 legend\n\n chart.legend(legend); // 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend\n\n chart.legend('rKey', false);\n chart.legend('mKey', false);\n chart.legend('tKey', false);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n measureField = options.measureField,\n targetField = options.targetField,\n rangeField = options.rangeField;\n var _a = chart.geometries,\n rangeGeometry = _a[0],\n measureGeometry = _a[1],\n targetGeometry = _a[2];\n\n if (util_1.get(label, 'range')) {\n rangeGeometry.label(\"\" + rangeField, tslib_1.__assign({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, utils_1.transformLabel(label.range)));\n } else {\n rangeGeometry.label(false);\n }\n\n if (util_1.get(label, 'measure')) {\n measureGeometry.label(\"\" + measureField, tslib_1.__assign({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, utils_1.transformLabel(label.measure)));\n } else {\n measureGeometry.label(false);\n }\n\n if (util_1.get(label, 'target')) {\n targetGeometry.label(\"\" + targetField, tslib_1.__assign({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, utils_1.transformLabel(label.target)));\n } else {\n targetGeometry.label(false);\n }\n\n return params;\n}\n/**\n * 子弹图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n utils_1.flow(geometry, meta, axis, legend, common_1.theme, label, common_1.tooltip, common_1.interaction, common_1.animation)(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1088 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flow = flow;\n\n/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\nfunction flow() {\n var flows = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n flows[_i] = arguments[_i];\n }\n\n return function (param) {\n return flows.reduce(function (result, f) {\n return f(result);\n }, param);\n };\n}\n\n/***/ }),\n/* 1089 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pick = pick;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\n/**\n * 类似 lodash.pick 的方法\n * @param obj\n * @param keys\n */\nfunction pick(obj, keys) {\n var r = {};\n\n if (obj !== null && (0, _typeof2.default)(obj) === 'object') {\n keys.forEach(function (key) {\n var v = obj[key];\n\n if (v !== undefined) {\n r[key] = v;\n }\n });\n }\n\n return r;\n}\n\n/***/ }),\n/* 1090 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.template = template;\n\nvar _util = __webpack_require__(0);\n\n/**\n * 简单的模板引擎,使用方式如下(空格自动忽略):\n * template('hello, {name}', { name: 'AntV' }); // hello, AntV\n * @param string\n * @param options\n */\nfunction template(source, data) {\n return (0, _util.reduce)( // @ts-ignore\n data, function (r, v, k) {\n return r.replace(new RegExp(\"{\\\\s*\" + k + \"\\\\s*}\", 'g'), v);\n }, source);\n}\n\n/***/ }),\n/* 1091 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.invariant = invariant;\nexports.log = log;\nexports.LEVEL = void 0;\n\nvar _tslib = __webpack_require__(1);\n\n/**\n * Simplified from https://github.com/zertosh/invariant.\n */\nvar LEVEL;\nexports.LEVEL = LEVEL;\n\n(function (LEVEL) {\n LEVEL[\"ERROR\"] = \"error\";\n LEVEL[\"WARN\"] = \"warn\";\n LEVEL[\"INFO\"] = \"log\";\n})(LEVEL || (exports.LEVEL = LEVEL = {}));\n\nvar BRAND = 'AntV/G2Plot';\n/**\n * 获取错误消息\n * @param format\n * @param args\n */\n\nfunction getMessage(format) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var argIndex = 0;\n return BRAND + \": \" + format.replace(/%s/g, function () {\n return \"\" + args[argIndex++];\n });\n}\n/**\n * invariant error\n * @param condition\n * @param format\n * @param args\n */\n\n\nfunction invariant(condition, format) {\n var args = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n\n if (!condition) {\n var error = new Error(getMessage.apply(void 0, (0, _tslib.__spreadArrays)([format], args)));\n error.name = BRAND; // error.framesToPop = 1; // we don't care about invariant's own frame\n\n throw error;\n }\n}\n/**\n * 打印语句\n * @param level\n * @param condition\n * @param format\n * @param args\n */\n\n\nfunction log(level, condition, format) {\n var args = [];\n\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n\n if (!condition) {\n console[level](getMessage.apply(void 0, (0, _tslib.__spreadArrays)([format], args)));\n }\n}\n\n/***/ }),\n/* 1092 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getContainerSize = getContainerSize;\n\n/**\n * get the element's bounding size\n * @param ele dom element\n * @returns the element width and height\n */\nfunction getContainerSize(ele) {\n if (!ele) {\n return {\n width: 0,\n height: 0\n };\n }\n\n var style = getComputedStyle(ele);\n return {\n width: (ele.clientWidth || parseInt(style.width, 10)) - parseInt(style.paddingLeft, 10) - parseInt(style.paddingRight, 10),\n height: (ele.clientHeight || parseInt(style.height, 10)) - parseInt(style.paddingTop, 10) - parseInt(style.paddingBottom, 10)\n };\n}\n\n/***/ }),\n/* 1093 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findGeometry = findGeometry;\nexports.getAllElements = getAllElements;\n\nvar _util = __webpack_require__(0);\n\n/**\n * 在 Chart 中查找第一个指定 type 类型的 geometry\n * @param chart\n * @param type\n */\nfunction findGeometry(chart, type) {\n return chart.geometries.find(function (g) {\n return g.type === type;\n });\n}\n/**\n * 获取 Chart 的 所有 elements\n */\n\n\nfunction getAllElements(chart) {\n return (0, _util.reduce)(chart.geometries, function (r, geometry) {\n return r.concat(geometry.elements);\n }, []);\n}\n\n/***/ }),\n/* 1094 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformLabel = transformLabel;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\n/**\n * 兼容 v1 label formatter\n * @param labelOptions\n */\nfunction transformLabel(labelOptions) {\n if (!(0, _util.isType)(labelOptions, 'Object')) {\n return labelOptions;\n }\n\n var label = (0, _tslib.__assign)({}, labelOptions);\n\n if (label.formatter && !label.content) {\n label.content = label.formatter;\n }\n\n return label;\n}\n\n/***/ }),\n/* 1095 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.points2Path = points2Path;\nexports.catmullRom2bezier = catmullRom2bezier;\nexports.getSplinePath = getSplinePath;\nexports.smoothBezier = void 0;\n\nvar _matrixUtil = __webpack_require__(33);\n\nfunction points2Path(points, isInCircle) {\n var path = [];\n\n if (points.length) {\n path.push(['M', points[0].x, points[0].y]);\n\n for (var i = 1, length_1 = points.length; i < length_1; i += 1) {\n var item = points[i];\n path.push(['L', item.x, item.y]);\n }\n\n if (isInCircle) {\n path.push(['Z']);\n }\n }\n\n return path;\n}\n/**\n * @ignore\n * 计算光滑的贝塞尔曲线\n */\n\n\nvar smoothBezier = function smoothBezier(points, smooth, isLoop, constraint) {\n var cps = [];\n var prevPoint;\n var nextPoint;\n var hasConstraint = !!constraint;\n var min;\n var max;\n\n if (hasConstraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\n for (var i = 0, l = points.length; i < l; i++) {\n var point = points[i];\n min = _matrixUtil.vec2.min([0, 0], min, point);\n max = _matrixUtil.vec2.max([0, 0], max, point);\n }\n\n min = _matrixUtil.vec2.min([0, 0], min, constraint[0]);\n max = _matrixUtil.vec2.max([0, 0], max, constraint[1]);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n } else {\n if (i === 0 || i === len - 1) {\n cps.push(point);\n continue;\n } else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n var v = [0, 0];\n v = _matrixUtil.vec2.sub(v, nextPoint, prevPoint);\n v = _matrixUtil.vec2.scale(v, v, smooth);\n\n var d0 = _matrixUtil.vec2.distance(point, prevPoint);\n\n var d1 = _matrixUtil.vec2.distance(point, nextPoint);\n\n var sum = d0 + d1;\n\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n var v1 = _matrixUtil.vec2.scale([0, 0], v, -d0);\n\n var v2 = _matrixUtil.vec2.scale([0, 0], v, d1);\n\n var cp0 = _matrixUtil.vec2.add([0, 0], point, v1);\n\n var cp1 = _matrixUtil.vec2.add([0, 0], point, v2);\n\n if (hasConstraint) {\n cp0 = _matrixUtil.vec2.max([0, 0], cp0, min);\n cp0 = _matrixUtil.vec2.min([0, 0], cp0, max);\n cp1 = _matrixUtil.vec2.max([0, 0], cp1, min);\n cp1 = _matrixUtil.vec2.min([0, 0], cp1, max);\n }\n\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n};\n/**\n * @ignore\n * 贝塞尔曲线\n */\n\n\nexports.smoothBezier = smoothBezier;\n\nfunction catmullRom2bezier(crp, z, constraint) {\n var isLoop = !!z;\n var pointList = [];\n\n for (var i = 0, l = crp.length; i < l; i += 2) {\n pointList.push([crp[i], crp[i + 1]]);\n }\n\n var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n var len = pointList.length;\n var d1 = [];\n var cp1;\n var cp2;\n var p;\n\n for (var i = 0; i < len - 1; i++) {\n cp1 = controlPointList[i * 2];\n cp2 = controlPointList[i * 2 + 1];\n p = pointList[i + 1];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n\n if (isLoop) {\n cp1 = controlPointList[len];\n cp2 = controlPointList[len + 1];\n p = pointList[0];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n\n return d1;\n}\n/**\n * @ignore\n * 根据关键点获取限定了范围的平滑线\n */\n\n\nfunction getSplinePath(points, isInCircle, constaint) {\n var data = [];\n var first = points[0];\n var prePoint = null;\n\n if (points.length <= 2) {\n // 两点以内直接绘制成路径\n return points2Path(points, isInCircle);\n }\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (!prePoint || !(prePoint.x === point.x && prePoint.y === point.y)) {\n data.push(point.x);\n data.push(point.y);\n prePoint = point;\n }\n }\n\n var constraint = constaint || [// 范围\n [0, 0], [1, 1]];\n var splinePath = catmullRom2bezier(data, isInCircle, constraint);\n splinePath.unshift(['M', first.x, first.y]);\n return splinePath;\n}\n\n/***/ }),\n/* 1096 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.deepAssign = void 0;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar MAX_MIX_LEVEL = 5; // 最大比对层级\n\nvar toString = {}.toString; // 类型检测\n\nvar isType = function isType(value, type) {\n return toString.call(value) === '[object ' + type + ']';\n};\n\nvar isArray = function isArray(value) {\n return isType(value, 'Array');\n};\n\nvar isObjectLike = function isObjectLike(value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n */\n return (0, _typeof2.default)(value) === 'object' && value !== null;\n};\n\nvar isPlainObject = function isPlainObject(value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n};\n/***\n * @param {any} dist\n * @param {any} src\n * @param {number} level 当前层级\n * @param {number} maxLevel 最大层级\n */\n\n\nvar deep = function deep(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n\n for (var key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n var value = src[key];\n\n if (!value) {\n // null 、 undefined 等情况直接赋值\n dist[key] = value;\n } else {\n if (isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n\n if (level < maxLevel) {\n deep(dist[key], value, level + 1, maxLevel);\n } else {\n // 层级过深直接赋值,性能问题\n dist[key] = src[key];\n }\n } else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else {\n dist[key] = value;\n }\n }\n }\n }\n};\n/**\n * deepAssign 功能类似 deepMix\n * 不同点在于 deepAssign 会将 null undefined 等类型直接覆盖给 source\n * 详细参考: __tests__/unit/utils/deep-assign-spec.ts\n */\n\n\nvar deepAssign = function deepAssign(rst) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n for (var i = 0; i < args.length; i += 1) {\n deep(rst, args[i]);\n }\n\n return rst;\n};\n\nexports.deepAssign = deepAssign;\n\n/***/ }),\n/* 1097 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.kebabCase = kebabCase;\n\n/**\n * @desc simple kebabCase like lodash\n *\n * kebabCase('fooBar'); => 'foo-bar'\n */\nfunction kebabCase(word) {\n if (!word) {\n return word;\n }\n\n var result = word.match(/(([A-Z]{0,1}[a-z]*[^A-Z])|([A-Z]{1}))/g);\n return result.map(function (s) {\n return s.toLowerCase();\n }).join('-');\n}\n\n/***/ }),\n/* 1098 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.measureTextWidth = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _context = __webpack_require__(1099);\n\n/**\n * 计算文本在画布中的宽度\n * @param text 文本\n * @param font 字体\n */\nvar measureTextWidth = (0, _util.memoize)(function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n var fontSize = font.fontSize,\n _a = font.fontFamily,\n fontFamily = _a === void 0 ? 'sans-serif' : _a,\n fontWeight = font.fontWeight,\n fontStyle = font.fontStyle,\n fontVariant = font.fontVariant;\n var ctx = (0, _context.getCanvasContext)(); // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font\n\n ctx.font = [fontStyle, fontWeight, fontVariant, fontSize + \"px\", fontFamily].join(' ');\n var metrics = ctx.measureText((0, _util.isString)(text) ? text : '');\n return metrics.width;\n}, function (text, font) {\n if (font === void 0) {\n font = {};\n }\n\n return (0, _tslib.__spreadArrays)([text], (0, _util.values)(font)).join('');\n});\nexports.measureTextWidth = measureTextWidth;\n\n/***/ }),\n/* 1099 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getCanvasContext = getCanvasContext;\nvar ctx;\n/**\n * 获取 canvas context\n */\n\nfunction getCanvasContext() {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n\n return ctx;\n}\n\n/***/ }),\n/* 1100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _common = __webpack_require__(1101);\n\nObject.keys(_common).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _common[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _common[key];\n }\n });\n});\n\nvar _tooltip = __webpack_require__(1102);\n\nObject.keys(_tooltip).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _tooltip[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _tooltip[key];\n }\n });\n});\n\nvar _state = __webpack_require__(1103);\n\nObject.keys(_state).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _state[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _state[key];\n }\n });\n});\n\nvar _attr = __webpack_require__(1104);\n\nObject.keys(_attr).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _attr[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _attr[key];\n }\n });\n});\n\nvar _statistic = __webpack_require__(1105);\n\nObject.keys(_statistic).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _statistic[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _statistic[key];\n }\n });\n});\n\nvar _meta = __webpack_require__(1106);\n\nObject.keys(_meta).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _meta[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _meta[key];\n }\n });\n});\n\n/***/ }),\n/* 1101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 1107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Line = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(517);\n\n__webpack_require__(1113);\n\nvar Line =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Line, _super);\n\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'line';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Line.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData(data);\n };\n /**\n * 获取 折线图 默认配置\n */\n\n\n Line.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n tooltip: {\n shared: true,\n showMarkers: true,\n showCrosshairs: true,\n crosshairs: {\n type: 'x'\n }\n },\n legend: {\n position: 'top-left'\n },\n isStack: false\n });\n };\n /**\n * 获取 折线图 的适配器\n */\n\n\n Line.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Line;\n}(_plot.Plot);\n\nexports.Line = Line;\n\n/***/ }),\n/* 1108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.area = area;\n\nvar _tslib = __webpack_require__(1);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _utils = __webpack_require__(12);\n\nvar _base = __webpack_require__(78);\n\n/**\n * area geometry 的配置处理\n * @param params\n */\nfunction area(params) {\n var options = params.options;\n var area = options.area,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n smooth = options.smooth,\n tooltip = options.tooltip;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 如果存在才处理\n\n\n return area ? (0, _base.geometry)((0, _utils.deepAssign)({}, params, {\n options: {\n type: 'area',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: (0, _tslib.__assign)({\n shape: smooth ? 'smooth' : 'area',\n tooltip: formatter\n }, area)\n }\n })) : params;\n}\n\n/***/ }),\n/* 1109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.line = line;\n\nvar _util = __webpack_require__(0);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _utils = __webpack_require__(12);\n\nvar _base = __webpack_require__(78);\n\n/**\n * line 辅助点的配置处理\n * @param params\n */\nfunction line(params) {\n var options = params.options;\n var line = options.line,\n stepType = options.stepType,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n smooth = options.smooth,\n connectNulls = options.connectNulls,\n tooltip = options.tooltip;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 如果存在才处理\n\n\n return line ? (0, _base.geometry)((0, _utils.deepAssign)({}, params, {\n options: {\n type: 'line',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: (0, _util.deepMix)({\n shape: stepType || (smooth ? 'smooth' : 'line'),\n tooltip: formatter\n }, line),\n args: {\n connectNulls: connectNulls\n }\n }\n })) : params;\n}\n\n/***/ }),\n/* 1110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.point = point;\n\nvar _tslib = __webpack_require__(1);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _utils = __webpack_require__(12);\n\nvar _base = __webpack_require__(78);\n\n/**\n * point 辅助点的配置处理\n * @param params\n */\nfunction point(params) {\n var options = params.options;\n var point = options.point,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n sizeField = options.sizeField,\n shapeField = options.shapeField,\n tooltip = options.tooltip;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, seriesField, sizeField, shapeField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n return point ? (0, _base.geometry)((0, _utils.deepAssign)({}, params, {\n options: {\n type: 'point',\n colorField: seriesField,\n shapeField: shapeField,\n tooltipFields: fields,\n mapping: (0, _tslib.__assign)({\n tooltip: formatter\n }, point)\n }\n })) : params;\n}\n\n/***/ }),\n/* 1111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interval = interval;\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _base = __webpack_require__(78);\n\n/**\n * 柱形图其他的 adaptor\n * @param params\n */\nfunction otherAdaptor(params) {\n var chart = params.chart,\n options = params.options,\n ext = params.ext;\n var seriesField = options.seriesField,\n isGroup = options.isGroup,\n isStack = options.isStack,\n marginRatio = options.marginRatio,\n widthRatio = options.widthRatio,\n groupField = options.groupField,\n theme = options.theme;\n /**\n * adjust\n */\n\n var adjust = [];\n\n if (seriesField) {\n // group\n if (isGroup) {\n adjust.push({\n type: 'dodge',\n dodgeBy: groupField || seriesField,\n marginRatio: marginRatio\n });\n } // stack\n\n\n if (isStack) {\n adjust.push({\n type: 'stack',\n marginRatio: marginRatio\n });\n }\n }\n\n if (adjust.length && (ext === null || ext === void 0 ? void 0 : ext.geometry)) {\n var g = ext === null || ext === void 0 ? void 0 : ext.geometry;\n g.adjust(adjust);\n } // widthRatio\n\n\n if (!(0, _util.isNil)(widthRatio)) {\n chart.theme((0, _utils.deepAssign)({}, (0, _util.isObject)(theme) ? theme : (0, _g.getTheme)(theme), {\n // columWidthRatio 配置覆盖 theme 中的配置\n columnWidthRatio: widthRatio\n }));\n }\n\n return params;\n}\n\nfunction interval(params) {\n var options = params.options;\n var xField = options.xField,\n yField = options.yField,\n interval = options.interval,\n seriesField = options.seriesField,\n tooltip = options.tooltip,\n minColumnWidth = options.minColumnWidth,\n maxColumnWidth = options.maxColumnWidth,\n columnBackground = options.columnBackground;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter; // 保障一定要存在 interval 映射\n\n\n var ext = (interval ? (0, _base.geometry)((0, _utils.deepAssign)({}, params, {\n options: {\n type: 'interval',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: (0, _tslib.__assign)({\n tooltip: formatter\n }, interval),\n args: {\n minColumnWidth: minColumnWidth,\n maxColumnWidth: maxColumnWidth,\n background: columnBackground\n }\n }\n })) : params).ext;\n return otherAdaptor((0, _tslib.__assign)((0, _tslib.__assign)({}, params), {\n ext: ext\n }));\n}\n\n/***/ }),\n/* 1112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.edge = edge;\n\nvar _tslib = __webpack_require__(1);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _utils = __webpack_require__(12);\n\nvar _base = __webpack_require__(78);\n\n/**\n * edge 的配置处理\n * @param params\n */\nfunction edge(params) {\n var options = params.options;\n var edge = options.edge,\n xField = options.xField,\n yField = options.yField,\n seriesField = options.seriesField,\n tooltip = options.tooltip;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, seriesField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n return edge ? (0, _base.geometry)((0, _utils.deepAssign)({}, params, {\n options: {\n type: 'edge',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: (0, _tslib.__assign)({\n tooltip: formatter\n }, edge)\n }\n })) : params;\n}\n\n/***/ }),\n/* 1113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _g = __webpack_require__(17);\n\nvar _markerActive = __webpack_require__(1114);\n\n(0, _g.registerAction)('marker-active', _markerActive.MarkerActiveAction);\n(0, _g.registerInteraction)('marker-active', {\n start: [{\n trigger: 'tooltip:show',\n action: 'marker-active:active'\n }]\n});\n\n/***/ }),\n/* 1114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MarkerActiveAction = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _g = __webpack_require__(17);\n\nvar MarkerActiveAction =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(MarkerActiveAction, _super);\n\n function MarkerActiveAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n MarkerActiveAction.prototype.active = function () {\n var view = this.getView();\n var evt = this.context.event;\n\n if (evt.data) {\n // items: 数组对象,当前 tooltip 显示的每条内容\n var items_1 = evt.data.items;\n var points = view.geometries.filter(function (geom) {\n return geom.type === 'point';\n });\n (0, _util.each)(points, function (point) {\n (0, _util.each)(point.elements, function (element) {\n var active = (0, _util.findIndex)(items_1, function (item) {\n return item.data === element.data;\n }) !== -1; // @ts-ignore\n\n element.setState('active', active);\n });\n });\n }\n };\n\n MarkerActiveAction.prototype.getView = function () {\n return this.context.view;\n };\n\n return MarkerActiveAction;\n}(_g.InteractionAction);\n\nexports.MarkerActiveAction = MarkerActiveAction;\n\n/***/ }),\n/* 1115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Area = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _percent = __webpack_require__(122);\n\nvar _adaptor = __webpack_require__(1116);\n\nvar Area =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Area, _super);\n\n function Area() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'area';\n return _this;\n }\n /**\n * 获取 折线图 默认配置\n */\n\n\n Area.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n tooltip: {\n shared: true,\n showMarkers: true,\n showCrosshairs: true,\n crosshairs: {\n type: 'x'\n }\n },\n isStack: true,\n // 默认开启\n line: {},\n legend: {\n position: 'top-left'\n }\n });\n };\n /**\n * @override\n * @param data\n */\n\n\n Area.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var _a = this.options,\n isPercent = _a.isPercent,\n xField = _a.xField,\n yField = _a.yField;\n this.chart.changeData((0, _percent.getDataWhetherPecentage)(data, yField, xField, yField, isPercent));\n };\n /**\n * 获取 面积图 的适配器\n */\n\n\n Area.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Area;\n}(_plot.Plot);\n\nexports.Area = Area;\n\n/***/ }),\n/* 1116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _percent = __webpack_require__(122);\n\nvar _adaptor = __webpack_require__(517);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n areaStyle = options.areaStyle,\n color = options.color,\n pointMapping = options.point,\n lineMapping = options.line,\n isPercent = options.isPercent,\n xField = options.xField,\n yField = options.yField,\n tooltip = options.tooltip,\n seriesField = options.seriesField;\n var chartData = (0, _percent.getDataWhetherPecentage)(data, yField, xField, yField, isPercent);\n chart.data(chartData); // 百分比堆积图,默认会给一个 % 格式化逻辑, 用户可自定义\n\n var tooltipOptions = isPercent ? (0, _tslib.__assign)({\n formatter: function formatter(datum) {\n return {\n name: datum[seriesField] || datum[xField],\n value: (Number(datum[yField]) * 100).toFixed(2) + '%'\n };\n }\n }, tooltip) : tooltip;\n var primary = (0, _utils.deepAssign)({}, params, {\n options: {\n area: {\n color: color,\n style: areaStyle\n },\n // 颜色保持一致,因为如果颜色不一致,会导致 tooltip 中元素重复。\n // 如果存在,才设置,否则为空\n line: lineMapping && (0, _tslib.__assign)({\n color: color\n }, lineMapping),\n point: pointMapping && (0, _tslib.__assign)({\n color: color\n }, pointMapping),\n tooltip: tooltipOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined\n }\n });\n var second = (0, _utils.deepAssign)({}, primary, {\n options: {\n tooltip: false\n }\n }); // area geometry 处理\n\n (0, _geometries.area)(primary);\n (0, _geometries.line)(second);\n (0, _geometries.point)(second);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var areaGeometry = (0, _utils.findGeometry)(chart, 'area'); // label 为 false, 空 则不显示 label\n\n if (!label) {\n areaGeometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n areaGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: (0, _tslib.__assign)({\n layout: [{\n type: 'limit-in-plot'\n }, {\n type: 'path-adjust-position'\n }, {\n type: 'point-adjust-position'\n }, {\n type: 'limit-in-plot',\n cfg: {\n action: 'hide'\n }\n }]\n }, (0, _utils.transformLabel)(cfg))\n });\n }\n\n return params;\n}\n/**\n * 处理 adjust\n * @param params\n */\n\n\nfunction adjust(params) {\n var chart = params.chart,\n options = params.options;\n var isStack = options.isStack,\n isPercent = options.isPercent;\n\n if (isPercent || isStack) {\n (0, _util.each)(chart.geometries, function (g) {\n g.adjust('stack');\n });\n }\n\n return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, _adaptor.meta, adjust, _common.theme, _adaptor.axis, _adaptor.legend, _common.tooltip, label, _common.slider, (0, _common.annotation)(), _common.interaction, _common.animation, _common.limitInPlot)(params);\n}\n\n/***/ }),\n/* 1117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Column = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _percent = __webpack_require__(122);\n\nvar _adaptor = __webpack_require__(519);\n\n/**\n * 柱形图\n */\nvar Column =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Column, _super);\n\n function Column() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'column';\n return _this;\n }\n /**\n * @override\n */\n\n\n Column.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var _a = this.options,\n yField = _a.yField,\n xField = _a.xField,\n isPercent = _a.isPercent;\n this.chart.changeData((0, _percent.getDataWhetherPecentage)(data, yField, xField, yField, isPercent));\n };\n /**\n * 获取 柱形图 默认配置\n */\n\n\n Column.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n columnWidthRatio: 0.6,\n marginRatio: 1 / 32,\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20\n },\n interactions: [{\n type: 'active-region'\n }]\n });\n };\n /**\n * 获取 柱形图 的适配器\n */\n\n\n Column.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Column;\n}(_plot.Plot);\n\nexports.Column = Column;\n\n/***/ }),\n/* 1118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.conversionTag = conversionTag;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _g = __webpack_require__(17);\n\nvar _utils = __webpack_require__(12);\n\nvar _conversion = __webpack_require__(520);\n\nfunction getConversionTagOptionsWithDefaults(options, horizontal) {\n return (0, _utils.deepAssign)({\n size: horizontal ? 32 : 80,\n spacing: horizontal ? 8 : 12,\n offset: horizontal ? 32 : 0,\n arrow: options.arrow !== false && {\n headSize: 12,\n style: {\n fill: 'rgba(0, 0, 0, 0.05)'\n }\n },\n text: options.text !== false && {\n style: {\n fontSize: 12,\n fill: 'rgba(0, 0, 0, 0.85)',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n formatter: _conversion.conversionTagFormatter\n }\n }, options);\n}\n\nfunction parsePoints(coordinate, element) {\n // @ts-ignore\n return (0, _util.map)(element.getModel().points, function (point) {\n return coordinate.convertPoint(point);\n });\n}\n\nfunction renderArrowTag(config, elemPrev, elemNext) {\n var view = config.view,\n geometry = config.geometry,\n group = config.group,\n options = config.options,\n horizontal = config.horizontal;\n var offset = options.offset,\n size = options.size,\n arrow = options.arrow;\n var coordinate = view.getCoordinate();\n var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n var totalHeight = pointNext.y - pointPrev.y;\n var totalWidth = pointNext.x - pointPrev.x;\n\n if (typeof arrow === 'boolean') {\n return;\n }\n\n var headSize = arrow.headSize;\n var spacing = options.spacing;\n var points;\n\n if (horizontal) {\n if ((totalWidth - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalWidth - headSize) / 2);\n points = [[pointPrev.x + spacing, pointPrev.y - offset], [pointPrev.x + spacing, pointPrev.y - offset - size], [pointNext.x - spacing, pointNext.y - offset - size / 2]];\n } else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [[pointPrev.x + spacing, pointPrev.y - offset], [pointPrev.x + spacing, pointPrev.y - offset - size], [pointNext.x - spacing - headSize, pointNext.y - offset - size], [pointNext.x - spacing, pointNext.y - offset - size / 2], [pointNext.x - spacing - headSize, pointNext.y - offset]];\n }\n } else {\n if ((totalHeight - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalHeight - headSize) / 2);\n points = [[pointPrev.x + offset, pointPrev.y + spacing], [pointPrev.x + offset + size, pointPrev.y + spacing], [pointNext.x + offset + size / 2, pointNext.y - spacing]];\n } else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [[pointPrev.x + offset, pointPrev.y + spacing], [pointPrev.x + offset + size, pointPrev.y + spacing], [pointNext.x + offset + size, pointNext.y - spacing - headSize], [pointNext.x + offset + size / 2, pointNext.y - spacing], [pointNext.x + offset, pointNext.y - spacing - headSize]];\n }\n }\n\n group.addShape('polygon', {\n id: view.id + \"-conversion-tag-arrow-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-arrow',\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, arrow.style || {}), {\n points: points\n })\n });\n}\n\nfunction renderTextTag(config, elemPrev, elemNext) {\n var _a, _b, _c;\n\n var view = config.view,\n geometry = config.geometry,\n group = config.group,\n options = config.options,\n field = config.field,\n horizontal = config.horizontal;\n var offset = options.offset,\n size = options.size;\n\n if (typeof options.text === 'boolean') {\n return;\n }\n\n var coordinate = view.getCoordinate();\n var text = ((_a = options.text) === null || _a === void 0 ? void 0 : _a.formatter) && ((_b = options.text) === null || _b === void 0 ? void 0 : _b.formatter(elemPrev.getData()[field], elemNext.getData()[field]));\n var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n var textShape = group.addShape('text', {\n id: view.id + \"-conversion-tag-text-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-text',\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, ((_c = options.text) === null || _c === void 0 ? void 0 : _c.style) || {}), {\n text: text,\n x: horizontal ? (pointPrev.x + pointNext.x) / 2 : pointPrev.x + offset + size / 2,\n y: horizontal ? pointPrev.y - offset - size / 2 : (pointPrev.y + pointNext.y) / 2\n })\n });\n\n if (horizontal) {\n var totalWidth = pointNext.x - pointPrev.x;\n var textWidth = textShape.getBBox().width;\n\n if (textWidth > totalWidth) {\n var cWidth = textWidth / text.length;\n var cEnd = Math.max(1, Math.ceil(totalWidth / cWidth) - 1);\n var textAdjusted = text.slice(0, cEnd) + \"...\";\n textShape.attr('text', textAdjusted);\n }\n }\n}\n\nfunction renderTag(options, elemPrev, elemNext) {\n renderArrowTag(options, elemPrev, elemNext);\n renderTextTag(options, elemPrev, elemNext);\n}\n/**\n * 返回支持转化率组件的 adaptor,适用于柱形图/条形图\n * @param field 用户转化率计算的字段\n * @param horizontal 是否水平方向的转化率\n * @param disabled 是否禁用\n */\n\n\nfunction conversionTag(field, horizontal, disabled) {\n if (horizontal === void 0) {\n horizontal = true;\n }\n\n if (disabled === void 0) {\n disabled = false;\n }\n\n return function (params) {\n var options = params.options,\n chart = params.chart;\n var conversionTag = options.conversionTag,\n theme = options.theme;\n\n if (conversionTag && !disabled) {\n // 有转化率组件时,柱子宽度占比自动为 1/3\n chart.theme((0, _utils.deepAssign)({}, (0, _util.isObject)(theme) ? theme : (0, _g.getTheme)(theme), {\n columnWidthRatio: 1 / 3\n })); // 使用 shape annotation 绘制转化率组件\n\n chart.annotation().shape({\n render: function render(container, view) {\n var group = container.addGroup({\n id: chart.id + \"-conversion-tag-group\",\n name: 'conversion-tag-group'\n });\n var interval = (0, _util.find)(chart.geometries, function (geom) {\n return geom.type === 'interval';\n });\n var config = {\n view: view,\n geometry: interval,\n group: group,\n field: field,\n horizontal: horizontal,\n options: getConversionTagOptionsWithDefaults(conversionTag, horizontal)\n };\n var elements = horizontal ? interval.elements : interval.elements.slice().reverse();\n (0, _util.each)(elements, function (elem, idx) {\n if (idx > 0) {\n renderTag(config, elements[idx - 1], elem);\n }\n });\n }\n });\n }\n\n return params;\n };\n}\n\n/***/ }),\n/* 1119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.connectedArea = connectedArea;\n\nvar _g = __webpack_require__(17);\n\nvar INTERACTION_MAP = {\n hover: '__interval-connected-area-hover__',\n click: '__interval-connected-area-click__'\n};\n/** hover 触发的连通区域交互 */\n\n(0, _g.registerInteraction)(INTERACTION_MAP.hover, {\n start: [{\n trigger: \"interval:mouseenter\",\n action: ['element-highlight-by-color:highlight', 'element-link-by-color:link']\n }],\n end: [{\n trigger: 'interval:mouseleave',\n action: ['element-highlight-by-color:reset', 'element-link-by-color:unlink']\n }]\n});\n/** click 触发的联通区域交互 */\n\n(0, _g.registerInteraction)(INTERACTION_MAP.click, {\n start: [{\n trigger: \"interval:click\",\n action: ['element-highlight-by-color:clear', 'element-highlight-by-color:highlight', 'element-link-by-color:clear', 'element-link-by-color:unlink', 'element-link-by-color:link']\n }],\n end: [{\n trigger: 'document:mousedown',\n action: ['element-highlight-by-color:clear', 'element-link-by-color:clear']\n }]\n});\n/**\n * 返回支持联通区域组件交互的 adaptor,适用于堆叠柱形图/堆叠条形图\n * @param disable\n */\n\nfunction connectedArea(disable) {\n if (disable === void 0) {\n disable = false;\n }\n\n return function (params) {\n var chart = params.chart,\n options = params.options;\n var connectedArea = options.connectedArea;\n\n var clear = function clear() {\n chart.removeInteraction(INTERACTION_MAP.hover);\n chart.removeInteraction(INTERACTION_MAP.click);\n };\n\n if (!disable && connectedArea) {\n var trigger = connectedArea.trigger || 'hover';\n clear();\n chart.interaction(INTERACTION_MAP[trigger]);\n } else {\n clear();\n }\n\n return params;\n };\n}\n\n/***/ }),\n/* 1120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Bar = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _percent = __webpack_require__(122);\n\nvar _adaptor = __webpack_require__(1121);\n\n/**\n * 条形图\n */\nvar Bar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Bar, _super);\n\n function Bar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'bar';\n return _this;\n }\n /**\n * @override\n */\n\n\n Bar.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var _a = this.options,\n xField = _a.xField,\n yField = _a.yField,\n isPercent = _a.isPercent;\n this.chart.changeData((0, _percent.getDataWhetherPecentage)(data, xField, yField, xField, isPercent));\n };\n /**\n * 获取 条形图 默认配置\n */\n\n\n Bar.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n barWidthRatio: 0.6,\n marginRatio: 1 / 32,\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20\n },\n interactions: [{\n type: 'active-region'\n }]\n });\n };\n /**\n * 获取 条形图 的适配器\n */\n\n\n Bar.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Bar;\n}(_plot.Plot);\n\nexports.Bar = Bar;\n\n/***/ }),\n/* 1121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _adaptor = __webpack_require__(519);\n\n/**\n * 柱形图适配器\n * @param params\n */\nfunction adaptor(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n barStyle = options.barStyle,\n barWidthRatio = options.barWidthRatio,\n label = options.label,\n data = options.data,\n seriesField = options.seriesField,\n isStack = options.isStack,\n minBarWidth = options.minBarWidth,\n maxBarWidth = options.maxBarWidth; // label of bar charts default position is left, if plot has label\n\n if (label && !label.position) {\n label.position = 'left'; // 配置默认的 label layout: 如果用户没有指定 layout 和 position, 则自动配置 layout\n\n if (!label.layout) {\n label.layout = [{\n type: 'interval-adjust-position'\n }, {\n type: 'interval-hide-overlap'\n }, {\n type: 'adjust-color'\n }, {\n type: 'limit-in-plot',\n cfg: {\n action: 'hide'\n }\n }];\n }\n } // 默认 legend 位置\n\n\n var legend = options.legend;\n\n if (seriesField) {\n if (legend !== false) {\n legend = (0, _tslib.__assign)({\n position: isStack ? 'top-left' : 'right-top',\n reversed: isStack ? false : true\n }, legend || {});\n }\n } else {\n legend = false;\n } // @ts-ignore 直接改值\n\n\n params.options.legend = legend; // 默认 tooltip 配置\n\n var tooltip = options.tooltip;\n\n if (seriesField) {\n if (tooltip !== false) {\n tooltip = (0, _tslib.__assign)({\n reversed: isStack ? false : true\n }, tooltip || {});\n }\n } // @ts-ignore 直接改值\n\n\n params.options.tooltip = tooltip; // transpose column to bar\n\n chart.coordinate().transpose();\n return (0, _adaptor.adaptor)({\n chart: chart,\n options: (0, _tslib.__assign)((0, _tslib.__assign)({}, options), {\n label: label,\n // switch xField and yField\n xField: yField,\n yField: xField,\n xAxis: yAxis,\n yAxis: xAxis,\n // rename attrs as column\n columnStyle: barStyle,\n columnWidthRatio: barWidthRatio,\n minColumnWidth: minBarWidth,\n maxColumnWidth: maxBarWidth,\n columnBackground: options.barBackground,\n // bar 调整数据顺序\n data: data ? data.slice().reverse() : data\n })\n }, true);\n}\n\n/***/ }),\n/* 1122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Pie = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1123);\n\nvar _contants = __webpack_require__(521);\n\nvar _utils = __webpack_require__(522);\n\n__webpack_require__(1124);\n\nvar Pie =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Pie, _super);\n\n function Pie() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'pie';\n return _this;\n }\n /**\n * 获取 饼图 默认配置项\n * @static 供外部使用\n */\n\n\n Pie.getDefaultOptions = function () {\n return _contants.DEFAULT_OPTIONS;\n };\n /**\n * 更新数据\n * @param data\n */\n\n\n Pie.prototype.changeData = function (data) {\n var prevOptions = this.options;\n var angleField = this.options.angleField;\n var prevData = (0, _utils.processIllegalData)(prevOptions.data, angleField);\n var curData = (0, _utils.processIllegalData)(data, angleField); // 如果上一次或当前数据全为 0,则重新渲染\n\n if ((0, _utils.isAllZero)(prevData, angleField) || (0, _utils.isAllZero)(curData, angleField)) {\n this.update({\n data: data\n });\n } else {\n this.updateOption({\n data: data\n });\n this.chart.data(curData); // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n\n (0, _adaptor.pieAnnotation)({\n chart: this.chart,\n options: this.options\n });\n this.chart.render(true);\n }\n };\n /**\n * 获取 饼图 默认配置项, 供 base 获取\n */\n\n\n Pie.prototype.getDefaultOptions = function () {\n return Pie.getDefaultOptions();\n };\n /**\n * 获取 饼图 的适配器\n */\n\n\n Pie.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Pie;\n}(_plot.Plot);\n\nexports.Pie = Pie;\n\n/***/ }),\n/* 1123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pieAnnotation = pieAnnotation;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils = __webpack_require__(12);\n\nvar _contants = __webpack_require__(521);\n\nvar _utils2 = __webpack_require__(522);\n\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n angleField = options.angleField,\n colorField = options.colorField,\n color = options.color,\n pieStyle = options.pieStyle; // 处理不合法的数据\n\n var processData = (0, _utils2.processIllegalData)(data, angleField);\n\n if ((0, _utils2.isAllZero)(processData, angleField)) {\n // 数据全 0 处理,调整 position 映射\n var percentageField_1 = '$$percentage$$';\n processData = processData.map(function (d) {\n var _a;\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, d), (_a = {}, _a[percentageField_1] = 1 / processData.length, _a));\n });\n chart.data(processData);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: '1',\n yField: percentageField_1,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle\n },\n args: {\n zIndexReversed: true\n }\n }\n });\n (0, _geometries.interval)(p); // all zero 额外处理\n\n chart.geometries[0].tooltip(colorField + \"*\" + angleField);\n } else {\n chart.data(processData);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: '1',\n yField: angleField,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle\n },\n args: {\n zIndexReversed: true\n }\n }\n });\n (0, _geometries.interval)(p);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var meta = options.meta,\n colorField = options.colorField; // meta 直接是 scale 的信息\n\n var scales = (0, _utils.deepAssign)({}, meta);\n chart.scale(scales, (_a = {}, _a[colorField] = {\n type: 'cat'\n }, _a));\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius,\n innerRadius = options.innerRadius,\n startAngle = options.startAngle,\n endAngle = options.endAngle;\n chart.coordinate({\n type: 'theta',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n }\n });\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n colorField = options.colorField,\n angleField = options.angleField;\n var geometry = chart.geometries[0]; // label 为 false, 空 则不显示 label\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n var labelCfg = (0, _utils.transformLabel)(cfg); // ① 提供模板字符串的 label content 配置\n\n if (labelCfg.content) {\n var content_1 = labelCfg.content;\n\n labelCfg.content = function (data, dataum, index) {\n var name = data[colorField];\n var value = data[angleField]; // dymatic get scale, scale is ready this time\n\n var angleScale = chart.getScaleByField(angleField);\n var percent = angleScale === null || angleScale === void 0 ? void 0 : angleScale.scale(value);\n return (0, _util.isFunction)(content_1) ? // append pecent (number) to data, users can get origin data from `dataum._origin`\n content_1((0, _tslib.__assign)((0, _tslib.__assign)({}, data), {\n percent: percent\n }), dataum, index) : (0, _util.isString)(content_1) ? (0, _utils.template)(content_1, {\n value: value,\n name: name,\n // percentage (string), default keep 2\n percentage: (0, _util.isNumber)(percent) && !(0, _util.isNil)(value) ? (percent * 100).toFixed(2) + \"%\" : null\n }) : content_1;\n };\n }\n\n var LABEL_LAYOUT_TYPE_MAP = {\n inner: '',\n outer: 'pie-outer',\n spider: 'pie-spider'\n };\n var labelLayoutType = labelCfg.type ? LABEL_LAYOUT_TYPE_MAP[labelCfg.type] : 'pie-outer';\n var labelLayoutCfg = labelCfg.layout ? !(0, _util.isArray)(labelCfg.layout) ? [labelCfg.layout] : labelCfg.layout : [];\n labelCfg.layout = (labelLayoutType ? [{\n type: labelLayoutType\n }] : []).concat(labelLayoutCfg);\n geometry.label({\n // fix: could not create scale, when field is undefined(attributes 中的 fields 定义都会被用来创建 scale)\n fields: colorField ? [angleField, colorField] : [angleField],\n callback: callback,\n cfg: (0, _tslib.__assign)((0, _tslib.__assign)({}, labelCfg), {\n offset: (0, _utils2.adaptOffset)(labelCfg.type, labelCfg.offset),\n type: 'pie'\n })\n });\n }\n\n return params;\n}\n/**\n * statistic 中心文本配置\n * @param params\n */\n\n\nfunction pieAnnotation(params) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n statistic = options.statistic,\n angleField = options.angleField,\n colorField = options.colorField,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true); // 先进行其他 annotations,再去渲染统计文本\n\n (0, _utils.flow)((0, _common.annotation)())(params);\n /** 中心文本 指标卡 */\n\n if (innerRadius && statistic) {\n var _a = (0, _utils.deepAssign)({}, _contants.DEFAULT_OPTIONS.statistic, statistic),\n title = _a.title,\n content = _a.content;\n\n if (title !== false) {\n title = (0, _utils.deepAssign)({}, {\n formatter: function formatter(datum) {\n return datum ? datum[colorField] : '总计';\n }\n }, title);\n }\n\n if (content !== false) {\n content = (0, _utils.deepAssign)({}, {\n formatter: function formatter(datum, data) {\n var metaFormatter = (0, _util.get)(meta, [angleField, 'formatter']);\n var dataValue = datum ? datum[angleField] : (0, _utils2.getTotalValue)(data, angleField);\n return metaFormatter ? metaFormatter(dataValue) : dataValue;\n }\n }, content);\n }\n\n (0, _utils.renderStatistic)(chart, {\n statistic: {\n title: title,\n content: content\n },\n plotType: 'pie'\n });\n }\n\n return params;\n}\n/**\n * 饼图 tooltip 配置适配,强制 tooltip.shared 为 false\n * @param params\n */\n\n\nfunction adaptorTooltipOptions(params) {\n return (0, _util.get)(params, ['options', 'tooltip']) !== false ? (0, _utils.deepAssign)({}, params, {\n options: {\n tooltip: {\n shared: false\n }\n }\n }) : params;\n}\n/**\n * 饼图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, meta, _common.theme, coordinate, _common.legend, function (args) {\n return (0, _common.tooltip)(adaptorTooltipOptions(args));\n }, label, _common.state,\n /** 指标卡中心文本 放在下层 */\n pieAnnotation, _common.interaction, _common.animation)(params);\n}\n\n/***/ }),\n/* 1124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _g = __webpack_require__(17);\n\nvar _pieLegendAction = __webpack_require__(1125);\n\nvar _pieStatisticAction = __webpack_require__(1126);\n\n(0, _g.registerAction)('pie-statistic', _pieStatisticAction.StatisticAction);\n(0, _g.registerInteraction)('pie-statistic-active', {\n start: [{\n trigger: 'element:mouseenter',\n action: 'pie-statistic:change'\n }],\n end: [{\n trigger: 'element:mouseleave',\n action: 'pie-statistic:reset'\n }]\n});\n(0, _g.registerAction)('pie-legend', _pieLegendAction.PieLegendAction);\n(0, _g.registerInteraction)('pie-legend-active', {\n start: [{\n trigger: 'legend-item:mouseenter',\n action: 'pie-legend:active'\n }],\n end: [{\n trigger: 'legend-item:mouseleave',\n action: 'pie-legend:reset'\n }]\n});\n\n/***/ }),\n/* 1125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PieLegendAction = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _matrix = __webpack_require__(523);\n\n/**\n * 饼图 图例激活 action\n */\nvar PieLegendAction =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(PieLegendAction, _super);\n\n function PieLegendAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 获取激活的图形元素\n */\n\n\n PieLegendAction.prototype.getActiveElements = function () {\n var delegateObject = _g.Util.getDelegationObject(this.context);\n\n if (delegateObject) {\n var view = this.context.view;\n var component = delegateObject.component,\n item_1 = delegateObject.item;\n var field_1 = component.get('field');\n\n if (field_1) {\n var elements = view.geometries[0].elements;\n return elements.filter(function (ele) {\n return ele.getModel().data[field_1] === item_1.value;\n });\n }\n }\n\n return [];\n };\n /**\n * 获取激活的标签\n */\n\n\n PieLegendAction.prototype.getActiveElementLabels = function () {\n var view = this.context.view;\n var elements = this.getActiveElements();\n var labels = view.geometries[0].labelsContainer.getChildren();\n return labels.filter(function (label) {\n return elements.find(function (ele) {\n return (0, _util.isEqual)(ele.getData(), label.get('data'));\n });\n });\n };\n\n PieLegendAction.prototype.transfrom = function (offset) {\n if (offset === void 0) {\n offset = 7.5;\n }\n\n var elements = this.getActiveElements();\n var elementLabels = this.getActiveElementLabels();\n elements.forEach(function (element, idx) {\n var labelShape = elementLabels[idx];\n var coordinate = element.geometry.coordinate;\n\n if (coordinate.isPolar && coordinate.isTransposed) {\n var _a = _g.Util.getAngle(element.getModel(), coordinate),\n startAngle = _a.startAngle,\n endAngle = _a.endAngle;\n\n var middleAngle = (startAngle + endAngle) / 2;\n var r = offset;\n var x = r * Math.cos(middleAngle);\n var y = r * Math.sin(middleAngle);\n element.shape.setMatrix((0, _matrix.transform)([['t', x, y]]));\n labelShape.setMatrix((0, _matrix.transform)([['t', x, y]]));\n }\n });\n };\n\n PieLegendAction.prototype.active = function () {\n this.transfrom();\n };\n /**\n * 激活态还原\n */\n\n\n PieLegendAction.prototype.reset = function () {\n this.transfrom(0);\n };\n\n return PieLegendAction;\n}(_g.Action);\n\nexports.PieLegendAction = PieLegendAction;\n\n/***/ }),\n/* 1126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.StatisticAction = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _statistic = __webpack_require__(516);\n\n/**\n * Pie 中心文本事件的 Action\n */\nvar StatisticAction =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(StatisticAction, _super);\n\n function StatisticAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n StatisticAction.prototype.getAnnotations = function (_view) {\n var view = _view || this.context.view; // @ts-ignore\n\n return view.getController('annotation').option;\n };\n\n StatisticAction.prototype.getInitialAnnotation = function () {\n return this.initialAnnotation;\n };\n\n StatisticAction.prototype.init = function () {\n var _this = this;\n\n var view = this.context.view;\n view.removeInteraction('tooltip');\n view.on('afterchangesize', function () {\n var annotations = _this.getAnnotations(view);\n\n _this.initialAnnotation = annotations;\n });\n };\n\n StatisticAction.prototype.change = function () {\n var _a = this.context,\n view = _a.view,\n event = _a.event;\n var annotations = this.getAnnotations();\n\n if (!this.initialAnnotation) {\n this.initialAnnotation = annotations;\n }\n\n var data = ((event === null || event === void 0 ? void 0 : event.data) || {}).data;\n\n if (event.type.match('legend-item')) {\n var delegateObject = _g.Util.getDelegationObject(this.context); // @ts-ignore\n\n\n var colorField_1 = view.getGroupedFields()[0];\n\n if (delegateObject && colorField_1) {\n var item_1 = delegateObject.item;\n data = view.getData().find(function (d) {\n return d[colorField_1] === item_1.value;\n });\n }\n }\n\n if (data) {\n var annotationController_1 = view.getController('annotation');\n annotationController_1.clear(true); // @ts-ignore\n\n var _b = view.getScaleFields(),\n angleField_1 = _b[1],\n colorField_2 = _b[2];\n\n var angleScale_1 = view.getScaleByField(angleField_1);\n var colorScale_1 = view.getScaleByField(colorField_2);\n var annotationOptions_1 = annotations.filter(function (a) {\n return !(0, _util.get)(a, 'key', '').match('statistic');\n });\n var statisticOptions = annotations.filter(function (a) {\n return (0, _util.get)(a, 'key', '').match('statistic');\n });\n var titleOpt_1 = statisticOptions.filter(function (opt) {\n return opt.key === 'top-statistic';\n });\n var contentOpt_1 = statisticOptions.filter(function (opt) {\n return opt.key === 'bottom-statistic';\n });\n (0, _util.each)(statisticOptions, function (option) {\n var text;\n var transform;\n\n if (option.key === 'top-statistic') {\n text = colorScale_1 ? colorScale_1.getText(data[colorField_2]) : null;\n transform = contentOpt_1 ? 'translate(-50%, -100%)' : 'translate(-50%, -50%)';\n } else {\n text = angleScale_1 ? angleScale_1.getText(data[angleField_1]) : data[angleField_1];\n transform = titleOpt_1 ? 'translate(-50%, 0)' : 'translate(-50%,-50%)';\n }\n\n annotationOptions_1.push((0, _tslib.__assign)((0, _tslib.__assign)({}, option), {\n html: function html(container, view) {\n var coordinate = view.getCoordinate();\n var containerWidth = coordinate.getRadius() * coordinate.innerRadius * 2;\n var style = (0, _util.isFunction)(option.style) ? option.style() : option.style;\n (0, _statistic.setStatisticContainerStyle)(container, (0, _tslib.__assign)({\n width: containerWidth + \"px\",\n transform: transform\n }, (0, _statistic.adapteStyle)(style)));\n var filteredData = view.getData();\n\n if (option.customHtml) {\n return option.customHtml(container, view, data, filteredData);\n }\n\n if (option.formatter) {\n text = option.formatter(data, filteredData);\n } // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容,比如数值 number\n\n\n return text ? (0, _util.isString)(text) ? text : \"\" + text : '';\n }\n }));\n annotationOptions_1.forEach(function (opt) {\n // @ts-ignore\n annotationController_1.annotation(opt);\n });\n view.render(true);\n });\n }\n };\n\n StatisticAction.prototype.reset = function () {\n var view = this.context.view;\n var annotationController = view.getController('annotation');\n annotationController.clear(true);\n var initialStatistic = this.getInitialAnnotation();\n (0, _util.each)(initialStatistic, function (a) {\n view.annotation()[a.type](a);\n });\n view.render(true);\n };\n\n return StatisticAction;\n}(_g.Action);\n\nexports.StatisticAction = StatisticAction;\n\n/***/ }),\n/* 1127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Rose = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1128);\n\nvar Rose =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Rose, _super);\n\n function Rose() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 玫瑰图 */\n\n\n _this.type = 'rose';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Rose.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData(data);\n };\n /**\n * 获取默认的 options 配置项\n */\n\n\n Rose.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n xAxis: false,\n yAxis: false,\n legend: {\n position: 'right',\n offsetX: -10\n },\n sectorStyle: {\n stroke: '#fff',\n lineWidth: 1\n },\n label: {\n layout: {\n type: 'limit-in-shape'\n }\n },\n tooltip: {\n shared: true,\n showMarkers: false\n },\n interactions: [{\n type: 'active-region'\n }]\n });\n };\n /**\n * 获取 玫瑰图 的适配器\n */\n\n\n Rose.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Rose;\n}(_plot.Plot);\n\nexports.Rose = Rose;\n\n/***/ }),\n/* 1128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.legend = legend;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n sectorStyle = options.sectorStyle,\n color = options.color; // 装载数据\n\n chart.data(data);\n (0, _utils.flow)(_geometries.interval)((0, _utils.deepAssign)({}, params, {\n options: {\n marginRatio: 1,\n interval: {\n style: sectorStyle,\n color: color\n }\n }\n }));\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n xField = options.xField;\n var geometry = (0, _utils.findGeometry)(chart, 'interval'); // label 为 false 不显示 label\n\n if (label === false) {\n geometry.label(false);\n } else if ((0, _util.isObject)(label)) {\n var callback = label.callback,\n fields = label.fields,\n cfg = (0, _tslib.__rest)(label, [\"callback\", \"fields\"]);\n var offset = cfg.offset;\n var layout = cfg.layout; // 当 label 在 shape 外部显示时,设置 'limit-in-shape' 会\n // 造成 label 不显示。\n\n if (offset === undefined || offset >= 0) {\n layout = layout ? (0, _util.isArray)(layout) ? layout : [layout] : [];\n cfg.layout = (0, _util.filter)(layout, function (v) {\n return v.type !== 'limit-in-shape';\n });\n cfg.layout.length || delete cfg.layout;\n }\n\n geometry.label({\n fields: fields || [xField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n } else {\n (0, _utils.log)(_utils.LEVEL.WARN, label === null, 'the label option must be an Object.');\n geometry.label({\n fields: [xField]\n });\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n seriesField = options.seriesField;\n\n if (legend === false) {\n chart.legend(false);\n } else if (seriesField) {\n chart.legend(seriesField, legend);\n }\n\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius,\n innerRadius = options.innerRadius;\n chart.coordinate({\n type: 'polar',\n cfg: {\n radius: radius,\n innerRadius: innerRadius\n }\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 falsy 则是不显示轴\n\n if (!xAxis) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (!yAxis) {\n chart.axis(yField, false);\n } else {\n chart.axis(yField, yAxis);\n }\n\n return params;\n}\n/**\n * 玫瑰图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n (0, _utils.flow)(geometry, meta, label, coordinate, axis, legend, _common.tooltip, _common.interaction, _common.animation, _common.theme, (0, _common.annotation)(), _common.state)(params);\n}\n\n/***/ }),\n/* 1129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.WordCloud = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1130);\n\nvar _utils2 = __webpack_require__(524);\n\n__webpack_require__(1132);\n\n// 注册的shape\nvar WordCloud =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(WordCloud, _super);\n\n function WordCloud() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 词云图 */\n\n\n _this.type = 'word-cloud';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n WordCloud.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n\n if (this.options.imageMask) {\n this.render();\n } else {\n this.chart.changeData((0, _utils2.transform)({\n chart: this.chart,\n options: this.options\n }));\n }\n };\n /**\n * 获取默认的 options 配置项\n */\n\n\n WordCloud.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n timeInterval: 2000,\n legend: false,\n tooltip: {\n showTitle: false,\n showMarkers: false,\n showCrosshairs: false,\n fields: ['text', 'value', 'color'],\n formatter: function formatter(datum) {\n return {\n name: datum.text,\n value: datum.value\n };\n }\n },\n wordStyle: {\n fontFamily: 'Verdana',\n fontWeight: 'normal',\n padding: 1,\n fontSize: [12, 60],\n rotation: [0, 90],\n rotationSteps: 2,\n rotateRatio: 0.5\n }\n });\n };\n /**\n * 覆写父类方法,词云图需要加载图片资源,所以需要异步渲染\n */\n\n\n WordCloud.prototype.render = function () {\n var _this = this;\n\n return new Promise(function (res) {\n var imageMask = _this.options.imageMask;\n\n if (!imageMask) {\n // 调用父类渲染函数\n _super.prototype.render.call(_this);\n\n res();\n return;\n }\n\n var handler = function handler(img) {\n _this.options = (0, _tslib.__assign)((0, _tslib.__assign)({}, _this.options), {\n imageMask: img || null\n }); // 调用父类渲染函数\n\n _super.prototype.render.call(_this);\n\n res();\n };\n\n (0, _utils2.processImageMask)(imageMask).then(handler).catch(handler);\n });\n };\n /**\n * 获取 词云图 的适配器\n */\n\n\n WordCloud.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n /**\n * 覆写父类的方法,因为词云图使用 单独的函数 进行布局,原理上有些不一样\n */\n\n\n WordCloud.prototype.triggerResize = function () {\n var _this = this;\n\n if (!this.chart.destroyed) {\n // 当整个词云图图表的宽高信息发生变化时,每个词语的坐标\n // 需要重新执行 adaptor,不然会出现布局错乱,\n // 如相邻词语重叠的情况。\n this.execAdaptor(); // 延迟执行,有利于动画更流畅\n // TODO: 在多次更改画布尺寸时,动画会越来越卡顿,原因未知\n\n window.setTimeout(function () {\n // 执行父类的方法\n _super.prototype.triggerResize.call(_this);\n });\n }\n };\n\n return WordCloud;\n}(_plot.Plot);\n\nexports.WordCloud = WordCloud;\n\n/***/ }),\n/* 1130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils2 = __webpack_require__(524);\n\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var colorField = options.colorField,\n color = options.color;\n var data = (0, _utils2.transform)(params);\n chart.data(data);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField && 'color',\n point: {\n color: color,\n shape: 'word-cloud'\n }\n }\n });\n var ext = (0, _geometries.point)(p).ext;\n ext.geometry.label(false);\n chart.coordinate().reflect('y');\n chart.axis(false);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n return (0, _utils.flow)((0, _common.scale)({\n x: {\n nice: false\n },\n y: {\n nice: false\n }\n }))(params);\n}\n/**\n * 词云图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n (0, _utils.flow)(geometry, meta, _common.tooltip, _common.legend, _common.interaction, _common.animation, _common.theme, _common.state)(params);\n}\n\n/***/ }),\n/* 1131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.wordCloud = wordCloud;\nexports.transform = transform;\nexports.functor = functor;\n\nvar _util = __webpack_require__(0);\n\nvar DEFAULT_OPTIONS = {\n font: function font() {\n return 'serif';\n },\n padding: 1,\n size: [500, 500],\n spiral: 'archimedean',\n // timeInterval: Infinity // max execute time\n timeInterval: 3000\n};\n/**\n * 根据对应的数据对象,计算每个\n * 词语在画布中的渲染位置,并返回\n * 计算后的数据对象\n * @param words\n * @param options\n */\n\nfunction wordCloud(words, options) {\n // 混入默认配置\n options = (0, _util.assign)({}, DEFAULT_OPTIONS, options);\n return transform(words, options);\n}\n/**\n * 抛出没有混入默认配置的方法,用于测试。\n * @param words\n * @param options\n */\n\n\nfunction transform(words, options) {\n // 布局对象\n var layout = tagCloud();\n ['font', 'fontSize', 'fontWeight', 'padding', 'rotate', 'size', 'spiral', 'timeInterval', 'random'].forEach(function (key) {\n if (!(0, _util.isNil)(options[key])) {\n layout[key](options[key]);\n }\n });\n layout.words(words);\n\n if (options.imageMask) {\n layout.createMask(options.imageMask);\n }\n\n var result = layout.start();\n var tags = result._tags;\n tags.forEach(function (tag) {\n tag.x += options.size[0] / 2;\n tag.y += options.size[1] / 2;\n });\n var _a = options.size,\n w = _a[0],\n h = _a[1]; // 添加两个参照数据,分别表示左上角和右下角。\n // 不添加的话不会按照真实的坐标渲染,而是以\n // 数据中的边界坐标为边界进行拉伸,以铺满画布。\n // 这样的后果会导致词语之间的重叠。\n\n tags.push({\n text: '',\n value: 0,\n x: 0,\n y: 0,\n opacity: 0\n });\n tags.push({\n text: '',\n value: 0,\n x: w,\n y: h,\n opacity: 0\n });\n return tags;\n}\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\n\nfunction cloudText(d) {\n return d.text;\n}\n\nfunction cloudFont() {\n return 'serif';\n}\n\nfunction cloudFontNormal() {\n return 'normal';\n}\n\nfunction cloudFontSize(d) {\n return d.value;\n}\n\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\n\nfunction cloudPadding() {\n return 1;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0;\n var n = data.length;\n --di;\n\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n var w = c.measureText(d.text + 'm').width * ratio,\n h = d.size << 1;\n\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n\n if (h > maxh) maxh = h;\n\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n var w = d.width,\n w32 = w >> 5;\n var h = d.y1 - d.y0; // Zero the buffer\n\n for (var i = 0; i < h * w32; i++) {\n sprite[i] = 0;\n }\n\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n\n for (var j = 0; j < h; j++) {\n for (var i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0;\n var x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n\n x += sw;\n }\n\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1];\n var x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n\n case 1:\n y += dy;\n break;\n\n case 2:\n x -= dx;\n break;\n\n default:\n y -= dy;\n break;\n }\n\n return [x, y];\n };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n var a = [];\n var i = -1;\n\n while (++i < n) {\n a[i] = 0;\n }\n\n return a;\n}\n\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\n\nfunction functor(d) {\n return (0, _util.isFunction)(d) ? d : function () {\n return d;\n };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nfunction tagCloud() {\n var size = [256, 256],\n font = cloudFont,\n fontSize = cloudFontSize,\n fontWeight = cloudFontNormal,\n rotate = cloudRotate,\n padding = cloudPadding,\n spiral = archimedeanSpiral,\n random = Math.random,\n words = [],\n timeInterval = Infinity;\n var text = cloudText;\n var fontStyle = cloudFontNormal;\n var canvas = cloudCanvas;\n var cloud = {};\n\n cloud.start = function () {\n var width = size[0],\n height = size[1];\n var contextAndRatio = getContext(canvas()),\n board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]),\n n = words.length,\n tags = [],\n data = words.map(function (d, i, data) {\n d.text = text.call(this, d, i, data);\n d.font = font.call(this, d, i, data);\n d.style = fontStyle.call(this, d, i, data);\n d.weight = fontWeight.call(this, d, i, data);\n d.rotate = rotate.call(this, d, i, data);\n d.size = ~~fontSize.call(this, d, i, data);\n d.padding = padding.call(this, d, i, data);\n return d;\n }).sort(function (a, b) {\n return b.size - a.size;\n });\n var i = -1,\n bounds = !cloud.board ? null : [{\n x: 0,\n y: 0\n }, {\n x: width,\n y: height\n }];\n step();\n\n function step() {\n var start = Date.now();\n\n while (Date.now() - start < timeInterval && ++i < n) {\n var d = data[i];\n d.x = width * (random() + 0.5) >> 1;\n d.y = height * (random() + 0.5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n } else {\n bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }];\n } // Temporary hack\n\n\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n cloud._tags = tags;\n cloud._bounds = bounds;\n }\n\n return cloud;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < 0.5 ? 1 : -1;\n var dxdy,\n t = -dt,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0;\n var last = void 0,\n x = (tag.y + tag.y0) * sw + (lx >> 5);\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n\n x += sw;\n }\n\n delete tag.sprite;\n return true;\n }\n }\n }\n\n return false;\n }\n\n cloud.createMask = function (img) {\n var can = document.createElement('canvas');\n var width = size[0],\n height = size[1]; // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错\n\n if (!width || !height) {\n return;\n }\n\n var w32 = width >> 5;\n var board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n var cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n var imageData = cxt.getImageData(0, 0, width, height).data;\n\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++) {\n var k = w32 * j + (i >> 5);\n var tmp = j * width + i << 2;\n var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250;\n var m = flag ? 1 << 31 - i % 32 : 0;\n board[k] |= m;\n }\n }\n\n cloud.board = board;\n cloud.hasImage = true;\n };\n\n cloud.timeInterval = function (_) {\n timeInterval = _ == null ? Infinity : _;\n };\n\n cloud.words = function (_) {\n words = _;\n };\n\n cloud.size = function (_) {\n size = [+_[0], +_[1]];\n };\n\n cloud.font = function (_) {\n font = functor(_);\n };\n\n cloud.fontWeight = function (_) {\n fontWeight = functor(_);\n };\n\n cloud.rotate = function (_) {\n rotate = functor(_);\n };\n\n cloud.spiral = function (_) {\n spiral = spirals[_] || _;\n };\n\n cloud.fontSize = function (_) {\n fontSize = functor(_);\n };\n\n cloud.padding = function (_) {\n padding = functor(_);\n };\n\n cloud.random = function (_) {\n random = functor(_);\n };\n\n return cloud;\n}\n\n/***/ }),\n/* 1132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\n(0, _g.registerShape)('point', 'word-cloud', {\n draw: function draw(cfg, group) {\n var cx = cfg.x;\n var cy = cfg.y;\n var shape = group.addShape('text', {\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, getTextAttrs(cfg)), {\n x: cx,\n y: cy\n })\n });\n var rotate = cfg.data.rotate;\n\n if (typeof rotate === 'number') {\n _g.Util.rotate(shape, rotate * Math.PI / 180);\n }\n\n return shape;\n }\n});\n\nfunction getTextAttrs(cfg) {\n return {\n fontSize: cfg.data.size,\n text: cfg.data.text,\n textAlign: 'center',\n fontFamily: cfg.data.font,\n fontWeight: cfg.data.weight,\n fill: cfg.color || cfg.defaultStyle.stroke,\n textBaseline: 'alphabetic'\n };\n}\n\n/***/ }),\n/* 1133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scatter = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1134);\n\n__webpack_require__(525);\n\nvar Scatter =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Scatter, _super);\n\n function Scatter() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'point';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Scatter.prototype.changeData = function (data) {\n this.updateOption((0, _adaptor.transformOptions)((0, _utils.deepAssign)({}, this.options, {\n data: data\n })));\n\n var _a = this,\n options = _a.options,\n chart = _a.chart;\n\n (0, _adaptor.meta)({\n chart: chart,\n options: options\n });\n this.chart.changeData(data);\n };\n /**\n * 获取散点图的适配器\n */\n\n\n Scatter.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n Scatter.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n size: 4,\n tooltip: {\n showTitle: false,\n showMarkers: false,\n showCrosshairs: true,\n crosshairs: {\n type: 'xy'\n }\n }\n });\n };\n\n return Scatter;\n}(_plot.Plot);\n\nexports.Scatter = Scatter;\n\n/***/ }),\n/* 1134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformOptions = transformOptions;\nexports.meta = meta;\nexports.tooltip = tooltip;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _common = __webpack_require__(25);\n\nvar _util2 = __webpack_require__(1135);\n\n/**\n * 散点图 data.length === 1 时居中显示,\n * @param params\n * @returns params\n */\nfunction transformOptions(options) {\n var _a = options.data,\n data = _a === void 0 ? [] : _a; // 仅对 data.length === 1 的情况进行处理\n\n if (data.length === 1) {\n return (0, _utils.deepAssign)({}, options, {\n meta: (0, _util2.getMeta)(options)\n });\n }\n\n return options;\n}\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n type = options.type,\n color = options.color,\n shape = options.shape,\n pointStyle = options.pointStyle,\n shapeField = options.shapeField,\n colorField = options.colorField,\n xField = options.xField,\n yField = options.yField,\n sizeField = options.sizeField;\n var size = options.size;\n var tooltip = options.tooltip;\n\n if (sizeField) {\n if (!size) {\n size = [2, 8];\n }\n\n if ((0, _util.isNumber)(size)) {\n size = [size, size];\n }\n }\n\n if (tooltip && !tooltip.fields) {\n tooltip = (0, _tslib.__assign)((0, _tslib.__assign)({}, tooltip), {\n fields: [xField, yField, colorField, sizeField, shapeField]\n });\n } // 数据\n\n\n chart.data(data); // geometry\n\n (0, _geometries.point)((0, _utils.deepAssign)({}, params, {\n options: {\n seriesField: colorField,\n point: {\n color: color,\n shape: shape,\n size: size,\n style: pointStyle\n },\n tooltip: tooltip\n }\n }));\n var geometry = (0, _utils.findGeometry)(chart, 'point'); // 数据调整\n\n if (type) {\n geometry.adjust(type);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n var newOptions = options; // 仅对 data.length === 1 的情况进行处理\n\n if (data.length === 1) {\n newOptions = transformOptions((0, _utils.deepAssign)({}, options, {\n meta: (0, _util2.getMeta)(options)\n }));\n }\n\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))((0, _utils.deepAssign)({}, params, {\n options: newOptions\n }));\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n colorField = options.colorField,\n shapeField = options.shapeField,\n sizeField = options.sizeField; // legend 没有指定时根据 shapeField 和 colorField 来设置默认值\n\n var showLegend = (0, _util.isBoolean)(legend) ? legend : legend || !!(shapeField || colorField);\n\n if (showLegend) {\n chart.legend(colorField || shapeField, legend); // 隐藏连续图例\n\n if (sizeField) {\n chart.legend(sizeField, false);\n }\n } else {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var scatterGeometry = (0, _utils.findGeometry)(chart, 'point'); // label 为 false, 空 则不显示 label\n\n if (!label) {\n scatterGeometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n scatterGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * annotation 配置\n * - 特殊 annotation: quadrant(四象限)\n * @param params\n */\n\n\nfunction scatterAnnotation(params) {\n var options = params.options;\n var quadrant = options.quadrant;\n var annotationOptions = [];\n\n if (quadrant) {\n var _a = quadrant.xBaseline,\n xBaseline = _a === void 0 ? 0 : _a,\n _b = quadrant.yBaseline,\n yBaseline = _b === void 0 ? 0 : _b,\n labels_1 = quadrant.labels,\n regionStyle_1 = quadrant.regionStyle,\n lineStyle = quadrant.lineStyle;\n var defaultConfig_1 = (0, _util2.getQuadrantDefaultConfig)(xBaseline, yBaseline); // 仅支持四象限\n\n var quadrants = new Array(4).join(',').split(',');\n quadrants.forEach(function (_, index) {\n annotationOptions.push((0, _tslib.__assign)((0, _tslib.__assign)({\n type: 'region',\n top: false\n }, defaultConfig_1.regionStyle[index].position), {\n style: (0, _utils.deepAssign)({}, defaultConfig_1.regionStyle[index].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index])\n }), (0, _tslib.__assign)({\n type: 'text',\n top: true\n }, (0, _utils.deepAssign)({}, defaultConfig_1.labelStyle[index], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index])));\n }); // 生成坐标轴\n\n annotationOptions.push({\n type: 'line',\n top: false,\n start: ['min', yBaseline],\n end: ['max', yBaseline],\n style: (0, _utils.deepAssign)({}, defaultConfig_1.lineStyle, lineStyle)\n }, {\n type: 'line',\n top: false,\n start: [xBaseline, 'min'],\n end: [xBaseline, 'max'],\n style: (0, _utils.deepAssign)({}, defaultConfig_1.lineStyle, lineStyle)\n });\n }\n\n return (0, _utils.flow)((0, _common.annotation)(annotationOptions))(params);\n} // 趋势线\n\n\nfunction regressionLine(params) {\n var options = params.options,\n chart = params.chart;\n var regressionLine = options.regressionLine;\n\n if (regressionLine) {\n var style_1 = regressionLine.style,\n _a = regressionLine.top,\n top_1 = _a === void 0 ? false : _a;\n var defaultStyle_1 = {\n stroke: '#9ba29a',\n lineWidth: 2,\n opacity: 0.5\n };\n chart.annotation().shape({\n top: top_1,\n render: function render(container, view) {\n var group = container.addGroup({\n id: chart.id + \"-regression-line\",\n name: 'regression-line-group'\n });\n var path = (0, _util2.getPath)({\n view: view,\n options: options\n });\n group.addShape('path', {\n name: 'regression-line',\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({\n path: path\n }, defaultStyle_1), style_1)\n });\n }\n });\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip;\n\n if (tooltip) {\n chart.tooltip(tooltip);\n } else if (tooltip === false) {\n chart.tooltip(false);\n }\n\n return params;\n}\n/**\n * 散点图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, meta, axis, legend, tooltip, label, _common.interaction, scatterAnnotation, _common.animation, _common.theme, regressionLine)(params);\n}\n\n/***/ }),\n/* 1135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getQuadrantDefaultConfig = getQuadrantDefaultConfig;\nexports.getMeta = exports.getPath = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _d3Regression = __webpack_require__(511);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar REGRESSION_MAP = {\n exp: _d3Regression.regressionExp,\n linear: _d3Regression.regressionLinear,\n loess: _d3Regression.regressionLoess,\n log: _d3Regression.regressionLog,\n poly: _d3Regression.regressionPoly,\n pow: _d3Regression.regressionPow,\n quad: _d3Regression.regressionQuad\n};\n/**\n * 获取四象限默认配置\n * @param {number} xBaseline\n * @param {number} yBaseline\n */\n\nfunction getQuadrantDefaultConfig(xBaseline, yBaseline) {\n // 文本便宜距离\n var textOffset = 10; // 四象限默认样式\n\n var defaultConfig = {\n regionStyle: [{\n position: {\n start: [xBaseline, 'max'],\n end: ['max', yBaseline]\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4\n }\n }, {\n position: {\n start: ['min', 'max'],\n end: [xBaseline, yBaseline]\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4\n }\n }, {\n position: {\n start: ['min', yBaseline],\n end: [xBaseline, 'min']\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4\n }\n }, {\n position: {\n start: [xBaseline, yBaseline],\n end: ['max', 'min']\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4\n }\n }],\n lineStyle: {\n stroke: '#9ba29a',\n lineWidth: 1\n },\n labelStyle: [{\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc'\n }\n }, {\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc'\n }\n }]\n };\n return defaultConfig;\n}\n\nvar splinePath = function splinePath(data, config) {\n var view = config.view,\n _a = config.options,\n xField = _a.xField,\n yField = _a.yField;\n var xScaleView = view.getScaleByField(xField);\n var yScaleView = view.getScaleByField(yField);\n var pathData = data.map(function (d) {\n return view.getCoordinate().convert({\n x: xScaleView.scale(d[0]),\n y: yScaleView.scale(d[1])\n });\n });\n return (0, _utils.getSplinePath)(pathData, false);\n};\n\nvar getPath = function getPath(config) {\n var options = config.options;\n var xField = options.xField,\n yField = options.yField,\n data = options.data,\n regressionLine = options.regressionLine;\n var _a = regressionLine.type,\n type = _a === void 0 ? 'linear' : _a,\n algorithm = regressionLine.algorithm;\n var pathData;\n\n if (algorithm) {\n pathData = (0, _util.isArray)(algorithm) ? algorithm : algorithm(data);\n } else {\n var reg = REGRESSION_MAP[type]().x(function (d) {\n return d[xField];\n }).y(function (d) {\n return d[yField];\n });\n pathData = reg(data);\n }\n\n return splinePath(pathData, config);\n}; // 散点图data.length === 1时调整 meta: {min, max}\n\n\nexports.getPath = getPath;\n\nvar getMeta = function getMeta(options) {\n var _a;\n\n var _b = options.meta,\n meta = _b === void 0 ? {} : _b,\n xField = options.xField,\n yField = options.yField,\n data = options.data;\n var xFieldValue = data[0][xField];\n var yFieldValue = data[0][yField];\n var xIsPositiveNumber = xFieldValue > 0;\n var yIsPositiveNumber = yFieldValue > 0;\n\n var getValue = function getValue(field, type, axis) {\n var customValue = (0, _util.get)(meta, [field, type]);\n\n if ((0, _util.isNumber)(customValue)) {\n return customValue;\n }\n\n if (axis === 'x') {\n var rangeX = {\n min: xIsPositiveNumber ? 0 : xFieldValue * 2,\n max: xIsPositiveNumber ? xFieldValue * 2 : 0\n };\n return rangeX[type];\n }\n\n var rangeY = {\n min: yIsPositiveNumber ? 0 : yFieldValue * 2,\n max: yIsPositiveNumber ? yFieldValue * 2 : 0\n };\n return rangeY[type];\n };\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, meta), (_a = {}, _a[xField] = (0, _tslib.__assign)((0, _tslib.__assign)({}, meta[xField]), {\n min: getValue(xField, 'min', 'x'),\n max: getValue(xField, 'max', 'x')\n }), _a[yField] = (0, _tslib.__assign)((0, _tslib.__assign)({}, meta[yField]), {\n min: getValue(yField, 'min', 'y'),\n max: getValue(yField, 'max', 'y')\n }), _a));\n};\n\nexports.getMeta = getMeta;\n\n/***/ }),\n/* 1136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Radar = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1137);\n\n__webpack_require__(1138);\n\nvar Radar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Radar, _super);\n\n function Radar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'radar';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Radar.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData(data);\n };\n /**\n * 获取 雷达图 默认配置\n */\n\n\n Radar.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n xAxis: {\n label: {\n offset: 15\n },\n grid: {\n line: {\n type: 'line'\n }\n }\n },\n yAxis: {\n grid: {\n line: {\n type: 'circle'\n }\n }\n },\n legend: {\n position: 'top'\n },\n tooltip: {\n shared: true,\n showCrosshairs: true,\n showMarkers: true,\n crosshairs: {\n type: 'xy',\n line: {\n style: {\n stroke: '#565656',\n lineDash: [4]\n }\n },\n follow: true\n }\n }\n });\n };\n /**\n * 获取 雷达图 的适配器\n */\n\n\n Radar.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Radar;\n}(_plot.Plot);\n\nexports.Radar = Radar;\n\n/***/ }),\n/* 1137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils = __webpack_require__(12);\n\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n lineStyle = options.lineStyle,\n color = options.color,\n pointOptions = options.point,\n areaOptions = options.area;\n chart.data(data); // 雷达图 主 geometry\n\n var primary = (0, _utils.deepAssign)({}, params, {\n options: {\n line: {\n style: lineStyle,\n color: color\n },\n point: pointOptions ? (0, _tslib.__assign)({\n color: color\n }, pointOptions) : pointOptions,\n area: areaOptions ? (0, _tslib.__assign)({\n color: color\n }, areaOptions) : areaOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined\n }\n }); // 副 Geometry\n\n var second = (0, _utils.deepAssign)({}, primary, {\n options: {\n tooltip: false\n }\n });\n (0, _geometries.line)(primary);\n (0, _geometries.point)(second);\n (0, _geometries.area)(second);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coord(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius;\n chart.coordinate('polar', {\n radius: radius\n });\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n xAxis = options.xAxis,\n yField = options.yField,\n yAxis = options.yAxis;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var geometry = (0, _utils.findGeometry)(chart, 'line');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n geometry.label({\n fields: [yField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * 雷达图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, meta, _common.theme, coord, axis, _common.legend, _common.tooltip, label, _common.interaction, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _g = __webpack_require__(17);\n\nvar _radarTooltipAction = __webpack_require__(1139);\n\n(0, _g.registerAction)('radar-tooltip', _radarTooltipAction.RadarTooltipAction);\n(0, _g.registerInteraction)('radar-tooltip', {\n start: [{\n trigger: 'plot:mousemove',\n action: 'radar-tooltip:show'\n }],\n end: [{\n trigger: 'plot:mouseleave',\n action: 'radar-tooltip:hide'\n }]\n});\n\n/***/ }),\n/* 1139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RadarTooltipAction = exports.RadarTooltipController = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar RadarTooltipController =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RadarTooltipController, _super);\n\n function RadarTooltipController() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n Object.defineProperty(RadarTooltipController.prototype, \"name\", {\n get: function get() {\n return 'radar-tooltip';\n },\n enumerable: false,\n configurable: true\n });\n\n RadarTooltipController.prototype.getTooltipItems = function (point) {\n var _a = this.getTooltipCfg(),\n shared = _a.shared,\n cfgTitle = _a.title;\n\n var hintItems = _super.prototype.getTooltipItems.call(this, point);\n\n if (hintItems.length > 0) {\n var geometry_1 = this.view.geometries[0];\n var dataArray = geometry_1.dataArray;\n var title_1 = hintItems[0].name;\n var result_1 = [];\n dataArray.forEach(function (mappingData) {\n mappingData.forEach(function (d) {\n var items = _g.Util.getTooltipItems(d, geometry_1);\n\n var item = items[0];\n\n if (!shared && item && item.name === title_1) {\n var displayTitle = (0, _util.isNil)(cfgTitle) ? title_1 : cfgTitle;\n result_1.push((0, _tslib.__assign)((0, _tslib.__assign)({}, item), {\n name: item.title,\n title: displayTitle\n }));\n } else if (shared && item) {\n var displayTitle = (0, _util.isNil)(cfgTitle) ? item.name || title_1 : cfgTitle;\n result_1.push((0, _tslib.__assign)((0, _tslib.__assign)({}, item), {\n name: item.title,\n title: displayTitle\n }));\n }\n });\n });\n return result_1;\n }\n\n return [];\n };\n\n return RadarTooltipController;\n}(_g.TooltipController);\n\nexports.RadarTooltipController = RadarTooltipController;\n(0, _g.registerComponentController)('radar-tooltip', RadarTooltipController);\n/**\n * 雷达图 tooltip 激活 action\n */\n\nvar RadarTooltipAction =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RadarTooltipAction, _super);\n\n function RadarTooltipAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n RadarTooltipAction.prototype.init = function () {\n var view = this.context.view;\n view.removeInteraction('tooltip');\n };\n\n RadarTooltipAction.prototype.show = function () {\n var event = this.context.event;\n var controller = this.getTooltipController();\n controller.showTooltip({\n x: event.x,\n y: event.y\n });\n };\n\n RadarTooltipAction.prototype.hide = function () {\n var controller = this.getTooltipController();\n controller.hideTooltip();\n };\n\n RadarTooltipAction.prototype.getTooltipController = function () {\n var view = this.context.view;\n return view.getController('radar-tooltip');\n };\n\n return RadarTooltipAction;\n}(_g.Action);\n\nexports.RadarTooltipAction = RadarTooltipAction;\n\n/***/ }),\n/* 1140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DualAxes = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1141);\n\nvar DualAxes =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(DualAxes, _super);\n\n function DualAxes() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型: 双轴图 */\n\n\n _this.type = 'dual-axes';\n return _this;\n }\n /**\n * 获取 双轴图 默认配置\n */\n\n\n DualAxes.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n yAxis: [],\n syncViewPadding: true\n });\n };\n /**\n * 获取双轴图的适配器\n */\n\n\n DualAxes.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return DualAxes;\n}(_plot.Plot);\n\nexports.DualAxes = DualAxes;\n\n/***/ }),\n/* 1141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformOptions = transformOptions;\nexports.color = color;\nexports.meta = meta;\nexports.axis = axis;\nexports.tooltip = tooltip;\nexports.interaction = interaction;\nexports.annotation = annotation;\nexports.animation = animation;\nexports.limitInPlot = limitInPlot;\nexports.legend = legend;\nexports.slider = slider;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _percent = __webpack_require__(122);\n\nvar _utils = __webpack_require__(12);\n\nvar _view = __webpack_require__(515);\n\nvar _option = __webpack_require__(299);\n\nvar _legend = __webpack_require__(1142);\n\nvar _geometry = __webpack_require__(1143);\n\nvar _renderSider = __webpack_require__(1144);\n\nvar _types = __webpack_require__(526);\n\nvar _constant = __webpack_require__(527);\n\n/**\n * transformOptions,双轴图整体的取参逻辑如下\n * 1. get index getOptions: 对应的是默认的图表参数,如 appendPadding,syncView 等\n * 2. get adpator transformOption: 对应的是双轴图的默认参数,deepAssign 优先级从低到高如下\n * 2.1 defaultoption,如 tooltip,legend\n * 2.2 用户填写 options\n * 2.3 根据用户填写的 options 补充的数组型 options,如 yaxis,GeometryOption,因为 deepAssign 无法 assign 数组\n *\n * @param params\n */\nfunction transformOptions(params) {\n var _a;\n\n var options = params.options;\n var _b = options.geometryOptions,\n geometryOptions = _b === void 0 ? [] : _b,\n xField = options.xField,\n yField = options.yField;\n var allLine = (0, _util.every)(geometryOptions, function (_a) {\n var geometry = _a.geometry;\n return geometry === _types.DualAxesGeometry.Line || geometry === undefined;\n });\n return (0, _utils.deepAssign)({}, {\n options: {\n geometryOptions: [],\n meta: (_a = {}, _a[xField] = {\n // 默认为 cat 类型\n type: 'cat',\n // x 轴一定是同步 scale 的\n sync: true,\n // 如果有没有柱子,则\n range: allLine ? [0, 1] : undefined\n }, _a),\n tooltip: {\n showMarkers: allLine,\n // 存在柱状图,不显示 crosshairs\n showCrosshairs: allLine,\n shared: true,\n crosshairs: {\n type: 'x'\n }\n },\n interactions: !allLine ? [{\n type: 'legend-visible-filter'\n }, {\n type: 'active-region'\n }] : [{\n type: 'legend-visible-filter'\n }],\n legend: {\n position: 'top-left'\n }\n }\n }, params, {\n options: {\n // yAxis\n yAxis: (0, _option.transformObjectToArray)(yField, options.yAxis),\n // geometryOptions\n geometryOptions: [(0, _option.getGeometryOption)(xField, yField[0], geometryOptions[0]), (0, _option.getGeometryOption)(xField, yField[1], geometryOptions[1])],\n // annotations\n annotations: (0, _option.transformObjectToArray)(yField, options.annotations)\n }\n });\n}\n/**\n * 绘制图形\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n geometryOptions = options.geometryOptions,\n data = options.data,\n tooltip = options.tooltip;\n var SORT_MAP = {\n line: 0,\n column: 1\n }; // 包含配置,id,数据的结构\n\n var geometries = [(0, _tslib.__assign)((0, _tslib.__assign)({}, geometryOptions[0]), {\n id: _constant.LEFT_AXES_VIEW,\n data: data[0],\n yField: yField[0]\n }), (0, _tslib.__assign)((0, _tslib.__assign)({}, geometryOptions[1]), {\n id: _constant.RIGHT_AXES_VIEW,\n data: data[1],\n yField: yField[1]\n })]; // 将线的 view 放置在更上一层,防止线柱遮挡。先柱后先\n\n geometries.sort(function (a, b) {\n return -SORT_MAP[a.geometry] + SORT_MAP[b.geometry];\n }).forEach(function (geometry) {\n var id = geometry.id,\n data = geometry.data,\n yField = geometry.yField; // 百分比柱状图需要额外处理一次数据\n\n var isPercent = (0, _option.isColumn)(geometry) && geometry.isPercent;\n var formatData = isPercent ? (0, _percent.percent)(data, yField, xField, yField) : data;\n var view = chart.createView({\n id: id\n }).data(formatData);\n var tooltipOptions = isPercent ? (0, _tslib.__assign)({\n formatter: function formatter(datum) {\n return {\n name: datum[geometry.seriesField] || yField,\n value: (Number(datum[yField]) * 100).toFixed(2) + '%'\n };\n }\n }, tooltip) : tooltip; // 绘制图形\n\n (0, _geometry.drawSingleGeometry)({\n chart: view,\n options: {\n xField: xField,\n yField: yField,\n tooltip: tooltipOptions,\n geometryOption: geometry\n }\n });\n });\n return params;\n}\n\nfunction color(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var geometryOptions = options.geometryOptions;\n var themeColor = ((_a = chart.getTheme()) === null || _a === void 0 ? void 0 : _a.colors10) || [];\n var start = 0;\n /* 为 geometry 添加默认 color。\n * 1. 若 geometryOptions 存在 color,则在 drawGeometry 时已处理\n * 2. 若 不存在 color,获取 Geometry group scales个数,在 theme color 10 中提取\n * 3. 为防止 group 过多导致右色板无值或值很少,右 view 面板在依次提取剩下的 N 个 后再 concat 一次 themeColor\n * 4. 为简便获取 Geometry group scales个数,在绘制完后再执行 color\n * 5. 考虑之后将不同 view 使用同一个色板的需求沉淀到 g2\n */\n\n chart.once('beforepaint', function () {\n (0, _util.each)(geometryOptions, function (geometryOption, index) {\n var view = (0, _view.findViewById)(chart, index === 0 ? _constant.LEFT_AXES_VIEW : _constant.RIGHT_AXES_VIEW);\n if (geometryOption.color) return;\n var groupScale = view.getGroupScales();\n var count = (0, _util.get)(groupScale, [0, 'values', 'length'], 1);\n var color = themeColor.slice(start, start + count).concat(index === 0 ? [] : themeColor);\n view.geometries.forEach(function (geometry) {\n if (geometryOption.seriesField) {\n geometry.color(geometryOption.seriesField, color);\n } else {\n geometry.color(color[0]);\n }\n });\n start += count;\n });\n chart.render(true);\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n (0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField[0]] = yAxis[0], _a))((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW)\n }));\n (0, _common.scale)((_b = {}, _b[xField] = xAxis, _b[yField[1]] = yAxis[1], _b))((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW)\n }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var leftView = (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW);\n var rightView = (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW);\n var xField = options.xField,\n yField = options.yField,\n xAxis = options.xAxis,\n yAxis = options.yAxis;\n chart.axis(xField, false);\n chart.axis(yField[0], false);\n chart.axis(yField[1], false); // 左 View\n\n leftView.axis(xField, xAxis);\n leftView.axis(yField[0], (0, _option.getYAxisWithDefault)(yAxis[0], _types.AxisType.Left)); // 右 Y 轴\n\n rightView.axis(xField, false);\n rightView.axis(yField[1], (0, _option.getYAxisWithDefault)(yAxis[1], _types.AxisType.Right));\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip;\n var leftView = (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW);\n var rightView = (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW); // tooltip 经过 getDefaultOption 处理后,一定不为 undefined\n\n chart.tooltip(tooltip); // 在 view 上添加 tooltip,使得 shared 和 interaction active-region 起作用\n // view 应该继承 chart 里的 shared,但是从表现看来,继承有点问题\n\n leftView.tooltip({\n shared: true\n });\n rightView.tooltip({\n shared: true\n });\n return params;\n}\n/**\n * interaction 配置\n * @param params\n */\n\n\nfunction interaction(params) {\n var chart = params.chart;\n (0, _common.interaction)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW)\n }));\n (0, _common.interaction)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW)\n }));\n return params;\n}\n/**\n * annotation 配置\n * @param params\n */\n\n\nfunction annotation(params) {\n var chart = params.chart,\n options = params.options;\n var annotations = options.annotations;\n var a1 = (0, _util.get)(annotations, [0]);\n var a2 = (0, _util.get)(annotations, [1]);\n (0, _common.annotation)(a1)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW),\n options: {\n annotations: a1\n }\n }));\n (0, _common.annotation)(a2)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW),\n options: {\n annotations: a2\n }\n }));\n return params;\n}\n\nfunction animation(params) {\n var chart = params.chart;\n (0, _common.animation)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW)\n }));\n (0, _common.animation)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW)\n }));\n return params;\n}\n/**\n * 双轴图 limitInPlot\n * @param params\n */\n\n\nfunction limitInPlot(params) {\n var chart = params.chart,\n options = params.options;\n var yAxis = options.yAxis;\n (0, _common.limitInPlot)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW),\n options: {\n yAxis: yAxis[0]\n }\n }));\n (0, _common.limitInPlot)((0, _utils.deepAssign)({}, params, {\n chart: (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW),\n options: {\n yAxis: yAxis[1]\n }\n }));\n return params;\n}\n/**\n * legend 配置\n * 使用 custom,便于和类似于分组柱状图-单折线图的逻辑统一\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n geometryOptions = options.geometryOptions,\n yField = options.yField,\n data = options.data;\n var leftView = (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW);\n var rightView = (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW);\n\n if (legend === false) {\n chart.legend(false);\n } else if ((0, _util.isObject)(legend) && legend.custom === true) {\n chart.legend(legend);\n } else {\n // 均使用自定义图例\n chart.once('beforepaint', function () {\n var leftItems = data[0].length ? (0, _legend.getViewLegendItems)({\n view: leftView,\n geometryOption: geometryOptions[0],\n yField: yField[0],\n legend: legend\n }) : [];\n var rightItems = data[1].length ? (0, _legend.getViewLegendItems)({\n view: rightView,\n geometryOption: geometryOptions[1],\n yField: yField[1],\n legend: legend\n }) : [];\n chart.legend((0, _utils.deepAssign)({}, legend, {\n custom: true,\n // todo 修改类型定义\n // @ts-ignore\n items: leftItems.concat(rightItems)\n }));\n }); // 自定义图例交互\n\n chart.on('legend-item:click', function (evt) {\n var delegateObject = (0, _util.get)(evt, 'gEvent.delegateObject', {});\n\n if (delegateObject && delegateObject.item) {\n var _a = delegateObject.item,\n field_1 = _a.value,\n isGeometry = _a.isGeometry,\n viewId = _a.viewId; // geometry 的时候,直接使用 view.changeVisible\n\n if (isGeometry) {\n var idx = (0, _util.findIndex)(yField, function (yF) {\n return yF === field_1;\n });\n\n if (idx > -1) {\n var geometries = (0, _util.get)((0, _view.findViewById)(chart, viewId), 'geometries');\n (0, _util.each)(geometries, function (g) {\n g.changeVisible(!delegateObject.item.unchecked);\n });\n }\n } else {\n var legendItem_1 = (0, _util.get)(chart.getController('legend'), 'option.items', []); // 分组柱线图\n\n (0, _util.each)(chart.views, function (view) {\n // 单折柱图\n var groupScale = view.getGroupScales();\n (0, _util.each)(groupScale, function (scale) {\n if (scale.values && scale.values.indexOf(field_1) > -1) {\n view.filter(scale.field, function (value) {\n var curLegendItem = (0, _util.find)(legendItem_1, function (item) {\n return item.value === value;\n }); // 使用 legend 中的 unchecked 来判断,使得支持关闭多个图例\n\n return !curLegendItem.unchecked;\n });\n }\n });\n chart.render(true);\n });\n }\n }\n });\n }\n\n return params;\n}\n/**\n * slider 配置\n * @param params\n */\n\n\nfunction slider(params) {\n var chart = params.chart,\n options = params.options;\n var slider = options.slider;\n var leftView = (0, _view.findViewById)(chart, _constant.LEFT_AXES_VIEW);\n var rightView = (0, _view.findViewById)(chart, _constant.RIGHT_AXES_VIEW);\n\n if (slider) {\n // 左 View\n leftView.option('slider', slider); // 监听左侧 slider 改变事件, 同步右侧 View 视图\n\n leftView.on('slider:valuechanged', function (evt) {\n var _a = evt.event,\n value = _a.value,\n originValue = _a.originValue;\n\n if ((0, _util.isEqual)(value, originValue)) {\n return;\n }\n\n (0, _renderSider.renderSlider)(rightView, value);\n });\n chart.once('afterpaint', function () {\n // 初始化数据,配置默认值时需要同步\n if (!(0, _util.isBoolean)(slider)) {\n var start = slider.start,\n end = slider.end;\n\n if (start || end) {\n (0, _renderSider.renderSlider)(rightView, [start, end]);\n }\n }\n });\n }\n\n return params;\n}\n/**\n * 双折线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // transformOptions 一定在最前面处理;color legend 使用了 beforepaint,为便于理解放在最后面\n return (0, _utils.flow)(transformOptions, geometry, meta, axis, limitInPlot, tooltip, interaction, annotation, _common.theme, animation, color, legend, slider)(params);\n}\n\n/***/ }),\n/* 1142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getViewLegendItems = getViewLegendItems;\n\nvar _util = __webpack_require__(0);\n\nvar _g = __webpack_require__(17);\n\nvar _utils = __webpack_require__(12);\n\nvar _option = __webpack_require__(299);\n\n/**\n * 获取 view 的 legendItem,供存在不含有 seriesField 的图形使用\n * @param params\n */\nfunction getViewLegendItems(params) {\n var view = params.view,\n geometryOption = params.geometryOption,\n yField = params.yField,\n legend = params.legend;\n var userMarker = (0, _util.get)(legend, 'marker');\n var geometry = (0, _utils.findGeometry)(view, (0, _option.isLine)(geometryOption) ? 'line' : 'interval');\n\n if (!geometryOption.seriesField) {\n // 返回 g2 设置的图例\n var colorAttribute = geometry.getAttribute('color');\n var color = colorAttribute.values[0];\n var marker = userMarker || ((0, _option.isLine)(geometryOption) ? {\n symbol: function symbol(x, y, r) {\n return [['M', x - r, y], ['L', x + r, y]];\n },\n style: {\n lineWidth: 2,\n r: 6,\n stroke: color\n }\n } : {\n symbol: 'square',\n style: {\n fill: color\n }\n });\n return [{\n value: yField,\n name: (0, _util.get)(view, \"options.scales.\" + yField + \".alias\") || yField,\n marker: marker,\n isGeometry: true,\n viewId: view.id\n }];\n }\n\n var attributes = geometry.getGroupAttributes();\n return (0, _util.reduce)(attributes, function (items, attr) {\n var attrItems = _g.Util.getLegendItems(view, geometry, attr, view.getTheme(), userMarker);\n\n return items.concat(attrItems);\n }, []);\n}\n\n/***/ }),\n/* 1143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.drawSingleGeometry = drawSingleGeometry;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils = __webpack_require__(12);\n\nvar _option = __webpack_require__(299);\n\n/**\n * 绘制单个图形\n * @param params\n */\nfunction drawSingleGeometry(params) {\n var options = params.options,\n chart = params.chart;\n var geometryOption = options.geometryOption;\n var isStack = geometryOption.isStack,\n color = geometryOption.color,\n seriesField = geometryOption.seriesField,\n groupField = geometryOption.groupField,\n isGroup = geometryOption.isGroup;\n var FIELD_KEY = ['xField', 'yField'];\n\n if ((0, _option.isLine)(geometryOption)) {\n // 绘制线\n (0, _geometries.line)((0, _utils.deepAssign)({}, params, {\n options: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({}, (0, _utils.pick)(options, FIELD_KEY)), geometryOption), {\n line: {\n color: geometryOption.color,\n style: geometryOption.lineStyle\n }\n })\n })); // 绘制点\n\n (0, _geometries.point)((0, _utils.deepAssign)({}, params, {\n options: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({}, (0, _utils.pick)(options, FIELD_KEY)), geometryOption), {\n point: geometryOption.point && (0, _tslib.__assign)({\n color: color,\n shape: 'circle'\n }, geometryOption.point)\n })\n })); // adjust\n\n var adjust_1 = [];\n\n if (isGroup) {\n adjust_1.push({\n type: 'dodge',\n dodgeBy: groupField || seriesField,\n customOffset: 0\n });\n }\n\n if (isStack) {\n adjust_1.push({\n type: 'stack'\n });\n }\n\n if (adjust_1.length) {\n (0, _util.each)(chart.geometries, function (g) {\n g.adjust(adjust_1);\n });\n }\n }\n\n if ((0, _option.isColumn)(geometryOption)) {\n (0, _geometries.interval)((0, _utils.deepAssign)({}, params, {\n options: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({}, (0, _utils.pick)(options, FIELD_KEY)), geometryOption), {\n widthRatio: geometryOption.columnWidthRatio,\n interval: (0, _tslib.__assign)((0, _tslib.__assign)({}, (0, _utils.pick)(geometryOption, ['color'])), {\n style: geometryOption.columnStyle\n })\n })\n }));\n }\n\n return params;\n}\n\n/***/ }),\n/* 1144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.renderSlider = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\n/**\n * 生成右侧 View 的 slider\n * 由于双轴图是多 View , 需要监听左侧 Slider 的 change 事件来同步右侧 View\n * @param { View } view 右侧视图\n * @param { number[] } sliderValue 滑块当前值\n * @returns void\n */\nvar renderSlider = function renderSlider(view, sliderValue) {\n var min = sliderValue[0],\n max = sliderValue[1];\n var data = view.getOptions().data;\n var xScale = view.getXScale();\n var dataSize = (0, _util.size)(data);\n\n if (!xScale || !dataSize) {\n return;\n }\n\n var isHorizontal = true;\n var values = (0, _util.valuesOfKey)(data, xScale.field);\n var xValues = isHorizontal ? values : values.reverse();\n var xTickCount = (0, _util.size)(xValues);\n var minIndex = Math.floor(min * (xTickCount - 1));\n var maxIndex = Math.floor(max * (xTickCount - 1)); // 增加 x 轴的过滤器\n\n view.filter(xScale.field, function (value) {\n var idx = xValues.indexOf(value);\n return idx > -1 ? (0, _utils.isBetween)(idx, minIndex, maxIndex) : true;\n });\n view.render(true);\n};\n\nexports.renderSlider = renderSlider;\n\n/***/ }),\n/* 1145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TinyLine = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1146);\n\nvar _constants = __webpack_require__(159);\n\nvar _utils = __webpack_require__(123);\n\nvar TinyLine =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TinyLine, _super);\n\n function TinyLine() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'tiny-line';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n TinyLine.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData((0, _utils.getTinyData)(data));\n };\n\n TinyLine.prototype.getDefaultOptions = function () {\n return {\n appendPadding: 2,\n tooltip: (0, _tslib.__assign)({}, _constants.DEFAULT_TOOLTIP_OPTIONS),\n animation: true\n };\n };\n /**\n * 获取 迷你折线图 的适配器\n */\n\n\n TinyLine.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return TinyLine;\n}(_plot.Plot);\n\nexports.TinyLine = TinyLine;\n\n/***/ }),\n/* 1146 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _utils = __webpack_require__(12);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\nvar _data = __webpack_require__(107);\n\nvar _utils2 = __webpack_require__(123);\n\nvar _constants = __webpack_require__(159);\n\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n lineStyle = options.lineStyle,\n pointMapping = options.point;\n var seriesData = (0, _utils2.getTinyData)(data);\n chart.data(seriesData); // line geometry 处理\n\n var primary = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: _constants.X_FIELD,\n yField: _constants.Y_FIELD,\n line: {\n color: color,\n style: lineStyle\n },\n point: pointMapping\n }\n });\n var second = (0, _utils.deepAssign)({}, primary, {\n options: {\n tooltip: false\n }\n });\n (0, _geometries.line)(primary);\n (0, _geometries.point)(second);\n chart.axis(false);\n chart.legend(false); // scale\n\n (0, _common.scale)((_a = {}, _a[_constants.X_FIELD] = xAxis, _a[_constants.Y_FIELD] = yAxis, _a), (_b = {}, _b[_constants.X_FIELD] = {\n type: 'cat'\n }, _b[_constants.Y_FIELD] = (0, _data.adjustYMetaByZero)(seriesData, _constants.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你折线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(geometry, _common.theme, _common.tooltip, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TinyColumn = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(123);\n\nvar _adaptor = __webpack_require__(1148);\n\nvar _constants = __webpack_require__(1149);\n\nvar TinyColumn =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TinyColumn, _super);\n\n function TinyColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'tiny-column';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n TinyColumn.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData((0, _utils.getTinyData)(data));\n };\n\n TinyColumn.prototype.getDefaultOptions = function () {\n return {\n appendPadding: 2,\n tooltip: (0, _tslib.__assign)({}, _constants.DEFAULT_TOOLTIP_OPTIONS),\n animation: true\n };\n };\n /**\n * 获取 迷你柱形图 的适配器\n */\n\n\n TinyColumn.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return TinyColumn;\n}(_plot.Plot);\n\nexports.TinyColumn = TinyColumn;\n\n/***/ }),\n/* 1148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _constants = __webpack_require__(159);\n\nvar _utils2 = __webpack_require__(123);\n\nvar _data = __webpack_require__(107);\n\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n columnStyle = options.columnStyle,\n columnWidthRatio = options.columnWidthRatio;\n var seriesData = (0, _utils2.getTinyData)(data);\n chart.data(seriesData);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: _constants.X_FIELD,\n yField: _constants.Y_FIELD,\n widthRatio: columnWidthRatio,\n interval: {\n style: columnStyle,\n color: color\n }\n }\n });\n (0, _geometries.interval)(p);\n chart.axis(false);\n chart.legend(false);\n chart.interaction('element-active'); // scale\n\n (0, _common.scale)((_a = {}, _a[_constants.X_FIELD] = xAxis, _a[_constants.Y_FIELD] = yAxis, _a), (_b = {}, _b[_constants.X_FIELD] = {\n type: 'cat'\n }, _b[_constants.Y_FIELD] = (0, _data.adjustYMetaByZero)(seriesData, _constants.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你柱形图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(geometry, _common.tooltip, _common.theme, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DEFAULT_TOOLTIP_OPTIONS = void 0;\n\nvar _util = __webpack_require__(0);\n\nvar DEFAULT_TOOLTIP_OPTIONS = {\n showTitle: false,\n shared: true,\n showMarkers: false,\n customContent: function customContent(x, data) {\n return \"\" + (0, _util.get)(data, [0, 'data', 'y'], 0);\n },\n containerTpl: '',\n itemTpl: '{value}',\n domStyles: {\n 'g2-tooltip': {\n padding: '2px 4px',\n fontSize: '10px'\n }\n }\n};\nexports.DEFAULT_TOOLTIP_OPTIONS = DEFAULT_TOOLTIP_OPTIONS;\n\n/***/ }),\n/* 1150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TinyArea = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _constants = __webpack_require__(159);\n\nvar _utils = __webpack_require__(123);\n\nvar _adaptor = __webpack_require__(1151);\n\nvar TinyArea =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TinyArea, _super);\n\n function TinyArea() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'tiny-area';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n TinyArea.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n this.chart.changeData((0, _utils.getTinyData)(data));\n };\n\n TinyArea.prototype.getDefaultOptions = function () {\n return {\n appendPadding: 2,\n tooltip: (0, _tslib.__assign)({}, _constants.DEFAULT_TOOLTIP_OPTIONS),\n // 默认样式\n color: 'l(90) 0:#E5EDFE 1:#ffffff',\n areaStyle: {\n fillOpacity: 0.6\n },\n line: {\n size: 1,\n color: '#5B8FF9'\n },\n animation: true\n };\n };\n /**\n * 获取 迷你面积图 的适配器\n */\n\n\n TinyArea.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return TinyArea;\n}(_plot.Plot);\n\nexports.TinyArea = TinyArea;\n\n/***/ }),\n/* 1151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _constants = __webpack_require__(159);\n\nvar _utils2 = __webpack_require__(123);\n\nvar _data = __webpack_require__(107);\n\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n color = options.color,\n areaStyle = options.areaStyle,\n pointOptions = options.point,\n lineOptions = options.line;\n var seriesData = (0, _utils2.getTinyData)(data);\n chart.data(seriesData);\n var primary = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: _constants.X_FIELD,\n yField: _constants.Y_FIELD,\n area: {\n color: color,\n style: areaStyle\n },\n line: lineOptions,\n point: pointOptions\n }\n });\n var second = (0, _utils.deepAssign)({}, primary, {\n options: {\n tooltip: false\n }\n }); // area geometry 处理\n\n (0, _geometries.area)(primary);\n (0, _geometries.line)(second);\n (0, _geometries.point)(second);\n chart.axis(false);\n chart.legend(false); // scale\n\n (0, _common.scale)((_a = {}, _a[_constants.X_FIELD] = xAxis, _a[_constants.Y_FIELD] = yAxis, _a), (_b = {}, _b[_constants.X_FIELD] = {\n type: 'cat'\n }, _b[_constants.Y_FIELD] = (0, _data.adjustYMetaByZero)(seriesData, _constants.Y_FIELD), _b))(params);\n return params;\n}\n/**\n * 迷你面积图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(geometry, _common.tooltip, _common.theme, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Histogram = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _histogram = __webpack_require__(528);\n\nvar _adaptor = __webpack_require__(1153);\n\nvar Histogram =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Histogram, _super);\n\n function Histogram() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'histogram';\n return _this;\n }\n\n Histogram.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var _a = this.options,\n binField = _a.binField,\n binNumber = _a.binNumber,\n binWidth = _a.binWidth,\n stackField = _a.stackField;\n this.chart.changeData((0, _histogram.binHistogram)(data, binField, binWidth, binNumber, stackField));\n };\n\n Histogram.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n // @ts-ignore\n columnStyle: {\n stroke: '#FFFFFF'\n },\n tooltip: {\n shared: true,\n showMarkers: false\n },\n interactions: [{\n type: 'active-region'\n }]\n });\n };\n /**\n * 获取直方图的适配器\n */\n\n\n Histogram.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Histogram;\n}(_plot.Plot);\n\nexports.Histogram = Histogram;\n\n/***/ }),\n/* 1153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _histogram = __webpack_require__(528);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n binField = options.binField,\n binNumber = options.binNumber,\n binWidth = options.binWidth,\n color = options.color,\n stackField = options.stackField,\n legend = options.legend,\n columnStyle = options.columnStyle; // 处理数据\n\n var plotData = (0, _histogram.binHistogram)(data, binField, binWidth, binNumber, stackField);\n chart.data(plotData);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: 'range',\n yField: 'count',\n seriesField: stackField,\n isStack: true,\n interval: {\n color: color,\n style: columnStyle\n }\n }\n });\n (0, _geometries.interval)(p); // 图例\n\n if (legend && stackField) {\n chart.legend(stackField, legend);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis;\n return (0, _utils.flow)((0, _common.scale)({\n range: xAxis,\n count: yAxis\n }))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis('range', false);\n } else {\n chart.axis('range', xAxis);\n }\n\n if (yAxis === false) {\n chart.axis('count', false);\n } else {\n chart.axis('count', yAxis);\n }\n\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label;\n var geometry = (0, _utils.findGeometry)(chart, 'interval');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n geometry.label({\n fields: ['count'],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * 直方图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, meta, axis, _common.theme, label, _common.tooltip, _common.interaction, _common.animation)(params);\n}\n\n/***/ }),\n/* 1154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Progress = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(529);\n\nvar _constant = __webpack_require__(530);\n\nvar _utils = __webpack_require__(300);\n\nvar Progress =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Progress, _super);\n\n function Progress() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'process';\n return _this;\n }\n\n Progress.prototype.getDefaultOptions = function () {\n return {\n percent: 0.2,\n color: _constant.DEFAULT_COLOR,\n animation: true\n };\n };\n /**\n * 更新数据\n * @param percent\n */\n\n\n Progress.prototype.changeData = function (percent) {\n this.updateOption({\n percent: percent\n });\n this.chart.changeData((0, _utils.getProgressData)(percent));\n };\n /**\n * 获取 进度图 的适配器\n */\n\n\n Progress.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Progress;\n}(_plot.Plot);\n\nexports.Progress = Progress;\n\n/***/ }),\n/* 1155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RingProgress = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(300);\n\nvar _adaptor = __webpack_require__(1156);\n\nvar RingProgress =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RingProgress, _super);\n\n function RingProgress() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'ring-process';\n return _this;\n }\n\n RingProgress.prototype.getDefaultOptions = function () {\n return {\n percent: 0.2,\n innerRadius: 0.8,\n radius: 0.98,\n color: ['#FAAD14', '#E8EDF3'],\n statistic: {\n title: false,\n content: {\n style: {\n fontSize: '14px',\n fontWeight: 300,\n fill: '#4D4D4D',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n formatter: function formatter(_a) {\n var percent = _a.percent;\n return (percent * 100).toFixed(2) + \"%\";\n }\n }\n },\n animation: true\n };\n };\n /**\n * 更新数据\n * @param percent\n */\n\n\n RingProgress.prototype.changeData = function (percent) {\n this.updateOption({\n percent: percent\n });\n this.chart.data((0, _utils.getProgressData)(percent)); // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n\n (0, _adaptor.statistic)({\n chart: this.chart,\n options: this.options\n }, true);\n };\n /**\n * 获取 环形进度图 的适配器\n */\n\n\n RingProgress.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return RingProgress;\n}(_plot.Plot);\n\nexports.RingProgress = RingProgress;\n\n/***/ }),\n/* 1156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.statistic = statistic;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _common = __webpack_require__(25);\n\nvar _adaptor = __webpack_require__(529);\n\nvar _constant = __webpack_require__(197);\n\n/**\n * coordinate 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n radius = options.radius; // coordinate\n\n chart.coordinate('theta', {\n innerRadius: innerRadius,\n radius: radius\n });\n return params;\n}\n/**\n * statistic 配置\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n statistic = options.statistic,\n percent = options.percent,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n /** 中心文本 指标卡 */\n\n if (innerRadius && statistic) {\n var transformContent = statistic.content;\n\n if (transformContent && !transformContent.formatter) {\n // @ts-ignore\n transformContent.formatter = function (_a) {\n var percent = _a.percent;\n var metaFormatter = (0, _util.get)(meta, [_constant.PERCENT, 'formatter']);\n\n if (metaFormatter) {\n return metaFormatter(percent);\n }\n\n return percent;\n };\n }\n\n (0, _utils.renderStatistic)(chart, {\n statistic: (0, _tslib.__assign)((0, _tslib.__assign)({}, statistic), {\n content: transformContent\n }),\n plotType: 'ring-progress'\n }, {\n percent: percent\n });\n }\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n/**\n * 环形进度图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(_adaptor.geometry, (0, _common.scale)({}), coordinate, statistic, _common.animation, _common.theme, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1157 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Heatmap = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1158);\n\n__webpack_require__(1159);\n\n__webpack_require__(1160);\n\n// registered shapes\nvar Heatmap =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Heatmap, _super);\n\n function Heatmap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'heatmap';\n return _this;\n }\n /**\n * 获取直方图的适配器\n */\n\n\n Heatmap.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n Heatmap.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n type: 'polygon',\n legend: false,\n xAxis: {\n tickLine: null,\n line: null,\n grid: {\n alignTick: false,\n line: {\n style: {\n lineWidth: 1,\n lineDash: null,\n stroke: '#f0f0f0'\n }\n }\n }\n },\n yAxis: {\n grid: {\n alignTick: false,\n line: {\n style: {\n lineWidth: 1,\n lineDash: null,\n stroke: '#f0f0f0'\n }\n }\n }\n }\n });\n };\n\n return Heatmap;\n}(_plot.Plot);\n\nexports.Heatmap = Heatmap;\n\n/***/ }),\n/* 1158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant = __webpack_require__(121);\n\nvar _common = __webpack_require__(25);\n\n/**\n * 数据字段映射\n * @param params\n */\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n type = options.type,\n reflect = options.reflect,\n xField = options.xField,\n yField = options.yField,\n colorField = options.colorField,\n sizeField = options.sizeField,\n sizeRatio = options.sizeRatio,\n shape = options.shape,\n color = options.color;\n chart.data(data);\n var geometry;\n\n if (type === 'density') {\n geometry = chart.heatmap().position(xField + \"*\" + yField);\n } else {\n geometry = chart.polygon().position(xField + \"*\" + yField);\n }\n\n if (colorField) {\n geometry.color(colorField, color || _constant.DEFAULT_COLORS.GRADIENT.CONTINUOUS);\n }\n\n if (reflect) {\n chart.coordinate().reflect(reflect);\n }\n /**\n * The ratio between the actual size and the max available size, must be in range `[0,1]`.\n *\n * If the `sizeRatio` attribute is undefined or it exceeds the range,\n * `checkedSizeRatio` would be set to 1 as default.\n */\n\n\n var checkedSizeRatio = 1;\n\n if (sizeRatio || sizeRatio === 0) {\n if (!shape && !sizeField) {\n console.warn('sizeRatio is not in effect: Must define shape or sizeField first');\n } else if (sizeRatio < 0 || sizeRatio > 1) {\n console.warn('sizeRatio is not in effect: It must be a number in [0,1]');\n } else {\n checkedSizeRatio = sizeRatio;\n }\n } // when it has to change shape from original rect\n\n\n if (shape) {\n // just to change shape in cell\n if (!sizeField) {\n geometry.shape('', function () {\n return [shape, 1, checkedSizeRatio];\n });\n } // specific shape in different size\n\n\n if (sizeField) {\n var field_1 = data.map(function (row) {\n return row[sizeField];\n });\n var min_1 = Math.min.apply(Math, field_1);\n var max_1 = Math.max.apply(Math, field_1);\n geometry.shape(sizeField, function (v) {\n return [shape, (v - min_1) / (max_1 - min_1), checkedSizeRatio];\n });\n }\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(yField, false);\n } else {\n chart.axis(yField, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n colorField = options.colorField;\n\n if (legend) {\n chart.legend(colorField, legend);\n } else {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * 样式\n * @param params\n */\n\n\nfunction style(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n colorField = options.colorField,\n sizeField = options.sizeField,\n heatmapStyle = options.heatmapStyle;\n var geometry = chart.geometries[0];\n\n if (heatmapStyle && geometry) {\n if ((0, _util.isFunction)(heatmapStyle)) {\n geometry.style(xField + \"*\" + yField + \"*\" + colorField + \"*\" + sizeField, heatmapStyle);\n } else if ((0, _util.isObject)(heatmapStyle)) {\n geometry.style(heatmapStyle);\n }\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n colorField = options.colorField,\n type = options.type;\n var geometry = (0, _utils.findGeometry)(chart, type === 'density' ? 'heatmap' : 'polygon');\n\n if (!label) {\n geometry.label(false);\n } else if (colorField) {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n geometry.label({\n fields: [colorField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * 热力图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(field, meta, _common.theme, axis, legend, _common.tooltip, style, label, (0, _common.annotation)(), _common.interaction, _common.animation)(params);\n}\n\n/***/ }),\n/* 1159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\n(0, _g.registerShape)('polygon', 'circle', {\n draw: function draw(cfg, group) {\n var _a, _b;\n\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxRadius = Math.min(width, height) / 2;\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var radiusRatio = Math.sqrt(sizeRatio);\n var radius = maxRadius * radiusRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('circle', {\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({\n x: cx,\n y: cy,\n r: radius\n }, cfg.defaultStyle), cfg.style), {\n fill: fill\n })\n });\n return polygon;\n }\n});\n\n/***/ }),\n/* 1160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\n(0, _g.registerShape)('polygon', 'square', {\n draw: function draw(cfg, group) {\n var _a, _b;\n\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxSideLength = Math.min(width, height);\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var lenRatio = Math.sqrt(sizeRatio);\n var sideLength = maxSideLength * lenRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('rect', {\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({\n x: cx - sideLength / 2,\n y: cy - sideLength / 2,\n width: sideLength,\n height: sideLength\n }, cfg.defaultStyle), cfg.style), {\n fill: fill\n })\n });\n return polygon;\n }\n});\n\n/***/ }),\n/* 1161 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Box = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1162);\n\nvar _utils2 = __webpack_require__(531);\n\nvar _constant = __webpack_require__(301);\n\nvar Box =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Box, _super);\n\n function Box() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'box';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Box.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var yField = this.options.yField;\n var outliersView = this.chart.views.find(function (v) {\n return v.id === _constant.OUTLIERS_VIEW_ID;\n });\n\n if (outliersView) {\n outliersView.data(data);\n }\n\n this.chart.changeData((0, _utils2.transformData)(data, yField));\n };\n /**\n * 获取 箱型图 默认配置项\n */\n\n\n Box.prototype.getDefaultOptions = function () {\n var _a;\n\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n meta: (_a = {}, _a[_constant.BOX_RANGE] = {\n min: 0,\n alias: _constant.BOX_RANGE_ALIAS\n }, _a),\n // 默认区域交互\n interactions: [{\n type: 'active-region'\n }],\n // 默认 tooltips 共享,不显示 markers\n tooltip: {\n showMarkers: false,\n showCrosshairs: true,\n shared: true\n }\n });\n };\n /**\n * 获取 箱型图 的适配器\n */\n\n\n Box.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Box;\n}(_plot.Plot);\n\nexports.Box = Box;\n\n/***/ }),\n/* 1162 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.legend = legend;\nexports.tooltip = tooltip;\nexports.adaptor = adaptor;\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant = __webpack_require__(121);\n\nvar _constant2 = __webpack_require__(301);\n\nvar _utils2 = __webpack_require__(531);\n\n/**\n * 字段\n * @param params\n */\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n groupField = options.groupField,\n color = options.color;\n var yFieldName = Array.isArray(yField) ? _constant2.BOX_RANGE : yField;\n var geometry = chart.schema().position(xField + \"*\" + yFieldName).shape('box'); // set group field as color channel\n\n if (groupField) {\n geometry.color(groupField, color).adjust('dodge');\n }\n\n chart.data((0, _utils2.transformData)(options.data, yField));\n return params;\n}\n\nfunction outliersPoint(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n data = options.data,\n outliersField = options.outliersField,\n outliersStyle = options.outliersStyle,\n padding = options.padding;\n if (!outliersField) return params;\n var outliersView = chart.createView({\n padding: padding,\n id: _constant2.OUTLIERS_VIEW_ID\n });\n outliersView.data(data);\n outliersView.axis(false);\n var geometry = outliersView.point().position(xField + \"*\" + outliersField).shape('circle');\n /**\n * style 的几种情况\n * g.style({ fill: 'red' });\n * g.style('x*y*color', (x, y, color) => ({ fill: 'red' }));\n */\n\n if ((0, _util.isFunction)(outliersStyle)) {\n geometry.style(xField + \"*\" + outliersField, function (_x, _outliers) {\n var _a;\n\n return outliersStyle((_a = {}, _a[xField] = _x, _a[outliersField] = _outliers, _a));\n });\n } else if ((0, _util.isObject)(outliersStyle)) {\n geometry.style(outliersStyle);\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var meta = options.meta,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField,\n outliersField = options.outliersField;\n var yFieldName = Array.isArray(yField) ? _constant2.BOX_RANGE : yField;\n var baseMeta = {}; // make yField and outliersField share y mate\n\n if (outliersField) {\n var syncName = _constant2.BOX_SYNC_NAME;\n baseMeta = (_a = {}, _a[outliersField] = {\n sync: syncName,\n nice: true\n }, _a[yFieldName] = {\n sync: syncName,\n nice: true\n }, _a);\n }\n\n var scales = (0, _utils.deepAssign)(baseMeta, meta, (_b = {}, _b[xField] = (0, _utils.pick)(xAxis, _constant.AXIS_META_CONFIG_KEYS), _b[yFieldName] = (0, _utils.pick)(yAxis, _constant.AXIS_META_CONFIG_KEYS), _b));\n chart.scale(scales);\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n var yFieldName = Array.isArray(yField) ? _constant2.BOX_RANGE : yField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(_constant2.BOX_RANGE, false);\n } else {\n chart.axis(yFieldName, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n groupField = options.groupField;\n\n if (groupField) {\n if (legend) {\n chart.legend(groupField, legend);\n } else {\n // Grouped Box Chart default has legend, and it's position is `bottom`\n chart.legend(groupField, {\n position: 'bottom'\n });\n }\n } else {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * 样式\n * @param params\n */\n\n\nfunction style(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n boxStyle = options.boxStyle;\n var geometry = (0, _utils.findGeometry)(chart, 'schema');\n var yFieldName = Array.isArray(yField) ? _constant2.BOX_RANGE : yField;\n /**\n * style 的几种情况\n * g.style({ fill: 'red' });\n * g.style('x*y*color', (x, y, color) => ({ fill: 'red' }));\n */\n\n if ((0, _util.isFunction)(boxStyle)) {\n geometry.style(xField + \"*\" + yFieldName, function (_x, _y) {\n var _a;\n\n return boxStyle((_a = {}, _a[xField] = _x, _a[yFieldName] = _y, _a));\n });\n } else if ((0, _util.isObject)(boxStyle)) {\n geometry.style(boxStyle);\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip;\n\n if (tooltip !== undefined) {\n chart.tooltip(tooltip);\n }\n\n return params;\n}\n/**\n * 箱型图适配器\n * @param params\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(field, outliersPoint, meta, axis, style, legend, tooltip, _common.interaction, _common.animation, _common.theme)(params);\n}\n\n/***/ }),\n/* 1163 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Stock = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _utils = __webpack_require__(12);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1164);\n\nvar _utils2 = __webpack_require__(532);\n\nvar _constant = __webpack_require__(302);\n\nvar Stock =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Stock, _super);\n\n function Stock() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'stock';\n return _this;\n }\n /**\n * 默认配置\n * g2/g2plot默 认 配 置 --> 图 表 默 认 配 置 --> 开 发 者 自 定 义 配 置 --> 最 终 绘 图 配 置\n */\n\n\n Stock.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n // 设置默认图表 tooltips\n tooltip: _constant.DEFAULT_TOOLTIP_OPTIONS,\n interactions: [{\n type: 'tooltip'\n }],\n legend: {\n position: 'top-left'\n }\n });\n };\n /**\n * 获取 蜡烛图 的适配器\n */\n\n\n Stock.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n /**\n * @override\n * @param data\n */\n\n\n Stock.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n var yField = this.options.yField;\n this.chart.changeData((0, _utils2.getStockData)(data, yField));\n };\n\n return Stock;\n}(_plot.Plot);\n\nexports.Stock = Stock;\n\n/***/ }),\n/* 1164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.meta = meta;\nexports.axis = axis;\nexports.tooltip = tooltip;\nexports.legend = legend;\nexports.adaptor = adaptor;\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant = __webpack_require__(121);\n\nvar _constant2 = __webpack_require__(302);\n\nvar _utils2 = __webpack_require__(532);\n\n/**\n * 图表配置处理\n * @param params\n */\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField;\n var data = options.data;\n chart.data((0, _utils2.getStockData)(data, yField));\n var geometry = chart.schema().position(xField + \"*\" + _constant2.Y_FIELD).shape('candle');\n geometry.color(_constant2.TREND_FIELD, _constant2.TREND_COLOR);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var chart = params.chart,\n options = params.options;\n var meta = options.meta,\n xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField;\n var baseMeta = (_a = {}, _a[xField] = {\n type: 'timeCat',\n tickCount: 6\n }, _a[_constant2.TREND_FIELD] = {\n values: [_constant2.TREND_UP, _constant2.TREND_DOWN]\n }, _a);\n var scales = (0, _utils.deepAssign)(baseMeta, meta, (_b = {}, _b[xField] = (0, _utils.pick)(xAxis, _constant.AXIS_META_CONFIG_KEYS), _b[_constant2.Y_FIELD] = (0, _utils.pick)(yAxis, _constant.AXIS_META_CONFIG_KEYS), _b));\n chart.scale(scales);\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(_constant2.Y_FIELD, false);\n } else {\n chart.axis(_constant2.Y_FIELD, yAxis);\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n _a = options.meta,\n meta = _a === void 0 ? {} : _a,\n _b = options.tooltip,\n tooltip = _b === void 0 ? {} : _b;\n var geometry = (0, _utils.findGeometry)(chart, 'schema');\n var open = yField[0],\n close = yField[1],\n high = yField[2],\n low = yField[3];\n var openAlias = meta[open] ? meta[open].alias || open : open;\n var closeAlias = meta[close] ? meta[close].alias || open : close;\n var highAlias = meta[high] ? meta[high].alias || high : high;\n var lowAlias = meta[low] ? meta[low].alias || low : low; // geom级别tooltip\n\n var baseGeomTooltipOptions = {\n fields: [xField, open, close, high, low],\n callback: function callback(xFieldVal, openVal, closeVal, highVal, lowVal) {\n var tpl = {\n name: xFieldVal,\n value: \"\\n
\" + openAlias + \"\\uFF1A\" + openVal + \"\\n
\" + closeAlias + \"\\uFF1A\" + closeVal + \"\\n
\" + highAlias + \"\\uFF1A\" + highVal + \"\\n
\" + lowAlias + \"\\uFF1A\" + lowVal + \"\\n \"\n };\n return tpl;\n }\n }; // chart级别tooltip, text格式化显示内容\n\n var baseTooltipOptions = {\n crosshairs: {\n text: function text(type, defaultContent, items) {\n var tooltipCrosshairsText = {\n position: 'end'\n };\n\n if (type === 'x') {\n var item = items[0];\n tooltipCrosshairsText['content'] = item ? item.data[xField] : defaultContent;\n } else {\n tooltipCrosshairsText['content'] = defaultContent;\n }\n\n return tooltipCrosshairsText;\n }\n }\n };\n\n if (tooltip) {\n if ((0, _util.isObject)(tooltip)) {\n var chartTooltip = (0, _utils.deepAssign)({}, baseTooltipOptions, tooltip);\n chart.tooltip(chartTooltip);\n geometry.tooltip(baseGeomTooltipOptions);\n }\n } else {\n chart.tooltip(false);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend;\n\n if (legend) {\n chart.legend(_constant2.TREND_FIELD, legend);\n } else if (legend === false) {\n chart.legend(false);\n }\n\n return params;\n}\n/**\n * K线图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n (0, _utils.flow)(field, meta, _common.theme, axis, tooltip, legend, _common.interaction, _common.animation)(params);\n}\n\n/***/ }),\n/* 1165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"FUNNEL_CONVERSATION_FIELD\", {\n enumerable: true,\n get: function get() {\n return _constant.FUNNEL_CONVERSATION;\n }\n});\nexports.Funnel = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1166);\n\nvar _constant = __webpack_require__(124);\n\nvar Funnel =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Funnel, _super);\n\n function Funnel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'funnel';\n return _this;\n }\n /**\n * 获取 漏斗图 默认配置项\n */\n\n\n Funnel.prototype.getDefaultOptions = function () {\n // 由于不同漏斗图 defaultOption 有部分逻辑不同,此处仅处理 core.getDefaultOptions 覆盖范围,funnel 的 defaulOption 为不分散逻辑统一写到 adaptor 的 defaultOption 中\n return {\n appendPadding: [0, 80]\n };\n };\n /**\n * 获取 漏斗图 的适配器\n */\n\n\n Funnel.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Funnel;\n}(_plot.Plot);\n\nexports.Funnel = Funnel;\n\n/***/ }),\n/* 1166 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.meta = meta;\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _conversion = __webpack_require__(520);\n\nvar _basic = __webpack_require__(533);\n\nvar _compare = __webpack_require__(1167);\n\nvar _facet = __webpack_require__(1168);\n\nvar _dynamicHeight = __webpack_require__(1169);\n\nvar _constant = __webpack_require__(124);\n\n/**\n *\n * 各式漏斗图geometry实现细节有较大不同,\n * 1. 普通漏斗图:interval.shape('funnel')\n * 2. 对比漏斗图:分面\n * 3. 动态高度漏斗图:polypon\n * 4. 分面漏斗图:普通 + list 分面\n* /\n\n/**\n * options 处理\n * @param params\n */\nfunction defaultOptions(params) {\n var _a;\n\n var options = params.options;\n var compareField = options.compareField,\n xField = options.xField,\n yField = options.yField;\n var defaultOption = {\n minSize: 0,\n maxSize: 1,\n meta: (_a = {}, _a[_constant.FUNNEL_MAPPING_VALUE] = {\n min: 0,\n max: 1,\n nice: false\n }, _a),\n label: compareField ? {\n fields: [xField, yField, compareField, _constant.FUNNEL_PERCENT, _constant.FUNNEL_CONVERSATION],\n style: {\n fill: '#fff',\n fontSize: 12\n },\n formatter: function formatter(datum) {\n return \"\" + datum[yField];\n }\n } : {\n fields: [xField, yField, _constant.FUNNEL_PERCENT, _constant.FUNNEL_CONVERSATION],\n offset: 0,\n position: 'middle',\n style: {\n fill: '#fff',\n fontSize: 12\n },\n formatter: function formatter(datum) {\n return datum[xField] + \" \" + datum[yField];\n }\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n shared: false,\n title: xField,\n formatter: function formatter(datum) {\n return {\n name: datum[xField],\n value: datum[yField]\n };\n }\n },\n conversionTag: {\n offsetX: 10,\n offsetY: 0,\n style: {},\n // conversionTag 的计算和显示逻辑统一保持一致\n formatter: function formatter(datum) {\n return \"\\u8F6C\\u5316\\u7387: \" + _conversion.conversionTagFormatter.apply(void 0, datum[_constant.FUNNEL_CONVERSATION]);\n }\n }\n };\n return (0, _utils.deepAssign)({\n options: defaultOption\n }, params);\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var options = params.options;\n var compareField = options.compareField,\n dynamicHeight = options.dynamicHeight,\n seriesField = options.seriesField;\n\n if (seriesField) {\n return (0, _facet.facetFunnel)(params);\n }\n\n if (compareField) {\n return (0, _compare.compareFunnel)(params);\n }\n\n if (dynamicHeight) {\n return (0, _dynamicHeight.dynamicHeightFunnel)(params);\n }\n\n return (0, _basic.basicFunnel)(params);\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a)))(params);\n}\n/**\n * 坐标轴\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend;\n\n if (legend === false) {\n chart.legend(false);\n } else {\n chart.legend(legend); // TODO FIX: legend-click 时间和转化率组件之间的关联\n }\n\n return params;\n}\n/**\n * 漏斗图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(defaultOptions, geometry, meta, axis, _common.tooltip, _common.interaction, legend, _common.animation, _common.theme, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1167 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.compareFunnel = compareFunnel;\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _base = __webpack_require__(78);\n\nvar _constant = __webpack_require__(124);\n\nvar _common = __webpack_require__(303);\n\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var _b = options.data,\n data = _b === void 0 ? [] : _b,\n yField = options.yField; // 绘制漏斗图\n\n chart.data(data);\n chart.scale((_a = {}, _a[yField] = {\n sync: true\n }, _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xField = options.xField,\n yField = options.yField,\n color = options.color,\n compareField = options.compareField,\n isTransposed = options.isTransposed,\n tooltip = options.tooltip,\n maxSize = options.maxSize,\n minSize = options.minSize,\n label = options.label;\n chart.facet('mirror', {\n fields: [compareField],\n // 漏斗图的转置规则与分面相反,默认是垂直布局\n transpose: !isTransposed,\n padding: isTransposed ? 0 : [32, 0, 0, 0],\n eachView: function eachView(view, facet) {\n var index = isTransposed ? facet.rowIndex : facet.columnIndex;\n\n if (!isTransposed) {\n view.coordinate({\n type: 'rect',\n actions: [['transpose'], ['scale', index === 0 ? -1 : 1, -1]]\n });\n }\n\n var formatterData = (0, _common.transformData)(facet.data, data, {\n yField: yField,\n maxSize: maxSize,\n minSize: minSize\n });\n view.data(formatterData); // 绘制图形\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField, compareField]),\n fields = _a.fields,\n formatter = _a.formatter;\n\n var defaultFacetLabel = isTransposed ? {\n offset: index === 0 ? 10 : -23,\n position: index === 0 ? 'bottom' : 'top'\n } : {\n offset: 10,\n position: 'left',\n style: {\n textAlign: index === 0 ? 'end' : 'start'\n }\n };\n (0, _base.geometry)({\n chart: view,\n options: {\n type: 'interval',\n xField: xField,\n yField: _constant.FUNNEL_MAPPING_VALUE,\n colorField: xField,\n tooltipFields: (0, _util.isArray)(fields) && fields.concat([_constant.FUNNEL_PERCENT, _constant.FUNNEL_CONVERSATION]),\n mapping: {\n shape: 'funnel',\n tooltip: formatter,\n color: color,\n style: {\n lineWidth: 1,\n stroke: '#fff'\n }\n },\n label: label === false ? false : (0, _utils.deepAssign)({}, defaultFacetLabel, label)\n }\n });\n }\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\n\n\nfunction conversionTag(params) {\n var chart = params.chart,\n options = params.options;\n var conversionTag = options.conversionTag,\n isTransposed = options.isTransposed;\n chart.once('beforepaint', function () {\n chart.views.forEach(function (view, viewIndex) {\n var getLineCoordinate = function getLineCoordinate(datum, datumIndex, data, initLineOption) {\n var ratio = viewIndex === 0 ? -1 : 1;\n return (0, _utils.deepAssign)({}, initLineOption, {\n start: [datumIndex - 0.5, datum[_constant.FUNNEL_MAPPING_VALUE]],\n end: [datumIndex - 0.5, datum[_constant.FUNNEL_MAPPING_VALUE] + 0.05],\n text: isTransposed ? {\n style: {\n textAlign: 'start'\n }\n } : {\n offsetX: conversionTag !== false ? ratio * conversionTag.offsetX : 0,\n style: {\n textAlign: viewIndex === 0 ? 'end' : 'start'\n }\n }\n });\n };\n\n (0, _common.conversionTagComponent)(getLineCoordinate)((0, _utils.deepAssign)({}, {\n chart: view,\n options: options\n }));\n });\n });\n return params;\n}\n/**\n * 对比漏斗\n * @param chart\n * @param options\n */\n\n\nfunction compareFunnel(params) {\n return (0, _utils.flow)(field, geometry, conversionTag)(params);\n}\n\n/***/ }),\n/* 1168 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.facetFunnel = facetFunnel;\n\nvar _utils = __webpack_require__(12);\n\nvar _basic = __webpack_require__(533);\n\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var _b = options.data,\n data = _b === void 0 ? [] : _b,\n yField = options.yField; // 绘制漏斗图\n\n chart.data(data);\n chart.scale((_a = {}, _a[yField] = {\n sync: true\n }, _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var seriesField = options.seriesField,\n isTransposed = options.isTransposed;\n chart.facet('rect', {\n fields: [seriesField],\n padding: [isTransposed ? 0 : 32, 10, 0, 10],\n eachView: function eachView(view, facet) {\n (0, _basic.basicFunnel)((0, _utils.deepAssign)({}, params, {\n chart: view,\n options: {\n data: facet.data\n }\n }));\n }\n });\n return params;\n}\n/**\n * 分面漏斗\n * @param chart\n * @param options\n */\n\n\nfunction facetFunnel(params) {\n return (0, _utils.flow)(field, geometry)(params);\n}\n\n/***/ }),\n/* 1169 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dynamicHeightFunnel = dynamicHeightFunnel;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant = __webpack_require__(124);\n\nvar _base = __webpack_require__(78);\n\nvar _tooltip = __webpack_require__(90);\n\nvar _common = __webpack_require__(303);\n\n/**\n * 动态高度漏斗图\n * @param params\n * 需求: 每个漏斗项的高度根据 yfield 等比生成。漏斗上下宽度比为2,即斜率为 2。\n * 实现方式: 使用 g2 多边形,data -> 点坐标 -> 绘制\n * 以漏斗底部中心点为坐标轴原点,漏斗在 -0.5 <= x <= 0.5, 0 <= y <= 1 的正方形中绘制\n * 先计算第一象限的点, 第二象限的点即为镜像 x 轴取反。\n * 第一象限共需计算 data.length + 1 个点,在 y = 4x - 1 上。首尾分别是[0.5, 1], [0.25, 0]。根据 data 计算出 y 值,从而得到 y 值\n */\n\n/**\n * 处理数据\n * @param params\n */\nfunction field(params) {\n var chart = params.chart,\n options = params.options;\n var _a = options.data,\n data = _a === void 0 ? [] : _a,\n yField = options.yField; // 计算各数据项所占高度\n\n var sum = (0, _util.reduce)(data, function (total, item) {\n return total + (item[yField] || 0);\n }, 0);\n var max = (0, _util.maxBy)(data, yField)[yField];\n var formatData = (0, _util.map)(data, function (row, index) {\n // 储存四个点 x,y 坐标,方向为顺时针,即 [左上, 右上,右下,左下]\n var x = [];\n var y = [];\n row[_constant.FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum; // 获取左上角,右上角坐标\n\n if (index) {\n var preItemX = data[index - 1][_constant.PLOYGON_X];\n var preItemY = data[index - 1][_constant.PLOYGON_Y];\n x[0] = preItemX[3];\n y[0] = preItemY[3];\n x[1] = preItemX[2];\n y[1] = preItemY[2];\n } else {\n x[0] = -0.5;\n y[0] = 1;\n x[1] = 0.5;\n y[1] = 1;\n } // 获取右下角坐标\n\n\n y[2] = y[1] - row[_constant.FUNNEL_TOTAL_PERCENT];\n x[2] = (y[2] + 1) / 4;\n y[3] = y[2];\n x[3] = -x[2]; // 赋值\n\n row[_constant.PLOYGON_X] = x;\n row[_constant.PLOYGON_Y] = y;\n row[_constant.FUNNEL_PERCENT] = (row[yField] || 0) / max;\n row[_constant.FUNNEL_CONVERSATION] = [(0, _util.get)(data, [index - 1, yField]), row[yField]];\n return row;\n });\n chart.data(formatData);\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n yField = options.yField,\n color = options.color,\n tooltip = options.tooltip,\n label = options.label;\n\n var _a = (0, _tooltip.getTooltipMapping)(tooltip, [xField, yField]),\n fields = _a.fields,\n formatter = _a.formatter; // 绘制漏斗图\n\n\n (0, _base.geometry)({\n chart: chart,\n options: {\n type: 'polygon',\n xField: _constant.PLOYGON_X,\n yField: _constant.PLOYGON_Y,\n colorField: xField,\n tooltipFields: (0, _util.isArray)(fields) && fields.concat([_constant.FUNNEL_PERCENT, _constant.FUNNEL_CONVERSATION]),\n label: label,\n mapping: {\n tooltip: formatter,\n color: color\n }\n }\n });\n return params;\n}\n/**\n * 转置处理\n * @param params\n */\n\n\nfunction transpose(params) {\n var chart = params.chart,\n options = params.options;\n var isTransposed = options.isTransposed;\n chart.coordinate({\n type: 'rect',\n actions: isTransposed ? [['transpose'], ['reflect', 'x']] : []\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\n\n\nfunction conversionTag(params) {\n var getLineCoordinate = function getLineCoordinate(datum, datumIndex, data, initLineOption) {\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, initLineOption), {\n start: [datum[_constant.PLOYGON_X][1], datum[_constant.PLOYGON_Y][1]],\n end: [datum[_constant.PLOYGON_X][1] + 0.05, datum[_constant.PLOYGON_Y][1]]\n });\n };\n\n (0, _common.conversionTagComponent)(getLineCoordinate)(params);\n return params;\n}\n/**\n * 动态高度漏斗\n * @param chart\n * @param options\n */\n\n\nfunction dynamicHeightFunnel(params) {\n return (0, _utils.flow)(field, geometry, transpose, conversionTag)(params);\n}\n\n/***/ }),\n/* 1170 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Liquid = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1171);\n\nvar _utils = __webpack_require__(534);\n\n__webpack_require__(1172);\n\n// register liquid shape\n\n/**\n * 传说中的水波图\n */\nvar Liquid =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Liquid, _super);\n\n function Liquid() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'liquid';\n return _this;\n }\n\n Liquid.prototype.getDefaultOptions = function () {\n return {\n color: '#6a99f9',\n radius: 0.9,\n statistic: {\n title: false,\n content: {\n formatter: function formatter(_a) {\n var percent = _a.percent;\n return (percent * 100).toFixed(2) + \"%\";\n },\n style: {\n opacity: 0.75,\n fontSize: '30px',\n lineHeight: '30px',\n textAlign: 'center'\n }\n }\n },\n outline: {\n border: 2,\n distance: 0\n },\n wave: {\n count: 3,\n length: 192\n }\n };\n };\n /**\n * 更新数据\n * @param percent\n */\n\n\n Liquid.prototype.changeData = function (percent) {\n this.updateOption({\n percent: percent\n });\n this.chart.data((0, _utils.getLiquidData)(percent));\n (0, _adaptor.statistic)({\n chart: this.chart,\n options: this.options\n }, true);\n };\n /**\n * 获取适配器\n */\n\n\n Liquid.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Liquid;\n}(_plot.Plot);\n\nexports.Liquid = Liquid;\n\n/***/ }),\n/* 1171 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.statistic = statistic;\nexports.adaptor = adaptor;\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils2 = __webpack_require__(534);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var percent = options.percent,\n color = options.color,\n liquidStyle = options.liquidStyle,\n radius = options.radius,\n outline = options.outline,\n wave = options.wave;\n chart.scale({\n percent: {\n min: 0,\n max: 1\n }\n });\n chart.data((0, _utils2.getLiquidData)(percent));\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: 'type',\n yField: 'percent',\n // radius 放到 columnWidthRatio 中。\n // 保证横向的大小是根据 redius 生成的\n widthRatio: radius,\n interval: {\n color: color,\n style: liquidStyle,\n shape: 'liquid-fill-gauge'\n }\n }\n });\n var ext = (0, _geometries.interval)(p).ext;\n var geometry = ext.geometry; // 将 radius 传入到自定义 shape 中\n\n geometry.customInfo({\n radius: radius,\n outline: outline,\n wave: wave\n }); // 关闭组件\n\n chart.legend(false);\n chart.axis(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 统计指标文档\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var statistic = options.statistic,\n percent = options.percent,\n meta = options.meta; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n\n if (statistic.content && !statistic.content.formatter) {\n var metaFormatter_1 = (0, _util.get)(meta, ['percent', 'formatter']); // @ts-ignore\n\n statistic.content.formatter = function (_a) {\n var percent = _a.percent;\n return metaFormatter_1 ? metaFormatter_1(percent) : (percent * 100).toFixed(2) + \"%\";\n };\n }\n\n (0, _utils.renderStatistic)(chart, {\n statistic: statistic,\n plotType: 'liquid'\n }, {\n percent: percent\n });\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n/**\n * 水波图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, statistic, (0, _common.scale)({}), _common.animation, _common.theme, _common.interaction)(params);\n}\n\n/***/ }),\n/* 1172 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _matrix = __webpack_require__(523);\n\nvar DURATION = 5000;\n/**\n * 一个线性映射的函数\n * @param min\n * @param max\n * @param factor\n */\n\nfunction lerp(min, max, factor) {\n return min + (max - min) * factor;\n}\n/**\n * 波浪的 attrs\n * @param cfg\n */\n\n\nfunction getFillAttrs(cfg) {\n var attrs = (0, _tslib.__assign)({\n opacity: 1\n }, cfg.style);\n\n if (cfg.color && !attrs.fill) {\n attrs.fill = cfg.color;\n }\n\n return attrs;\n}\n/**\n * 圆圈的 attrs\n * @param cfg\n */\n\n\nfunction getLineAttrs(cfg) {\n var defaultAttrs = {\n fill: '#fff',\n fillOpacity: 0,\n lineWidth: 4\n };\n var attrs = (0, _util.mix)({}, defaultAttrs, cfg.style);\n\n if (cfg.color && !attrs.stroke) {\n attrs.stroke = cfg.color;\n }\n\n if ((0, _util.isNumber)(cfg.opacity)) {\n attrs.opacity = attrs.strokeOpacity = cfg.opacity;\n }\n\n return attrs;\n}\n/**\n * 用贝塞尔曲线模拟正弦波\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n * c *----* d\n * b *\n * |\n * ... a * ..................\n *\n * whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1)\n *\n * @param x x position of the left-most point (a)\n * @param stage 0-3, stating which part of the wave it is\n * @param waveLength wave length of the sine wave\n * @param amplitude wave amplitude\n * @return 正弦片段曲线\n */\n\n\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n if (stage === 0) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2, amplitude / 2], [x + 1 / 2 * waveLength / Math.PI, amplitude], [x + waveLength / 4, amplitude]];\n }\n\n if (stage === 1) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), amplitude], [x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), amplitude / 2], [x + waveLength / 4, 0]];\n }\n\n if (stage === 2) {\n return [[x + 1 / 2 * waveLength / Math.PI / 2, -amplitude / 2], [x + 1 / 2 * waveLength / Math.PI, -amplitude], [x + waveLength / 4, -amplitude]];\n }\n\n return [[x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), -amplitude], [x + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), -amplitude / 2], [x + waveLength / 4, 0]];\n}\n/**\n * 获取水波路径\n * @param radius 半径\n * @param waterLevel 水位\n * @param waveLength 波长\n * @param phase 相位\n * @param amplitude 震幅\n * @param cx 圆心x\n * @param cy 圆心y\n * @return path 路径\n * @reference http://gitlab.alipay-inc.com/datavis/g6/blob/1.2.0/src/graph/utils/path.js#L135\n */\n\n\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n var curves = Math.ceil(2 * radius / waveLength * 4) * 4;\n var path = [];\n var _phase = phase; // map phase to [-Math.PI * 2, 0]\n\n while (_phase < -Math.PI * 2) {\n _phase += Math.PI * 2;\n }\n\n while (_phase > 0) {\n _phase -= Math.PI * 2;\n }\n\n _phase = _phase / Math.PI / 2 * waveLength;\n var left = cx - radius + _phase - radius * 2;\n /**\n * top-left corner as start point\n *\n * draws this point\n * |\n * \\|/\n * ~~~~~~~~\n * | |\n * +------+\n */\n\n path.push(['M', left, waterLevel]);\n /**\n * top wave\n *\n * ~~~~~~~~ <- draws this sine wave\n * | |\n * +------+\n */\n\n var waveRight = 0;\n\n for (var c = 0; c < curves; ++c) {\n var stage = c % 4;\n var pos = getWaterWavePositions(c * waveLength / 4, stage, waveLength, amplitude);\n path.push(['C', pos[0][0] + left, -pos[0][1] + waterLevel, pos[1][0] + left, -pos[1][1] + waterLevel, pos[2][0] + left, -pos[2][1] + waterLevel]);\n\n if (c === curves - 1) {\n waveRight = pos[2][0];\n }\n }\n /**\n * top-right corner\n *\n * ~~~~~~~~\n * 3. draws this line -> | | <- 1. draws this line\n * +------+\n * ^\n * |\n * 2. draws this line\n */\n\n\n path.push(['L', waveRight + left, cy + radius]);\n path.push(['L', left, cy + radius]);\n path.push(['Z']); // path.push(['L', left, waterLevel]);\n\n return path;\n}\n/**\n * 添加水波\n * @param x 中心x\n * @param y 中心y\n * @param level 水位等级 0~1\n * @param waveCount 水波数\n * @param waveAttrs 色值\n * @param group 图组\n * @param clip 用于剪切的图形\n * @param radius 绘制图形的高度\n * @param waveLength 波的长度\n */\n\n\nfunction addWaterWave(x, y, level, waveCount, waveAttrs, group, clip, radius, waveLength) {\n var fill = waveAttrs.fill,\n opacity = waveAttrs.opacity;\n var bbox = clip.getBBox();\n var width = bbox.maxX - bbox.minX;\n var height = bbox.maxY - bbox.minY;\n\n for (var idx = 0; idx < waveCount; idx++) {\n var factor = waveCount <= 1 ? 0 : idx / (waveCount - 1);\n var wave = group.addShape('path', {\n name: \"waterwave-path\",\n attrs: {\n path: getWaterWavePath(radius, bbox.minY + height * level, waveLength, 0, width / 32, // 波幅高度\n x, y),\n fill: fill,\n opacity: lerp(0.2, 0.9, factor) * opacity\n }\n });\n\n try {\n var matrix = (0, _matrix.transform)([['t', waveLength, 0]]);\n wave.stopAnimate();\n wave.animate({\n matrix: matrix\n }, {\n duration: lerp(0.5 * DURATION, DURATION, factor),\n repeat: true\n });\n } catch (e) {\n // TODO off-screen canvas 中动画会找不到 canvas\n console.warn('off-screen group animate error!');\n }\n }\n}\n\n(0, _g.registerShape)('interval', 'liquid-fill-gauge', {\n draw: function draw(cfg, container) {\n var cx = 0.5;\n var cy = 0.5;\n var customInfo = cfg.customInfo;\n var radio = customInfo.radius;\n var outline = customInfo.outline;\n var wave = customInfo.wave;\n var border = outline.border,\n distance = outline.distance;\n var waveCount = wave.count,\n waveLength = wave.length; // 获取最小 minX\n\n var minX = (0, _util.reduce)(cfg.points, function (r, p) {\n return Math.min(r, p.x);\n }, Infinity);\n var center = this.parsePoint({\n x: cx,\n y: cy\n });\n var minXPoint = this.parsePoint({\n x: minX,\n y: cy\n });\n var halfWidth = center.x - minXPoint.x; // 保证半径是 画布宽高最小值的 radius 值\n\n var radius = Math.min(halfWidth, minXPoint.y * radio);\n var waveAttrs = getFillAttrs(cfg);\n var circleAttrs = getLineAttrs(cfg); // 1. 首先绘制一个外圆\n\n container.addShape('circle', {\n name: 'wrap',\n attrs: (0, _util.mix)(circleAttrs, {\n x: center.x,\n y: center.y,\n r: radius,\n fill: 'transparent',\n lineWidth: border\n })\n }); // 2. 绘制波的 group\n\n var waves = container.addGroup({\n name: 'waves'\n }); // 3. 波对应的 clip 裁剪形状\n\n var clipCircle = waves.setClip({\n type: 'circle',\n attrs: {\n x: center.x,\n y: center.y,\n r: radius - distance - border / 2\n }\n }); // 4. 绘制波形\n\n addWaterWave(center.x, center.y, 1 - cfg.points[1].y, waveCount, waveAttrs, waves, clipCircle, radius * 2, waveLength);\n return container;\n }\n});\n\n/***/ }),\n/* 1173 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Bullet = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1174);\n\nvar _utils2 = __webpack_require__(535);\n\nvar Bullet =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Bullet, _super);\n\n function Bullet() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'bullet';\n return _this;\n }\n\n Bullet.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n });\n\n var _a = (0, _utils2.transformData)(this.options),\n min = _a.min,\n max = _a.max,\n ds = _a.ds; // 处理scale\n\n\n (0, _adaptor.meta)({\n options: this.options,\n ext: {\n data: {\n min: min,\n max: max\n }\n },\n chart: this.chart\n });\n this.chart.changeData(ds);\n };\n /**\n * 获取子弹图的适配器\n */\n\n\n Bullet.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n Bullet.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n layout: 'horizontal',\n size: {\n range: 30,\n measure: 20,\n target: 20\n },\n xAxis: {\n tickLine: false,\n line: null\n },\n bulletStyle: {\n range: {\n fillOpacity: 0.5\n }\n },\n label: {\n measure: {\n position: 'right'\n }\n },\n tooltip: {\n // 默认关闭\n showMarkers: false\n }\n });\n };\n\n return Bullet;\n}(_plot.Plot);\n\nexports.Bullet = Bullet;\n\n/***/ }),\n/* 1174 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.meta = meta;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils2 = __webpack_require__(535);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var bulletStyle = options.bulletStyle,\n targetField = options.targetField,\n rangeField = options.rangeField,\n measureField = options.measureField,\n xField = options.xField,\n color = options.color,\n layout = options.layout,\n size = options.size,\n label = options.label; // 处理数据\n\n var _a = (0, _utils2.transformData)(options),\n min = _a.min,\n max = _a.max,\n ds = _a.ds;\n\n chart.data(ds); // rangeGeometry\n\n var r = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: xField,\n yField: rangeField,\n seriesField: 'rKey',\n isStack: true,\n label: (0, _util.get)(label, 'range'),\n interval: {\n color: (0, _util.get)(color, 'range'),\n style: (0, _util.get)(bulletStyle, 'range'),\n size: (0, _util.get)(size, 'range')\n }\n }\n });\n (0, _geometries.interval)(r); // 范围值的 tooltip 隐藏掉\n\n chart.geometries[0].tooltip(false); // measureGeometry\n\n var m = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: xField,\n yField: measureField,\n seriesField: 'mKey',\n isStack: true,\n label: (0, _util.get)(label, 'measure'),\n interval: {\n color: (0, _util.get)(color, 'measure'),\n style: (0, _util.get)(bulletStyle, 'measure'),\n size: (0, _util.get)(size, 'measure')\n }\n }\n });\n (0, _geometries.interval)(m); // targetGeometry\n\n var t = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: xField,\n yField: targetField,\n seriesField: 'tKey',\n label: (0, _util.get)(label, 'target'),\n point: {\n color: (0, _util.get)(color, 'target'),\n style: (0, _util.get)(bulletStyle, 'target'),\n size: (0, _util.get)(size, 'target') / 2,\n shape: layout === 'horizontal' ? 'line' : 'hyphen'\n }\n }\n });\n (0, _geometries.point)(t); // 水平的时候,要转换坐标轴\n\n if (layout === 'horizontal') {\n chart.coordinate().transpose();\n }\n\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, params), {\n ext: {\n data: {\n min: min,\n max: max\n }\n }\n });\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var options = params.options,\n ext = params.ext;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n targetField = options.targetField,\n rangeField = options.rangeField,\n measureField = options.measureField,\n xField = options.xField;\n var extData = ext.data;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[measureField] = yAxis, _a), (_b = {}, _b[measureField] = {\n min: extData === null || extData === void 0 ? void 0 : extData.min,\n max: extData === null || extData === void 0 ? void 0 : extData.max\n }, _b[targetField] = {\n sync: \"\" + measureField\n }, _b[rangeField] = {\n sync: \"\" + measureField\n }, _b)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n measureField = options.measureField,\n rangeField = options.rangeField,\n targetField = options.targetField;\n chart.axis(\"\" + rangeField, false);\n chart.axis(\"\" + targetField, false); // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(\"\" + xField, false);\n } else {\n chart.axis(\"\" + xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(\"\" + measureField, false);\n } else {\n chart.axis(\"\" + measureField, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend;\n chart.removeInteraction('legend-filter'); // @TODO 后续看是否内部自定义一个 legend\n\n chart.legend(legend); // 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend\n\n chart.legend('rKey', false);\n chart.legend('mKey', false);\n chart.legend('tKey', false);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n measureField = options.measureField,\n targetField = options.targetField,\n rangeField = options.rangeField;\n var _a = chart.geometries,\n rangeGeometry = _a[0],\n measureGeometry = _a[1],\n targetGeometry = _a[2];\n\n if ((0, _util.get)(label, 'range')) {\n rangeGeometry.label(\"\" + rangeField, (0, _tslib.__assign)({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, (0, _utils.transformLabel)(label.range)));\n } else {\n rangeGeometry.label(false);\n }\n\n if ((0, _util.get)(label, 'measure')) {\n measureGeometry.label(\"\" + measureField, (0, _tslib.__assign)({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, (0, _utils.transformLabel)(label.measure)));\n } else {\n measureGeometry.label(false);\n }\n\n if ((0, _util.get)(label, 'target')) {\n targetGeometry.label(\"\" + targetField, (0, _tslib.__assign)({\n layout: [{\n type: 'limit-in-plot'\n }]\n }, (0, _utils.transformLabel)(label.target)));\n } else {\n targetGeometry.label(false);\n }\n\n return params;\n}\n/**\n * 子弹图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n (0, _utils.flow)(geometry, meta, axis, legend, _common.theme, label, _common.tooltip, _common.interaction, _common.animation)(params);\n}\n\n/***/ }),\n/* 1175 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Sunburst = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _utils = __webpack_require__(12);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1176);\n\nvar Sunburst =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Sunburst, _super);\n\n function Sunburst() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'sunburst';\n return _this;\n }\n /**\n * 获取旭日图默认配置\n */\n\n\n Sunburst.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n type: 'partition',\n innerRadius: 0,\n seriesField: 'value',\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20,\n showTitle: false\n }\n });\n };\n /**\n * 获取旭日图的适配器\n */\n\n\n Sunburst.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Sunburst;\n}(_plot.Plot);\n\nexports.Sunburst = Sunburst;\n\n/***/ }),\n/* 1176 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.axis = axis;\nexports.legend = legend;\nexports.tooltip = tooltip;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _geometries = __webpack_require__(32);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _utils2 = __webpack_require__(1177);\n\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var color = options.color,\n colorField = options.colorField,\n sunburstStyle = options.sunburstStyle;\n var data = (0, _utils2.transformData)(options);\n chart.data(data); // geometry\n\n (0, _geometries.polygon)((0, _utils.deepAssign)({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n polygon: {\n color: color,\n style: sunburstStyle\n }\n }\n }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart;\n chart.legend(false);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n seriesField = options.seriesField;\n var geometry = (0, _utils.findGeometry)(chart, 'polygon'); // label 为 false, 空 则不显示 label\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n geometry.label({\n fields: [seriesField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var innerRadius = options.innerRadius,\n radius = options.radius,\n reflect = options.reflect;\n var coord = chart.coordinate({\n type: 'polar',\n cfg: {\n innerRadius: innerRadius,\n radius: radius\n }\n });\n\n if (reflect) {\n coord.reflect(reflect);\n }\n\n return params;\n}\n/**\n * scale 配置\n * @param params\n */\n\n\nfunction scale(params) {\n var chart = params.chart,\n options = params.options;\n var meta = options.meta;\n\n if (meta) {\n // @ts-ignore\n chart.scale(meta);\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip,\n seriesField = options.seriesField,\n colorField = options.colorField;\n\n if (tooltip) {\n chart.tooltip((0, _tslib.__assign)((0, _tslib.__assign)({}, tooltip), {\n customContent: tooltip && tooltip.customContent ? tooltip.customContent : function (value, items) {\n return (0, _utils2.getTooltipTemplate)({\n value: value,\n items: items,\n formatter: tooltip && (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter),\n fields: tooltip && tooltip.fields || [seriesField, colorField]\n });\n }\n }));\n }\n\n return params;\n}\n/**\n * 旭日图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, _common.theme, axis, scale, legend, coordinate, tooltip, label, _common.interaction, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1177 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformData = transformData;\nexports.getTooltipTemplate = getTooltipTemplate;\n\nvar _tslib = __webpack_require__(1);\n\nvar _partition = __webpack_require__(1178);\n\nvar _treemap = __webpack_require__(537);\n\n/**\n * sunburst 处理数据\n * @param options\n */\nfunction transformData(options) {\n var data = options.data,\n type = options.type,\n seriesField = options.seriesField,\n colorField = options.colorField,\n hierarchyConfig = options.hierarchyConfig;\n var transform = {\n partition: _partition.partition,\n treemap: _treemap.treemap\n };\n var nodes = transform[type](data, (0, _tslib.__assign)((0, _tslib.__assign)({}, hierarchyConfig), {\n // @ts-ignore\n type: \"hierarchy.\" + type,\n field: seriesField,\n as: ['x', 'y']\n }));\n var result = [];\n nodes.forEach(function (node) {\n var _a;\n\n var _b, _c, _d, _e;\n\n if (node.depth === 0) {\n return null;\n }\n\n var nodeInfo = (0, _tslib.__assign)((_a = {}, _a[seriesField] = node.data[seriesField] || ((_c = (_b = node.parent) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c[seriesField]), _a[colorField] = node.data[colorField] || ((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e[colorField]), _a), node);\n nodeInfo.ext = hierarchyConfig;\n result.push(nodeInfo);\n });\n return result;\n}\n/**\n * customContent\n * @param {string} value\n * @param {any[]} items\n * @param {Function} formatter\n * @param {string} field\n * @returns HTMLElement\n */\n\n\nfunction getTooltipTemplate(params) {\n var items = params.items,\n formatter = params.formatter,\n fields = params.fields;\n\n var _a = items[0] || {},\n color = _a.color,\n mappingData = _a.mappingData,\n data = _a.data; // 不会有分组情况\n\n\n var container = document.createElement('ul');\n container.className = 'g2-tooltip';\n var listItem = '';\n\n var formatterItem = function formatterItem(item, field) {\n var _a;\n\n if (formatter) {\n return formatter((0, _tslib.__assign)((0, _tslib.__assign)({}, item), {\n field: field\n }));\n }\n\n return {\n name: field,\n value: (item === null || item === void 0 ? void 0 : item[field]) || ((_a = item === null || item === void 0 ? void 0 : item.data) === null || _a === void 0 ? void 0 : _a[field])\n };\n };\n\n fields.forEach(function (field) {\n var _a = formatterItem(data, field),\n name = _a.name,\n value = _a.value;\n\n listItem += \"\\n \\n \\n \" + name + \":\\n \" + value + \"\\n \\n \";\n });\n container.innerHTML = listItem;\n return container;\n}\n\n/***/ }),\n/* 1178 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.partition = partition;\n\nvar d3Hierarchy = _interopRequireWildcard(__webpack_require__(294));\n\nvar _util = __webpack_require__(0);\n\nvar _util2 = __webpack_require__(536);\n\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n round: false,\n padding: 0,\n sort: true,\n as: ['x', 'y']\n};\n\nfunction partition(data, options) {\n options = (0, _util.assign)({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n\n if (!(0, _util.isArray)(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n\n var field;\n\n try {\n field = (0, _util2.getField)(options);\n } catch (e) {\n console.warn(e);\n }\n\n var partition = function partition(data) {\n return d3Hierarchy.partition().size(options.size).round(options.round).padding(options.padding)(d3Hierarchy.hierarchy(data).sum(function (d) {\n return d[field];\n }));\n };\n\n var root = partition(data);\n /*\n * points:\n * 3 2\n * 0 1\n */\n\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n return (0, _util2.getAllNodes)(root);\n}\n\n/***/ }),\n/* 1179 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Gauge = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1180);\n\nvar _constant = __webpack_require__(197);\n\nvar _utils = __webpack_require__(538);\n\n__webpack_require__(1181);\n\n__webpack_require__(1182);\n\n// 注册 shape\n\n/**\n * 仪表盘盘\n */\nvar Gauge =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Gauge, _super);\n\n function Gauge() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'gauge';\n return _this;\n }\n\n Gauge.prototype.getDefaultOptions = function () {\n var _a;\n\n return {\n percent: 0,\n range: {\n ticks: []\n },\n innerRadius: 0.9,\n radius: 0.95,\n startAngle: -7 / 6 * Math.PI,\n endAngle: 1 / 6 * Math.PI,\n syncViewPadding: true,\n axis: {\n line: null,\n label: {\n offset: -24,\n style: {\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n subTickLine: {\n length: -8\n },\n tickLine: {\n length: -12\n },\n grid: null\n },\n indicator: {\n pointer: {\n style: {\n lineWidth: 5,\n lineCap: 'round'\n }\n },\n pin: {\n style: {\n r: 9.75,\n lineWidth: 4.5,\n fill: '#fff'\n }\n }\n },\n statistic: {\n title: false\n },\n meta: (_a = {}, // 两个 view 的 scale 同步到 v 上\n _a[_constant.RANGE_VALUE] = {\n sync: 'v'\n }, _a[_constant.PERCENT] = {\n sync: 'v',\n tickCount: 5,\n tickInterval: 0.2\n }, _a),\n animation: false\n };\n };\n /**\n * 更新数据\n * @param percent\n */\n\n\n Gauge.prototype.changeData = function (percent) {\n this.updateOption({\n percent: percent\n });\n var indicatorView = this.chart.views.find(function (v) {\n return v.id === _constant.INDICATEOR_VIEW_ID;\n });\n\n if (indicatorView) {\n indicatorView.data((0, _utils.getIndicatorData)(percent));\n }\n\n var rangeView = this.chart.views.find(function (v) {\n return v.id === _constant.RANGE_VIEW_ID;\n });\n\n if (rangeView) {\n rangeView.data((0, _utils.getRangeData)(percent, this.options.range));\n } // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n\n\n (0, _adaptor.statistic)({\n chart: this.chart,\n options: this.options\n }, true);\n };\n /**\n * 获取适配器\n */\n\n\n Gauge.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Gauge;\n}(_plot.Plot);\n\nexports.Gauge = Gauge;\n\n/***/ }),\n/* 1180 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.statistic = statistic;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _constant = __webpack_require__(121);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant2 = __webpack_require__(197);\n\nvar _utils2 = __webpack_require__(538);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var percent = options.percent,\n range = options.range,\n radius = options.radius,\n innerRadius = options.innerRadius,\n startAngle = options.startAngle,\n endAngle = options.endAngle,\n axis = options.axis,\n indicator = options.indicator;\n var color = range.color; // 指标 & 指针\n // 如果开启在应用\n\n if (indicator) {\n var indicatorData = (0, _utils2.getIndicatorData)(percent);\n var v1 = chart.createView({\n id: _constant2.INDICATEOR_VIEW_ID\n });\n v1.data(indicatorData);\n v1.point().position(_constant2.PERCENT + \"*1\").shape('gauge-indicator') // 传入指针的样式到自定义 shape 中\n .customInfo({\n defaultColor: chart.getTheme().defaultColor,\n indicator: indicator\n });\n v1.coordinate('polar', {\n startAngle: startAngle,\n endAngle: endAngle,\n radius: innerRadius * radius\n });\n v1.axis(_constant2.PERCENT, axis); // 一部分应用到 scale 中\n\n v1.scale(_constant2.PERCENT, (0, _utils.pick)(axis, _constant.AXIS_META_CONFIG_KEYS));\n } // 辅助 range\n // [{ range: 1, type: '0' }]\n\n\n var rangeData = (0, _utils2.getRangeData)(percent, options.range);\n var v2 = chart.createView({\n id: _constant2.RANGE_VIEW_ID\n });\n v2.data(rangeData);\n var rangeColor = (0, _util.isString)(color) ? [color, _constant2.DEFAULT_COLOR] : color;\n v2.interval().position(\"1*\" + _constant2.RANGE_VALUE).color(_constant2.RANGE_TYPE, rangeColor).adjust('stack');\n v2.coordinate('polar', {\n innerRadius: innerRadius,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }).transpose();\n return params;\n}\n/**\n * meter 类型的仪表盘 有一层 mask\n * @param params\n */\n\n\nfunction meterView(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var type = options.type,\n meter = options.meter;\n\n if (type === 'meter') {\n var innerRadius = options.innerRadius,\n radius = options.radius,\n startAngle = options.startAngle,\n endAngle = options.endAngle;\n var background = chart.getTheme().background;\n var color = background;\n\n if (!color || color === 'transparent') {\n color = '#fff';\n }\n\n var v3 = chart.createView({\n id: _constant2.MASK_VIEW_ID\n });\n v3.data([(_a = {}, _a[_constant2.RANGE_TYPE] = '1', _a[_constant2.RANGE_VALUE] = 1, _a)]);\n v3.interval().position(\"1*\" + _constant2.RANGE_VALUE).color(color).adjust('stack').shape('meter-gauge').customInfo(meter || {});\n v3.coordinate('polar', {\n innerRadius: innerRadius,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }).transpose();\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n return (0, _utils.flow)((0, _common.scale)((_a = {\n range: {\n min: 0,\n max: 1,\n maxLimit: 1,\n minLimit: 0\n }\n }, _a[_constant2.PERCENT] = {}, _a)))(params);\n}\n/**\n * 统计指标文档\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var statistic = options.statistic,\n percent = options.percent; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n\n if (statistic) {\n var content = statistic.content;\n var transformContent = void 0; // 当设置 content 的时候,设置默认样式\n\n if (content) {\n transformContent = (0, _utils.deepAssign)({}, {\n formatter: function formatter(_a) {\n var percent = _a.percent;\n return (percent * 100).toFixed(2) + \"%\";\n },\n style: {\n opacity: 0.75,\n fontSize: '30px',\n lineHeight: 1,\n textAlign: 'center',\n color: 'rgba(44,53,66,0.85)'\n }\n }, content);\n }\n\n (0, _utils.renderGaugeStatistic)(chart, {\n statistic: (0, _tslib.__assign)((0, _tslib.__assign)({}, statistic), {\n content: transformContent\n })\n }, {\n percent: percent\n });\n }\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n/**\n * other 配置\n * @param params\n */\n\n\nfunction other(params) {\n var chart = params.chart;\n chart.legend(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 对外暴露的 adaptor\n */\n\n\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)( // animation 配置必须在 createView 之前,不然无法让子 View 生效\n _common.animation, geometry, meta, statistic, _common.interaction, _common.theme, // meterView 需要放到主题之后\n meterView, other // ... 其他的 adaptor flow\n )(params);\n}\n\n/***/ }),\n/* 1181 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\n// 自定义Shape 部分\n(0, _g.registerShape)('point', 'gauge-indicator', {\n draw: function draw(cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo,\n indicator = _a.indicator,\n defaultColor = _a.defaultColor;\n var _b = indicator,\n pointer = _b.pointer,\n pin = _b.pin;\n var group = container.addGroup(); // 获取极坐标系下画布中心点\n\n var center = this.parsePoint({\n x: 0,\n y: 0\n }); // 绘制指针\n\n if (pointer) {\n // pointer\n group.addShape('line', {\n name: 'pointer',\n attrs: (0, _tslib.__assign)({\n x1: center.x,\n y1: center.y,\n x2: cfg.x,\n y2: cfg.y,\n stroke: defaultColor\n }, pointer.style)\n });\n } // pin\n\n\n if (pin) {\n group.addShape('circle', {\n name: 'pin',\n attrs: (0, _tslib.__assign)({\n x: center.x,\n y: center.y,\n stroke: defaultColor\n }, pin.style)\n });\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1182 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _g = __webpack_require__(17);\n\nvar _graphics = __webpack_require__(45);\n\n// 自定义Shape 部分\n(0, _g.registerShape)('interval', 'meter-gauge', {\n draw: function draw(cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo,\n _b = _a.steps,\n STEP = _b === void 0 ? 50 : _b,\n _c = _a.stepRatio,\n stepRatio = _c === void 0 ? 0.5 : _c;\n var total = this.coordinate.endAngle - this.coordinate.startAngle;\n var interval = total / STEP;\n var gap = 0;\n /**\n * stepRatio 取值范围: (0, 1]\n * 1: interval : gap = stepRatio : (1 - stepRatio)\n * 2: interval * STEP + stepRatio * (STEP - 1) = total\n */\n\n if (stepRatio > 0 && stepRatio <= 1) {\n interval = total / ((1 - stepRatio) / stepRatio * (STEP - 1) + STEP);\n gap = interval * (1 - stepRatio) / stepRatio;\n }\n\n var group = container.addGroup(); // 绘制 gap\n\n if (gap > 0) {\n var center = this.coordinate.getCenter();\n var radius = this.coordinate.getRadius();\n\n var _d = _g.Util.getAngle(cfg, this.coordinate),\n startAngle = _d.startAngle,\n endAngle = _d.endAngle;\n\n for (var i = startAngle, j = 0; i < endAngle && j < 2 * STEP - 1; j++) {\n var drawn = j % 2;\n\n if (drawn) {\n var path = (0, _graphics.getSectorPath)(center.x, center.y, radius, i, Math.min(i + gap, endAngle), radius * this.coordinate.innerRadius);\n group.addShape('path', {\n name: 'meter-gauge-mask',\n attrs: {\n path: path,\n fill: cfg.color,\n stroke: cfg.color,\n lineWidth: 0.5\n },\n // mask 不需要捕捉事件\n capture: false\n });\n }\n\n i += drawn ? gap : interval;\n }\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1183 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Waterfall = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1184);\n\nvar _utils = __webpack_require__(540);\n\n/**\n * 瀑布图\n */\nvar Waterfall =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Waterfall, _super);\n\n function Waterfall() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'waterfall';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n Waterfall.prototype.changeData = function (data) {\n var _a = this.options,\n xField = _a.xField,\n yField = _a.yField,\n total = _a.total;\n this.updateOption({\n data: data\n });\n this.chart.changeData((0, _utils.transformData)(data, xField, yField, total));\n };\n /**\n * 获取 瀑布图 的适配器\n */\n\n\n Waterfall.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n /**\n * 获取 瀑布图 的默认配置\n */\n\n\n Waterfall.prototype.getDefaultOptions = function () {\n return {\n /** default: show label */\n label: {},\n\n /** default: show leaderLine */\n leaderLine: {\n style: {\n lineWidth: 1,\n stroke: '#8c8c8c',\n lineDash: [4, 2]\n }\n },\n\n /** default: show total */\n total: {\n label: '总计',\n style: {\n fill: 'rgba(0, 0, 0, 0.25)'\n }\n },\n interactions: [{\n type: 'element-active'\n }],\n risingFill: '#f4664a',\n fallingFill: '#30bf78',\n waterfallStyle: {\n fill: 'rgba(0, 0, 0, 0.25)'\n },\n yAxis: {\n grid: {\n line: {\n style: {\n lineDash: [4, 2]\n }\n }\n }\n }\n };\n };\n\n return Waterfall;\n}(_plot.Plot);\n\nexports.Waterfall = Waterfall;\n\n/***/ }),\n/* 1184 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.tooltip = tooltip;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils = __webpack_require__(12);\n\nvar _constants = __webpack_require__(539);\n\nvar _utils2 = __webpack_require__(540);\n\n__webpack_require__(1185);\n\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xField = options.xField,\n yField = options.yField,\n total = options.total,\n leaderLine = options.leaderLine,\n columnWidthRatio = options.columnWidthRatio,\n waterfallStyle = options.waterfallStyle,\n risingFill = options.risingFill,\n fallingFill = options.fallingFill,\n color = options.color; // 数据处理\n\n chart.data((0, _utils2.transformData)(data, xField, yField, total)); // 瀑布图自带的 colorMapping\n\n var colorMapping = color || function (datum) {\n if ((0, _util.get)(datum, [_constants.IS_TOTAL])) {\n return (0, _util.get)(total, ['style', 'fill'], '');\n }\n\n return (0, _util.get)(datum, [_constants.Y_FIELD, 1]) - (0, _util.get)(datum, [_constants.Y_FIELD, 0]) > 0 ? risingFill : fallingFill;\n };\n\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n xField: xField,\n yField: _constants.Y_FIELD,\n seriesField: xField,\n rawFields: [yField, _constants.DIFF_FIELD, _constants.IS_TOTAL, _constants.Y_FIELD],\n widthRatio: columnWidthRatio,\n interval: {\n style: waterfallStyle,\n shape: 'waterfall',\n color: colorMapping\n }\n }\n });\n var ext = (0, _geometries.interval)(p).ext;\n var geometry = ext.geometry; // 将 waterfall leaderLineCfg 传入到自定义 shape 中\n\n geometry.customInfo({\n leaderLine: leaderLine\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b;\n\n var options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField,\n meta = options.meta;\n var Y_FIELD_META = (0, _utils.deepAssign)({}, {\n alias: yField\n }, (0, _util.get)(meta, yField));\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[xField] = xAxis, _a[yField] = yAxis, _a[_constants.Y_FIELD] = yAxis, _a), (0, _utils.deepAssign)({}, meta, (_b = {}, _b[_constants.Y_FIELD] = Y_FIELD_META, _b[_constants.DIFF_FIELD] = Y_FIELD_META, _b[_constants.ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params);\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField; // 为 false 则是不显示轴\n\n if (xAxis === false) {\n chart.axis(xField, false);\n } else {\n chart.axis(xField, xAxis);\n }\n\n if (yAxis === false) {\n chart.axis(yField, false);\n chart.axis(_constants.Y_FIELD, false);\n } else {\n chart.axis(yField, yAxis);\n chart.axis(_constants.Y_FIELD, yAxis);\n }\n\n return params;\n}\n/**\n * legend 配置 todo 添加 hover 交互\n * @param params\n */\n\n\nfunction legend(params) {\n var chart = params.chart,\n options = params.options;\n var legend = options.legend,\n total = options.total,\n risingFill = options.risingFill,\n fallingFill = options.fallingFill;\n\n if (legend === false) {\n chart.legend(false);\n } else {\n var items = [{\n name: '增加',\n value: 'increase',\n marker: {\n symbol: 'square',\n style: {\n r: 5,\n fill: risingFill\n }\n }\n }, {\n name: '减少',\n value: 'decrease',\n marker: {\n symbol: 'square',\n style: {\n r: 5,\n fill: fallingFill\n }\n }\n }];\n\n if (total) {\n items.push({\n name: total.label || '',\n value: 'total',\n marker: {\n symbol: 'square',\n style: (0, _utils.deepAssign)({}, {\n r: 5\n }, (0, _util.get)(total, 'style'))\n }\n });\n }\n\n chart.legend((0, _utils.deepAssign)({}, {\n custom: true,\n position: 'top',\n items: items\n }, legend));\n chart.removeInteraction('legend-filter');\n }\n\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n labelMode = options.labelMode,\n xField = options.xField;\n var geometry = (0, _utils.findGeometry)(chart, 'interval');\n\n if (!label) {\n geometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n geometry.label({\n fields: labelMode === 'absolute' ? [_constants.ABSOLUTE_FIELD, xField] : [_constants.DIFF_FIELD, xField],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart,\n options = params.options;\n var tooltip = options.tooltip,\n xField = options.xField,\n yField = options.yField;\n\n if (tooltip !== false) {\n chart.tooltip((0, _tslib.__assign)({\n showCrosshairs: false,\n showMarkers: false,\n shared: true,\n // tooltip 默认展示 y 字段值\n fields: [yField]\n }, tooltip)); // 瀑布图默认以 yField 作为 tooltip 内容\n\n var geometry_1 = chart.geometries[0];\n (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter) ? geometry_1.tooltip(xField + \"*\" + yField, tooltip.formatter) : geometry_1.tooltip(yField);\n } else {\n chart.tooltip(false);\n }\n\n return params;\n}\n/**\n * 瀑布图适配器\n * @param params\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(geometry, meta, axis, legend, tooltip, label, _common.state, _common.theme, _common.interaction, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1185 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(12);\n\n/**\n * 获取柱子 path\n * @param points\n */\nfunction getRectPath(points) {\n var path = [];\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n\n if (point) {\n var action = i === 0 ? 'M' : 'L';\n path.push([action, point.x, point.y]);\n }\n }\n\n var first = points[0];\n path.push(['L', first.x, first.y]);\n path.push(['z']);\n return path;\n}\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\n\n\nfunction getFillAttrs(cfg) {\n return (0, _utils.deepAssign)({}, cfg.defaultStyle, cfg.style, {\n fill: cfg.color\n });\n}\n\n(0, _g.registerShape)('interval', 'waterfall', {\n draw: function draw(cfg, container) {\n var customInfo = cfg.customInfo,\n points = cfg.points,\n nextPoints = cfg.nextPoints;\n var group = container.addGroup(); // ① 绘制柱体\n\n var rectPath = this.parsePath(getRectPath(points));\n var fillAttrs = getFillAttrs(cfg);\n group.addShape('path', {\n attrs: (0, _tslib.__assign)((0, _tslib.__assign)({}, fillAttrs), {\n path: rectPath\n })\n }); // ② 绘制连接线\n\n var leaderLineCfg = (0, _util.get)(customInfo, 'leaderLine');\n\n if (leaderLineCfg && nextPoints) {\n var linkPath = [['M', points[2].x, points[2].y], ['L', nextPoints[0].x, nextPoints[0].y]];\n\n if (points[2].y === nextPoints[1].y) {\n linkPath[1] = ['L', nextPoints[1].x, nextPoints[1].y];\n }\n\n linkPath = this.parsePath(linkPath);\n group.addShape('path', {\n attrs: (0, _tslib.__assign)({\n path: linkPath\n }, leaderLineCfg.style || {})\n });\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1186 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RadialBar = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1187);\n\n/**\n * 玉珏图\n */\nvar RadialBar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(RadialBar, _super);\n\n function RadialBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'radial-bar';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n\n\n RadialBar.prototype.changeData = function (data) {\n this.updateOption({\n data: data\n }); // 更新玉珏图的scale\n\n (0, _adaptor.meta)({\n chart: this.chart,\n options: this.options\n });\n this.chart.changeData(data);\n };\n /**\n * 获取默认配置\n */\n\n\n RadialBar.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n interactions: [{\n type: 'element-active'\n }],\n legend: false,\n tooltip: {\n showMarkers: false\n },\n xAxis: {\n grid: null,\n tickLine: null,\n line: null\n },\n maxAngle: 240\n });\n };\n /**\n * 获取适配器\n */\n\n\n RadialBar.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return RadialBar;\n}(_plot.Plot);\n\nexports.RadialBar = RadialBar;\n\n/***/ }),\n/* 1187 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.meta = meta;\nexports.axis = axis;\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils2 = __webpack_require__(1188);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n style = options.barStyle,\n color = options.color,\n tooltip = options.tooltip,\n colorField = options.colorField,\n type = options.type,\n xField = options.xField,\n yField = options.yField;\n chart.data(data);\n var p = (0, _utils.deepAssign)({}, params, {\n options: {\n tooltip: tooltip,\n seriesField: colorField,\n interval: {\n style: style,\n color: color,\n shape: type === 'line' ? 'line' : 'intervel'\n },\n // 柱子的一些样式设置:柱子最小宽度、柱子最大宽度、柱子背景\n minColumnWidth: options.minBarWidth,\n maxColumnWidth: options.maxBarWidth,\n columnBackground: options.barBackground\n }\n });\n (0, _geometries.interval)(p);\n\n if (type === 'line') {\n (0, _geometries.point)({\n chart: chart,\n options: {\n xField: xField,\n yField: yField,\n seriesField: colorField,\n point: {\n shape: 'circle',\n color: color\n }\n }\n });\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n var options = params.options;\n var yField = options.yField,\n data = options.data,\n maxAngle = options.maxAngle;\n return (0, _utils.flow)((0, _common.scale)((_a = {}, _a[yField] = {\n min: 0,\n max: (0, _utils2.getScaleMax)(maxAngle, yField, data)\n }, _a)))(params);\n}\n/**\n * coordinate 配置\n * @param params\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart,\n options = params.options;\n var radius = options.radius,\n innerRadius = options.innerRadius,\n startAngle = options.startAngle,\n endAngle = options.endAngle;\n chart.coordinate({\n type: 'polar',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n }\n }).transpose();\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xField = options.xField,\n xAxis = options.xAxis;\n chart.axis(xField, xAxis);\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(geometry, meta, axis, coordinate, _common.interaction, _common.animation, _common.theme, _common.tooltip, _common.legend, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1188 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getScaleMax = getScaleMax;\n\nfunction getScaleMax(maxAngle, yField, data) {\n var yData = data.map(function (item) {\n return item[yField];\n }).filter(function (v) {\n return v !== undefined;\n });\n var maxValue = yData.length > 0 ? Math.max.apply(Math, yData) : 0;\n var formatRadian = Math.abs(maxAngle) % 360;\n\n if (!formatRadian) {\n return maxValue;\n }\n\n return maxValue * 360 / formatRadian;\n}\n\n/***/ }),\n/* 1189 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BidirectionalBar = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _utils = __webpack_require__(12);\n\nvar _adaptor = __webpack_require__(1190);\n\nvar _utils2 = __webpack_require__(541);\n\nvar BidirectionalBar =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(BidirectionalBar, _super);\n\n function BidirectionalBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'bidirectional-bar';\n return _this;\n }\n\n BidirectionalBar.prototype.getDefaultOptions = function () {\n return (0, _utils.deepAssign)({}, _super.prototype.getDefaultOptions.call(this), {\n syncViewPadding: _utils2.syncViewPadding\n });\n };\n /**\n * 获取对称条形图的适配器\n */\n\n\n BidirectionalBar.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return BidirectionalBar;\n}(_plot.Plot);\n\nexports.BidirectionalBar = BidirectionalBar;\n\n/***/ }),\n/* 1190 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interaction = interaction;\nexports.limitInPlot = limitInPlot;\nexports.theme = theme;\nexports.animation = animation;\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _common = __webpack_require__(25);\n\nvar _geometries = __webpack_require__(32);\n\nvar _utils = __webpack_require__(12);\n\nvar _constant = __webpack_require__(1191);\n\nvar _utils2 = __webpack_require__(541);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n xField = options.xField,\n yField = options.yField,\n color = options.color,\n barStyle = options.barStyle,\n widthRatio = options.widthRatio,\n legend = options.legend,\n layout = options.layout; // 处理数据\n\n var groupData = (0, _utils2.transformData)(xField, yField, _constant.SERIES_FIELD_KEY, data, (0, _utils2.isHorizontal)(layout)); // 在创建子 view 执行后不行,需要在前面处理 legend\n\n if (legend) {\n chart.legend(_constant.SERIES_FIELD_KEY, legend);\n } else if (legend === false) {\n chart.legend(false);\n } // 创建 view\n\n\n var firstView;\n var secondView;\n var firstViewData = groupData[0],\n secondViewData = groupData[1]; // 横向\n\n if ((0, _utils2.isHorizontal)(layout)) {\n firstView = chart.createView({\n region: {\n start: {\n x: 0,\n y: 0\n },\n end: {\n x: 0.5,\n y: 1\n }\n },\n id: _constant.FIRST_AXES_VIEW\n });\n firstView.coordinate().transpose().reflect('x');\n secondView = chart.createView({\n region: {\n start: {\n x: 0.5,\n y: 0\n },\n end: {\n x: 1,\n y: 1\n }\n },\n id: _constant.SECOND_AXES_VIEW\n });\n secondView.coordinate().transpose(); // @说明: 测试发现,横向因为轴的反转,需要数据也反转,不然会图形渲染是反的(翻转操作进入到 transform 中处理)\n\n firstView.data(firstViewData);\n secondView.data(secondViewData);\n } else {\n // 纵向\n firstView = chart.createView({\n region: {\n start: {\n x: 0,\n y: 0\n },\n end: {\n x: 1,\n y: 0.5\n }\n },\n id: _constant.FIRST_AXES_VIEW\n });\n secondView = chart.createView({\n region: {\n start: {\n x: 0,\n y: 0.5\n },\n end: {\n x: 1,\n y: 1\n }\n },\n id: _constant.SECOND_AXES_VIEW\n });\n secondView.coordinate().reflect('y').rotate(Math.PI * 0); // 旋转\n\n firstView.data(firstViewData);\n secondView.data(secondViewData);\n }\n\n var left = (0, _utils.deepAssign)({}, params, {\n chart: firstView,\n options: {\n widthRatio: widthRatio,\n xField: xField,\n yField: yField[0],\n seriesField: _constant.SERIES_FIELD_KEY,\n interval: {\n color: color,\n style: barStyle\n }\n }\n });\n (0, _geometries.interval)(left);\n var right = (0, _utils.deepAssign)({}, params, {\n chart: secondView,\n options: {\n xField: xField,\n yField: yField[1],\n seriesField: _constant.SERIES_FIELD_KEY,\n widthRatio: widthRatio,\n interval: {\n color: color,\n style: barStyle\n }\n }\n });\n (0, _geometries.interval)(right);\n return params;\n}\n/**\n * meta 配置\n * - 对称条形图对数据进行了处理,通过 SERIES_FIELD_KEY 来对两条 yField 数据进行分类\n * @param params\n */\n\n\nfunction meta(params) {\n var _a, _b, _c;\n\n var options = params.options,\n chart = params.chart;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField;\n var firstView = (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW);\n var secondView = (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW);\n var aliasMap = {};\n (0, _util.keys)((options === null || options === void 0 ? void 0 : options.meta) || {}).map(function (metaKey) {\n if ((0, _util.get)(options === null || options === void 0 ? void 0 : options.meta, [metaKey, 'alias'])) {\n aliasMap[metaKey] = options.meta[metaKey].alias;\n }\n });\n chart.scale((_a = {}, _a[_constant.SERIES_FIELD_KEY] = {\n sync: true,\n formatter: function formatter(v) {\n return (0, _util.get)(aliasMap, v, v);\n }\n }, _a));\n (0, _common.scale)((_b = {}, _b[xField] = xAxis, _b[yField[0]] = yAxis[yField[0]], _b))((0, _utils.deepAssign)({}, params, {\n chart: firstView\n }));\n (0, _common.scale)((_c = {}, _c[xField] = xAxis, _c[yField[1]] = yAxis[yField[1]], _c))((0, _utils.deepAssign)({}, params, {\n chart: secondView\n }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart,\n options = params.options;\n var xAxis = options.xAxis,\n yAxis = options.yAxis,\n xField = options.xField,\n yField = options.yField,\n layout = options.layout;\n var firstView = (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW);\n var secondView = (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW); // 第二个 view axis 始终隐藏\n\n secondView.axis(xField, false); // 为 false 则是不显示 firstView 轴\n\n if (xAxis === false) {\n firstView.axis(xField, false);\n } else {\n firstView.axis(xField, (0, _tslib.__assign)({\n // 不同布局 firstView 的坐标轴显示位置\n position: (0, _utils2.isHorizontal)(layout) ? 'top' : 'bottom'\n }, xAxis));\n }\n\n if (yAxis === false) {\n firstView.axis(yField[0], false);\n secondView.axis(yField[1], false);\n } else {\n firstView.axis(yField[0], yAxis[yField[0]]);\n secondView.axis(yField[1], yAxis[yField[1]]);\n }\n /**\n * 这个注入,主要是在syncViewPadding时候拿到相对应的配置:布局和轴的位置\n * TODO 之后希望 g2 View 对象可以开放 setter 可以设置一些需要的东西\n */\n //@ts-ignore\n\n\n chart.__axisPosition = {\n position: firstView.getOptions().axes[xField].position,\n layout: layout\n };\n return params;\n}\n/**\n * interaction 配置\n * @param params\n */\n\n\nfunction interaction(params) {\n var chart = params.chart;\n (0, _common.interaction)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW)\n }));\n (0, _common.interaction)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW)\n }));\n return params;\n}\n/**\n * limitInPlot\n * @param params\n */\n\n\nfunction limitInPlot(params) {\n var chart = params.chart,\n options = params.options;\n var yField = options.yField,\n yAxis = options.yAxis;\n (0, _common.limitInPlot)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW),\n options: {\n yAxis: yAxis[yField[0]]\n }\n }));\n (0, _common.limitInPlot)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW),\n options: {\n yAxis: yAxis[yField[1]]\n }\n }));\n return params;\n}\n/**\n * theme\n * @param params\n */\n\n\nfunction theme(params) {\n var chart = params.chart;\n (0, _common.theme)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW)\n }));\n (0, _common.theme)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW)\n }));\n return params;\n}\n/**\n * animation\n * @param params\n */\n\n\nfunction animation(params) {\n var chart = params.chart;\n (0, _common.animation)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW)\n }));\n (0, _common.animation)((0, _utils.deepAssign)({}, params, {\n chart: (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW)\n }));\n return params;\n}\n/**\n * label 配置\n * @param params\n */\n\n\nfunction label(params) {\n var chart = params.chart,\n options = params.options;\n var label = options.label,\n yField = options.yField;\n var firstView = (0, _utils.findViewById)(chart, _constant.FIRST_AXES_VIEW);\n var secondView = (0, _utils.findViewById)(chart, _constant.SECOND_AXES_VIEW);\n var leftGeometry = (0, _utils.findGeometry)(firstView, 'interval');\n var rightGeometry = (0, _utils.findGeometry)(secondView, 'interval');\n\n if (!label) {\n leftGeometry.label(false);\n rightGeometry.label(false);\n } else {\n var callback = label.callback,\n cfg = (0, _tslib.__rest)(label, [\"callback\"]);\n leftGeometry.label({\n fields: [yField[0]],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n rightGeometry.label({\n fields: [yField[1]],\n callback: callback,\n cfg: (0, _utils.transformLabel)(cfg)\n });\n }\n\n return params;\n}\n/**\n * 对称条形图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, meta, axis, limitInPlot, theme, label, _common.tooltip, interaction, animation)(params);\n}\n\n/***/ }),\n/* 1191 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SERIES_FIELD_KEY = exports.SECOND_AXES_VIEW = exports.FIRST_AXES_VIEW = void 0;\nvar FIRST_AXES_VIEW = 'first-axes-view';\nexports.FIRST_AXES_VIEW = FIRST_AXES_VIEW;\nvar SECOND_AXES_VIEW = 'second-axes-view';\n/** 对称条形图的分组 key 值 */\n\nexports.SECOND_AXES_VIEW = SECOND_AXES_VIEW;\nvar SERIES_FIELD_KEY = 'series-field-key';\nexports.SERIES_FIELD_KEY = SERIES_FIELD_KEY;\n\n/***/ }),\n/* 1192 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Treemap = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1193);\n\n__webpack_require__(1194);\n\n__webpack_require__(525);\n\nvar Treemap =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Treemap, _super);\n\n function Treemap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'treemap';\n return _this;\n }\n\n Treemap.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Treemap;\n}(_plot.Plot);\n\nexports.Treemap = Treemap;\n\n/***/ }),\n/* 1193 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interaction = interaction;\nexports.adaptor = adaptor;\n\nvar _polygon = __webpack_require__(518);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _utils2 = __webpack_require__(542);\n\n/**\n * 获取默认 option\n * @param params\n */\nfunction defaultOptions(params) {\n var options = params.options;\n var colorField = options.colorField;\n return (0, _utils.deepAssign)({\n options: {\n // 默认按照 name 字段对颜色进行分类\n colorField: 'name',\n rectStyle: {\n lineWidth: 1,\n stroke: '#fff'\n },\n hierarchyConfig: {\n tile: 'treemapResquarify'\n },\n label: {\n fields: ['name'],\n layout: {\n type: 'limit-in-shape'\n }\n },\n tooltip: {\n showMarkers: false,\n showTitle: false,\n fields: ['name', 'value', colorField],\n formatter: function formatter(data) {\n return {\n name: data.name,\n value: data.value\n };\n }\n },\n interactions: [{\n type: 'view-zoom'\n }, {\n type: 'treemap-element-zoom'\n }]\n }\n }, params);\n}\n/**\n * 字段\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var color = options.color,\n colorField = options.colorField,\n rectStyle = options.rectStyle;\n var data = (0, _utils2.transformData)({\n data: options.data,\n colorField: options.colorField,\n openDrillDown: (0, _utils2.isDrillDown)(options.interactions)\n });\n chart.data(data); // geometry\n\n (0, _polygon.polygon)((0, _utils.deepAssign)({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n rawFields: ['value'],\n polygon: {\n color: color,\n style: rectStyle\n }\n }\n }));\n return params;\n}\n/**\n * 坐标轴\n * @param params\n */\n\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\n\n\nfunction interaction(params) {\n var chart = params.chart,\n options = params.options;\n var interactions = options.interactions,\n hierarchyConfig = options.hierarchyConfig;\n (0, _common.interaction)({\n chart: chart,\n options: {\n interactions: (0, _utils2.getFommatInteractions)(interactions, hierarchyConfig)\n }\n });\n return params;\n}\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(defaultOptions, geometry, axis, _common.theme, _common.legend, _common.tooltip, interaction, _common.animation, (0, _common.annotation)())(params);\n}\n\n/***/ }),\n/* 1194 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _g = __webpack_require__(17);\n\nvar _treemapDrillDownAction = __webpack_require__(1195);\n\nvar _util = __webpack_require__(1196);\n\n(0, _g.registerAction)('treemap-drill-down-action', _treemapDrillDownAction.TreemapDrillDownAction);\n(0, _g.registerInteraction)('treemap-drill-down', {\n showEnable: [{\n trigger: 'plot:mouseenter',\n action: 'cursor:pointer'\n }, {\n trigger: 'plot:mouseleave',\n action: 'cursor:default'\n }],\n start: [{\n trigger: 'element:click',\n isEnable: _util.isTopParentNode,\n action: ['treemap-drill-down-action:click', 'reset-button:show']\n }],\n rollback: [{\n trigger: 'reset-button:click',\n action: ['treemap-drill-down-action:reset']\n }, {\n trigger: 'reset-button:click',\n action: ['reset-button:hide'],\n isEnable: function isEnable(context) {\n return !(0, _util.hasHistoryDrill)(context);\n }\n }]\n});\n\n/***/ }),\n/* 1195 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TreemapDrillDownAction = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _g = __webpack_require__(17);\n\nvar _util = __webpack_require__(0);\n\nvar _utils = __webpack_require__(542);\n\nvar TreemapDrillDownAction =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(TreemapDrillDownAction, _super);\n\n function TreemapDrillDownAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this; // 存储历史下钻 scale\n\n\n _this.cacheDataStack = [];\n return _this;\n }\n\n TreemapDrillDownAction.prototype.drill = function (data) {\n var view = this.context.view;\n var currentData = view.getData();\n var groupScales = view.getGroupScales();\n var hierarchyConfig = (0, _util.get)(view, ['interactions', 'treemap-drill-down', 'cfg', 'hierarchyConfig'], {}); // 重新 update 数据\n\n var drillData = (0, _utils.transformData)({\n data: data,\n colorField: (0, _util.get)(groupScales, [0, 'field']),\n openDrillDown: true,\n hierarchyConfig: hierarchyConfig\n });\n view.changeData(drillData);\n this.cacheDataStack.push(currentData);\n };\n\n TreemapDrillDownAction.prototype.click = function () {\n var data = (0, _util.get)(this.context, ['event', 'data', 'data']);\n if (!data) return false;\n this.drill(data);\n };\n\n TreemapDrillDownAction.prototype.reset = function () {\n var view = this.context.view;\n\n if (!(0, _util.isArray)(this.cacheDataStack) || this.cacheDataStack.length <= 0) {\n return;\n }\n\n var cacheData = this.cacheDataStack.splice(this.cacheDataStack.length - 1, 1);\n view.changeData(cacheData[0]);\n };\n\n return TreemapDrillDownAction;\n}(_g.Action);\n\nexports.TreemapDrillDownAction = TreemapDrillDownAction;\n\n/***/ }),\n/* 1196 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isTopParentNode = isTopParentNode;\nexports.hasHistoryDrill = hasHistoryDrill;\n\nvar _util = __webpack_require__(0);\n\n/**\n * 判断是否为父节点\n */\nfunction isTopParentNode(context) {\n var data = (0, _util.get)(context, ['event', 'data', 'data'], {});\n return (0, _util.isArray)(data.children) && data.children.length > 0 && data.depth === 1;\n}\n/**\n * 判断是否仍有历史下钻\n */\n\n\nfunction hasHistoryDrill(context) {\n if (!context || !context.getAction) return false;\n var treemapElementDrillAction = context.getAction('treemap-drill-down-action');\n if (!treemapElementDrillAction) return false; // @ts-ignore\n\n var cacheDataStack = treemapElementDrillAction.cacheDataStack;\n return (0, _util.isArray)(cacheDataStack) && cacheDataStack.length > 0;\n}\n\n/***/ }),\n/* 1197 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Sankey = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1198);\n\n/**\n * 桑基图 Sankey\n */\nvar Sankey =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Sankey, _super);\n\n function Sankey() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'sankey';\n return _this;\n }\n\n Sankey.prototype.getDefaultOptions = function () {\n return {\n appendPadding: 8,\n syncViewPadding: true,\n nodeStyle: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1\n },\n edgeStyle: {\n opacity: 0.3,\n lineWidth: 0\n },\n label: {\n fields: ['x', 'name'],\n callback: function callback(x, name) {\n var isLast = x[1] === 1; // 最后一列靠边的节点\n\n return {\n style: {\n fill: '#545454',\n textAlign: isLast ? 'end' : 'start'\n },\n offsetX: isLast ? -8 : 8,\n content: name\n };\n },\n layout: [{\n type: 'hide-overlap'\n }]\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n shared: false,\n fields: ['name', 'source', 'target', 'value', 'isNode'],\n // 内置:node 不显示 tooltip,edge 显示 tooltip\n showContent: function showContent(items) {\n return !(0, _util.get)(items, [0, 'data', 'isNode']);\n },\n formatter: function formatter(datum) {\n var source = datum.source,\n target = datum.target,\n value = datum.value;\n return {\n name: source + ' -> ' + target,\n value: value\n };\n }\n },\n nodeWidthRatio: 0.008,\n nodePaddingRatio: 0.01\n };\n };\n /**\n * 获取适配器\n */\n\n\n Sankey.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Sankey;\n}(_plot.Plot);\n\nexports.Sankey = Sankey;\n\n/***/ }),\n/* 1198 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _sankey = __webpack_require__(1199);\n\nvar _geometries = __webpack_require__(32);\n\nvar _data = __webpack_require__(107);\n\nvar _constant = __webpack_require__(1268);\n\nvar _circle = __webpack_require__(1269);\n\nvar _helper = __webpack_require__(1270);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var data = options.data,\n sourceField = options.sourceField,\n targetField = options.targetField,\n weightField = options.weightField,\n color = options.color,\n nodeStyle = options.nodeStyle,\n edgeStyle = options.edgeStyle,\n label = options.label,\n tooltip = options.tooltip,\n nodeAlign = options.nodeAlign,\n nodePaddingRatio = options.nodePaddingRatio,\n nodePadding = options.nodePadding,\n nodeWidthRatio = options.nodeWidthRatio,\n nodeWidth = options.nodeWidth,\n nodeSort = options.nodeSort; // 1. 组件,优先设置,因为子 view 会继承配置\n\n chart.legend(false);\n chart.tooltip(tooltip);\n chart.axis(false); // 2. 转换出 layout 前数据\n\n var sankeyLayoutInputData = (0, _data.transformDataToNodeLinkData)((0, _circle.cutoffCircle)(data, sourceField, targetField), sourceField, targetField, weightField); // 3. layout 之后的数据\n\n var _a = (0, _sankey.sankeyLayout)({\n nodeAlign: nodeAlign,\n // @ts-ignore\n nodePadding: (0, _helper.getNodePaddingRatio)(nodePadding, nodePaddingRatio, chart.height),\n // @ts-ignore\n nodeWidth: (0, _helper.getNodeWidthRatio)(nodeWidth, nodeWidthRatio, chart.width),\n nodeSort: nodeSort\n }, sankeyLayoutInputData),\n nodes = _a.nodes,\n links = _a.links; // 4. 生成绘图数据\n\n\n var nodesData = nodes.map(function (node) {\n return {\n x: node.x,\n y: node.y,\n name: node.name,\n isNode: true\n };\n });\n var edgesData = links.map(function (link) {\n return {\n source: link.source.name,\n target: link.target.name,\n name: link.source.name || link.target.name,\n x: link.x,\n y: link.y,\n value: link.value,\n isNode: false\n };\n }); // 5. node edge views\n // edge view\n\n var edgeView = chart.createView();\n edgeView.data(edgesData);\n (0, _geometries.edge)({\n chart: edgeView,\n // @ts-ignore\n options: {\n xField: _constant.X_FIELD,\n yField: _constant.Y_FIELD,\n seriesField: _constant.COLOR_FIELD,\n edge: {\n color: color,\n style: edgeStyle,\n shape: 'arc'\n },\n tooltip: tooltip,\n state: {\n active: {\n style: {\n opacity: 0.8,\n lineWidth: 0\n }\n }\n }\n }\n });\n var nodeView = chart.createView();\n nodeView.data(nodesData);\n (0, _geometries.polygon)({\n chart: nodeView,\n options: {\n xField: _constant.X_FIELD,\n yField: _constant.Y_FIELD,\n seriesField: _constant.COLOR_FIELD,\n polygon: {\n color: color,\n style: nodeStyle\n },\n label: label,\n tooltip: tooltip\n }\n });\n chart.interaction('element-active'); // scale\n\n chart.scale({\n x: {\n sync: true,\n nice: true\n },\n y: {\n sync: true,\n nice: true\n },\n name: {\n sync: 'color'\n }\n });\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(geometry, _common.interaction, _common.animation, _common.theme // ... 其他的 adaptor flow\n )(params);\n}\n\n/***/ }),\n/* 1199 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getNodeAlignFunction = getNodeAlignFunction;\nexports.getDefaultOptions = getDefaultOptions;\nexports.sankeyLayout = sankeyLayout;\n\nvar _util = __webpack_require__(0);\n\nvar _d3Sankey = __webpack_require__(1200);\n\nvar ALIGN_METHOD = {\n left: _d3Sankey.sankeyLeft,\n right: _d3Sankey.sankeyRight,\n center: _d3Sankey.sankeyCenter,\n justify: _d3Sankey.sankeyJustify\n};\n/**\n * 默认值\n */\n\nvar DEFAULT_OPTIONS = {\n nodeId: function nodeId(node) {\n return node.index;\n },\n nodeAlign: 'justify',\n nodeWidth: 0.008,\n nodePadding: 0.03,\n nodeSort: undefined\n};\n/**\n * 获得 align function\n * @param nodeAlign\n */\n\nfunction getNodeAlignFunction(nodeAlign) {\n var func = (0, _util.isString)(nodeAlign) ? ALIGN_METHOD[nodeAlign] : (0, _util.isFunction)(nodeAlign) ? nodeAlign : null;\n return func || _d3Sankey.sankeyJustify;\n}\n\nfunction getDefaultOptions(sankeyLayoutOptions) {\n return (0, _util.assign)({}, DEFAULT_OPTIONS, sankeyLayoutOptions);\n}\n/**\n * 桑基图利用数据进行布局的函数,最终返回节点、边的位置(0 - 1 的信息)\n * 将会修改 data 数据\n * @param sankeyLayoutOptions\n * @param data\n */\n\n\nfunction sankeyLayout(sankeyLayoutOptions, data) {\n var options = getDefaultOptions(sankeyLayoutOptions);\n var nodeId = options.nodeId,\n nodeSort = options.nodeSort,\n nodeAlign = options.nodeAlign,\n nodeWidth = options.nodeWidth,\n nodePadding = options.nodePadding;\n var sankeyProcessor = (0, _d3Sankey.sankey)().nodeSort(nodeSort).links(function (d) {\n return d.links;\n }).nodeWidth(nodeWidth).nodePadding(nodePadding).nodeAlign(getNodeAlignFunction(nodeAlign)).extent([[0, 0], [1, 1]]).nodeId(nodeId); // 进行桑基图布局处理\n\n var layoutData = sankeyProcessor(data); // post process (x, y), etc.\n\n layoutData.nodes.forEach(function (node) {\n var x0 = node.x0,\n x1 = node.x1,\n y0 = node.y0,\n y1 = node.y1;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n\n node.x = [x0, x1, x1, x0];\n node.y = [y0, y0, y1, y1];\n });\n layoutData.links.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sx = source.x1;\n var tx = target.x0;\n edge.x = [sx, sx, tx, tx];\n var offset = edge.width / 2;\n edge.y = [edge.y0 + offset, edge.y0 - offset, edge.y1 + offset, edge.y1 - offset];\n });\n return layoutData;\n}\n\n/***/ }),\n/* 1200 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"sankey\", {\n enumerable: true,\n get: function get() {\n return _sankey.default;\n }\n});\nObject.defineProperty(exports, \"sankeyCenter\", {\n enumerable: true,\n get: function get() {\n return _align.center;\n }\n});\nObject.defineProperty(exports, \"sankeyLeft\", {\n enumerable: true,\n get: function get() {\n return _align.left;\n }\n});\nObject.defineProperty(exports, \"sankeyRight\", {\n enumerable: true,\n get: function get() {\n return _align.right;\n }\n});\nObject.defineProperty(exports, \"sankeyJustify\", {\n enumerable: true,\n get: function get() {\n return _align.justify;\n }\n});\nObject.defineProperty(exports, \"sankeyLinkHorizontal\", {\n enumerable: true,\n get: function get() {\n return _sankeyLinkHorizontal.default;\n }\n});\n\nvar _sankey = _interopRequireDefault(__webpack_require__(1201));\n\nvar _align = __webpack_require__(564);\n\nvar _sankeyLinkHorizontal = _interopRequireDefault(__webpack_require__(1241));\n\n/***/ }),\n/* 1201 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Sankey;\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _d3Array = __webpack_require__(543);\n\nvar _align = __webpack_require__(564);\n\nvar _constant = _interopRequireDefault(__webpack_require__(1240));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n var node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths(_ref) {\n var nodes = _ref.nodes;\n\n var _iterator = _createForOfIteratorHelper(nodes),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n var y0 = node.y0;\n var y1 = y0;\n\n var _iterator2 = _createForOfIteratorHelper(node.sourceLinks),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var link = _step2.value;\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n var _iterator3 = _createForOfIteratorHelper(node.targetLinks),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var _link = _step3.value;\n _link.y1 = y1 + _link.width / 2;\n y1 += _link.width;\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction Sankey() {\n var x0 = 0,\n y0 = 0,\n x1 = 1,\n y1 = 1; // extent\n\n var dx = 24; // nodeWidth\n\n var dy = 8,\n py; // nodePadding\n\n var id = defaultId;\n var align = _align.justify;\n var sort;\n var linkSort;\n var nodes = defaultNodes;\n var links = defaultLinks;\n var iterations = 6;\n\n function sankey() {\n var graph = {\n nodes: nodes.apply(null, arguments),\n links: links.apply(null, arguments)\n };\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function (graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function (_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : (0, _constant.default)(_), sankey) : id;\n };\n\n sankey.nodeAlign = function (_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : (0, _constant.default)(_), sankey) : align;\n };\n\n sankey.nodeSort = function (_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function (_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function (_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function (_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : (0, _constant.default)(_), sankey) : nodes;\n };\n\n sankey.links = function (_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : (0, _constant.default)(_), sankey) : links;\n };\n\n sankey.linkSort = function (_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function (_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function (_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function (_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks(_ref2) {\n var nodes = _ref2.nodes,\n links = _ref2.links;\n\n var _iterator4 = _createForOfIteratorHelper(nodes.entries()),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _step4$value = (0, _slicedToArray2.default)(_step4.value, 2),\n i = _step4$value[0],\n node = _step4$value[1];\n\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n var nodeById = new Map(nodes.map(function (d, i) {\n return [id(d, i, nodes), d];\n }));\n\n var _iterator5 = _createForOfIteratorHelper(links.entries()),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _step5$value = (0, _slicedToArray2.default)(_step5.value, 2),\n _i = _step5$value[0],\n link = _step5$value[1];\n\n link.index = _i;\n var source = link.source,\n target = link.target;\n if ((0, _typeof2.default)(source) !== \"object\") source = link.source = find(nodeById, source);\n if ((0, _typeof2.default)(target) !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (linkSort != null) {\n var _iterator6 = _createForOfIteratorHelper(nodes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var _step6$value = _step6.value,\n sourceLinks = _step6$value.sourceLinks,\n targetLinks = _step6$value.targetLinks;\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n }\n }\n\n function computeNodeValues(_ref3) {\n var nodes = _ref3.nodes;\n\n var _iterator7 = _createForOfIteratorHelper(nodes),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var node = _step7.value;\n node.value = node.fixedValue === undefined ? Math.max((0, _d3Array.sum)(node.sourceLinks, value), (0, _d3Array.sum)(node.targetLinks, value)) : node.fixedValue;\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n }\n\n function computeNodeDepths(_ref4) {\n var nodes = _ref4.nodes;\n var n = nodes.length;\n var current = new Set(nodes);\n var next = new Set();\n var x = 0;\n\n while (current.size) {\n var _iterator8 = _createForOfIteratorHelper(current),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var node = _step8.value;\n node.depth = x;\n\n var _iterator9 = _createForOfIteratorHelper(node.sourceLinks),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var target = _step9.value.target;\n next.add(target);\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set();\n }\n }\n\n function computeNodeHeights(_ref5) {\n var nodes = _ref5.nodes;\n var n = nodes.length;\n var current = new Set(nodes);\n var next = new Set();\n var x = 0;\n\n while (current.size) {\n var _iterator10 = _createForOfIteratorHelper(current),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var node = _step10.value;\n node.height = x;\n\n var _iterator11 = _createForOfIteratorHelper(node.targetLinks),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var source = _step11.value.source;\n next.add(source);\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set();\n }\n }\n\n function computeNodeLayers(_ref6) {\n var nodes = _ref6.nodes;\n var x = (0, _d3Array.max)(nodes, function (d) {\n return d.depth;\n }) + 1;\n var kx = (x1 - x0 - dx) / (x - 1);\n var columns = new Array(x);\n\n var _iterator12 = _createForOfIteratorHelper(nodes),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var node = _step12.value;\n var i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);else columns[i] = [node];\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n if (sort) {\n var _iterator13 = _createForOfIteratorHelper(columns),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var column = _step13.value;\n column.sort(sort);\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n var ky = (0, _d3Array.min)(columns, function (c) {\n return (y1 - y0 - (c.length - 1) * py) / (0, _d3Array.sum)(c, value);\n });\n\n var _iterator14 = _createForOfIteratorHelper(columns),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var _nodes = _step14.value;\n var y = y0;\n\n var _iterator15 = _createForOfIteratorHelper(_nodes),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var _node = _step15.value;\n _node.y0 = y;\n _node.y1 = y + _node.value * ky;\n y = _node.y1 + py;\n\n var _iterator16 = _createForOfIteratorHelper(_node.sourceLinks),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var link = _step16.value;\n link.width = link.value * ky;\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n y = (y1 - y + py) / (_nodes.length + 1);\n\n for (var i = 0; i < _nodes.length; ++i) {\n var node = _nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n\n reorderLinks(_nodes);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n\n function computeNodeBreadths(graph) {\n var columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / ((0, _d3Array.max)(columns, function (c) {\n return c.length;\n }) - 1));\n initializeNodeBreadths(columns);\n\n for (var i = 0; i < iterations; ++i) {\n var alpha = Math.pow(0.99, i);\n var beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n } // Reposition each node based on its incoming (target) links.\n\n\n function relaxLeftToRight(columns, alpha, beta) {\n for (var i = 1, n = columns.length; i < n; ++i) {\n var column = columns[i];\n\n var _iterator17 = _createForOfIteratorHelper(column),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var target = _step17.value;\n var y = 0;\n var w = 0;\n\n var _iterator18 = _createForOfIteratorHelper(target.targetLinks),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var _step18$value = _step18.value,\n source = _step18$value.source,\n _value = _step18$value.value;\n var v = _value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n if (!(w > 0)) continue;\n\n var _dy = (y / w - target.y0) * alpha;\n\n target.y0 += _dy;\n target.y1 += _dy;\n reorderNodeLinks(target);\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n } // Reposition each node based on its outgoing (source) links.\n\n\n function relaxRightToLeft(columns, alpha, beta) {\n for (var n = columns.length, i = n - 2; i >= 0; --i) {\n var column = columns[i];\n\n var _iterator19 = _createForOfIteratorHelper(column),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var source = _step19.value;\n var y = 0;\n var w = 0;\n\n var _iterator20 = _createForOfIteratorHelper(source.sourceLinks),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var _step20$value = _step20.value,\n target = _step20$value.target,\n _value2 = _step20$value.value;\n var v = _value2 * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n\n if (!(w > 0)) continue;\n\n var _dy2 = (y / w - source.y0) * alpha;\n\n source.y0 += _dy2;\n source.y1 += _dy2;\n reorderNodeLinks(source);\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n var i = nodes.length >> 1;\n var subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n } // Push any overlapping nodes down.\n\n\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n var node = nodes[i];\n\n var _dy3 = (y - node.y0) * alpha;\n\n if (_dy3 > 1e-6) node.y0 += _dy3, node.y1 += _dy3;\n y = node.y1 + py;\n }\n } // Push any overlapping nodes up.\n\n\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n var node = nodes[i];\n\n var _dy4 = (node.y1 - y) * alpha;\n\n if (_dy4 > 1e-6) node.y0 -= _dy4, node.y1 -= _dy4;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks(_ref7) {\n var sourceLinks = _ref7.sourceLinks,\n targetLinks = _ref7.targetLinks;\n\n if (linkSort === undefined) {\n var _iterator21 = _createForOfIteratorHelper(targetLinks),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var _sourceLinks = _step21.value.source.sourceLinks;\n\n _sourceLinks.sort(ascendingTargetBreadth);\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n\n var _iterator22 = _createForOfIteratorHelper(sourceLinks),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var _targetLinks = _step22.value.target.targetLinks;\n\n _targetLinks.sort(ascendingSourceBreadth);\n }\n } catch (err) {\n _iterator22.e(err);\n } finally {\n _iterator22.f();\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n var _iterator23 = _createForOfIteratorHelper(nodes),\n _step23;\n\n try {\n for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n var _step23$value = _step23.value,\n sourceLinks = _step23$value.sourceLinks,\n targetLinks = _step23$value.targetLinks;\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n } catch (err) {\n _iterator23.e(err);\n } finally {\n _iterator23.f();\n }\n }\n } // Returns the target.y0 that would produce an ideal link from source to target.\n\n\n function targetTop(source, target) {\n var y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n\n var _iterator24 = _createForOfIteratorHelper(source.sourceLinks),\n _step24;\n\n try {\n for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n var _step24$value = _step24.value,\n node = _step24$value.target,\n width = _step24$value.width;\n if (node === target) break;\n y += width + py;\n }\n } catch (err) {\n _iterator24.e(err);\n } finally {\n _iterator24.f();\n }\n\n var _iterator25 = _createForOfIteratorHelper(target.targetLinks),\n _step25;\n\n try {\n for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n var _step25$value = _step25.value,\n _node2 = _step25$value.source,\n _width = _step25$value.width;\n if (_node2 === source) break;\n y -= _width;\n }\n } catch (err) {\n _iterator25.e(err);\n } finally {\n _iterator25.f();\n }\n\n return y;\n } // Returns the source.y0 that would produce an ideal link from source to target.\n\n\n function sourceTop(source, target) {\n var y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n\n var _iterator26 = _createForOfIteratorHelper(target.targetLinks),\n _step26;\n\n try {\n for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\n var _step26$value = _step26.value,\n node = _step26$value.source,\n width = _step26$value.width;\n if (node === source) break;\n y += width + py;\n }\n } catch (err) {\n _iterator26.e(err);\n } finally {\n _iterator26.f();\n }\n\n var _iterator27 = _createForOfIteratorHelper(source.sourceLinks),\n _step27;\n\n try {\n for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {\n var _step27$value = _step27.value,\n _node3 = _step27$value.target,\n _width2 = _step27$value.width;\n if (_node3 === target) break;\n y -= _width2;\n }\n } catch (err) {\n _iterator27.e(err);\n } finally {\n _iterator27.f();\n }\n\n return y;\n }\n\n return sankey;\n}\n\n/***/ }),\n/* 1202 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cross;\n\nvar _toConsumableArray2 = _interopRequireDefault(__webpack_require__(46));\n\nvar _typeof2 = _interopRequireDefault(__webpack_require__(19));\n\nfunction length(array) {\n return array.length | 0;\n}\n\nfunction empty(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return (0, _typeof2.default)(values) !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return function (values) {\n return reduce.apply(void 0, (0, _toConsumableArray2.default)(values));\n };\n}\n\nfunction cross() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n var reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n var lengths = values.map(length);\n var j = values.length - 1;\n var index = new Array(j + 1).fill(0);\n var product = [];\n if (j < 0 || lengths.some(empty)) return product;\n\n while (true) {\n product.push(index.map(function (j, i) {\n return values[i][j];\n }));\n var i = j;\n\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n\n/***/ }),\n/* 1203 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cumsum;\n\nfunction cumsum(values, valueof) {\n var sum = 0,\n index = 0;\n return Float64Array.from(values, valueof === undefined ? function (v) {\n return sum += +v || 0;\n } : function (v) {\n return sum += +valueof(v, index++, values) || 0;\n });\n}\n\n/***/ }),\n/* 1204 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\n/***/ }),\n/* 1205 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.Adder = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(7));\n\nvar _createClass2 = _interopRequireDefault(__webpack_require__(23));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nvar Adder = /*#__PURE__*/function () {\n function Adder() {\n (0, _classCallCheck2.default)(this, Adder);\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n\n (0, _createClass2.default)(Adder, [{\n key: \"add\",\n value: function add(x) {\n var p = this._partials;\n var i = 0;\n\n for (var j = 0; j < this._n && j < 32; j++) {\n var y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n }, {\n key: \"valueOf\",\n value: function valueOf() {\n var p = this._partials;\n var n = this._n,\n x,\n y,\n lo,\n hi = 0;\n\n if (n > 0) {\n hi = p[--n];\n\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n\n if (n > 0 && (lo < 0 && p[n - 1] < 0 || lo > 0 && p[n - 1] > 0)) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n\n return hi;\n }\n }]);\n return Adder;\n}();\n\nexports.Adder = Adder;\n\nfunction _default(values, valueof) {\n var adder = new Adder();\n\n if (valueof === undefined) {\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (value = +value) {\n adder.add(value);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var index = -1;\n\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if (_value = +valueof(_value, ++index, values)) {\n adder.add(_value);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return +adder;\n}\n\n/***/ }),\n/* 1206 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getPrototypeOf = __webpack_require__(4);\n\nvar setPrototypeOf = __webpack_require__(239);\n\nvar isNativeFunction = __webpack_require__(1207);\n\nvar construct = __webpack_require__(1208);\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;\n\n/***/ }),\n/* 1207 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;\n\n/***/ }),\n/* 1208 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar setPrototypeOf = __webpack_require__(239);\n\nvar isNativeReflectConstruct = __webpack_require__(1209);\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;\n\n/***/ }),\n/* 1209 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;\n\n/***/ }),\n/* 1210 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = groupSort;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _ascending = _interopRequireDefault(__webpack_require__(79));\n\nvar _group = _interopRequireWildcard(__webpack_require__(550));\n\nvar _sort = _interopRequireDefault(__webpack_require__(553));\n\nfunction groupSort(values, reduce, key) {\n return (reduce.length === 1 ? (0, _sort.default)((0, _group.rollup)(values, reduce, key), function (_ref, _ref2) {\n var _ref3 = (0, _slicedToArray2.default)(_ref, 2),\n ak = _ref3[0],\n av = _ref3[1];\n\n var _ref4 = (0, _slicedToArray2.default)(_ref2, 2),\n bk = _ref4[0],\n bv = _ref4[1];\n\n return (0, _ascending.default)(av, bv) || (0, _ascending.default)(ak, bk);\n }) : (0, _sort.default)((0, _group.default)(values, key), function (_ref5, _ref6) {\n var _ref7 = (0, _slicedToArray2.default)(_ref5, 2),\n ak = _ref7[0],\n av = _ref7[1];\n\n var _ref8 = (0, _slicedToArray2.default)(_ref6, 2),\n bk = _ref8[0],\n bv = _ref8[1];\n\n return reduce(av, bv) || (0, _ascending.default)(ak, bk);\n })).map(function (_ref9) {\n var _ref10 = (0, _slicedToArray2.default)(_ref9, 1),\n key = _ref10[0];\n\n return key;\n });\n}\n\n/***/ }),\n/* 1211 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _slicedToArray2 = _interopRequireDefault(__webpack_require__(41));\n\nvar _array = __webpack_require__(1212);\n\nvar _bisect = _interopRequireDefault(__webpack_require__(544));\n\nvar _constant = _interopRequireDefault(__webpack_require__(1213));\n\nvar _extent = _interopRequireDefault(__webpack_require__(549));\n\nvar _identity = _interopRequireDefault(__webpack_require__(552));\n\nvar _nice3 = _interopRequireDefault(__webpack_require__(555));\n\nvar _ticks = _interopRequireWildcard(__webpack_require__(304));\n\nvar _sturges = _interopRequireDefault(__webpack_require__(556));\n\nfunction _default() {\n var value = _identity.default,\n domain = _extent.default,\n threshold = _sturges.default;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1); // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n\n if (!Array.isArray(tz)) {\n var max = x1,\n tn = +tz;\n\n if (domain === _extent.default) {\n var _nice = (0, _nice3.default)(x0, x1, tn);\n\n var _nice2 = (0, _slicedToArray2.default)(_nice, 2);\n\n x0 = _nice2[0];\n x1 = _nice2[1];\n }\n\n tz = (0, _ticks.default)(x0, x1, tn); // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === _extent.default) {\n var step = (0, _ticks.tickIncrement)(x0, x1, tn);\n\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n } // Remove any thresholds outside the domain.\n\n\n var m = tz.length;\n\n while (tz[0] <= x0) {\n tz.shift(), --m;\n }\n\n while (tz[m - 1] > x1) {\n tz.pop(), --m;\n }\n\n var bins = new Array(m + 1),\n bin; // Initialize bins.\n\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n } // Assign data to bins by value, ignoring any outside the domain.\n\n\n for (i = 0; i < n; ++i) {\n x = values[i];\n\n if (x0 <= x && x <= x1) {\n bins[(0, _bisect.default)(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0, _constant.default)(_), histogram) : value;\n };\n\n histogram.domain = function (_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : (0, _constant.default)([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function (_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? (0, _constant.default)(_array.slice.call(_)) : (0, _constant.default)(_), histogram) : threshold;\n };\n\n return histogram;\n}\n\n/***/ }),\n/* 1212 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.map = exports.slice = void 0;\nvar array = Array.prototype;\nvar slice = array.slice;\nexports.slice = slice;\nvar map = array.map;\nexports.map = map;\n\n/***/ }),\n/* 1213 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(x) {\n return function () {\n return x;\n };\n}\n\n/***/ }),\n/* 1214 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _count = _interopRequireDefault(__webpack_require__(198));\n\nvar _quantile = _interopRequireDefault(__webpack_require__(305));\n\nfunction _default(values, min, max) {\n return Math.ceil((max - min) / (2 * ((0, _quantile.default)(values, 0.75) - (0, _quantile.default)(values, 0.25)) * Math.pow((0, _count.default)(values), -1 / 3)));\n}\n\n/***/ }),\n/* 1215 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _count = _interopRequireDefault(__webpack_require__(198));\n\nvar _deviation = _interopRequireDefault(__webpack_require__(547));\n\nfunction _default(values, min, max) {\n return Math.ceil((max - min) / (3.5 * (0, _deviation.default)(values) * Math.pow((0, _count.default)(values), -1 / 3)));\n}\n\n/***/ }),\n/* 1216 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = mean;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction mean(values, valueof) {\n var count = 0;\n var sum = 0;\n\n if (valueof === undefined) {\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var index = -1;\n\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if ((_value = valueof(_value, ++index, values)) != null && (_value = +_value) >= _value) {\n ++count, sum += _value;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n if (count) return sum / count;\n}\n\n/***/ }),\n/* 1217 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _quantile = _interopRequireDefault(__webpack_require__(305));\n\nfunction _default(values, valueof) {\n return (0, _quantile.default)(values, 0.5, valueof);\n}\n\n/***/ }),\n/* 1218 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _regeneratorRuntime2 = __webpack_require__(154);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = merge;\n\nvar _regenerator = _interopRequireDefault(__webpack_require__(154));\n\nvar _marked = /*#__PURE__*/_regeneratorRuntime2.mark(flatten);\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction flatten(arrays) {\n var _iterator, _step, array;\n\n return _regenerator.default.wrap(function flatten$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _iterator = _createForOfIteratorHelper(arrays);\n _context.prev = 1;\n\n _iterator.s();\n\n case 3:\n if ((_step = _iterator.n()).done) {\n _context.next = 8;\n break;\n }\n\n array = _step.value;\n return _context.delegateYield(array, \"t0\", 6);\n\n case 6:\n _context.next = 3;\n break;\n\n case 8:\n _context.next = 13;\n break;\n\n case 10:\n _context.prev = 10;\n _context.t1 = _context[\"catch\"](1);\n\n _iterator.e(_context.t1);\n\n case 13:\n _context.prev = 13;\n\n _iterator.f();\n\n return _context.finish(13);\n\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, _marked, null, [[1, 10, 13, 16]]);\n}\n\nfunction merge(arrays) {\n return Array.from(flatten(arrays));\n}\n\n/***/ }),\n/* 1219 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = pairs;\nexports.pair = pair;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction pairs(values) {\n var pairof = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : pair;\n var pairs = [];\n var previous;\n var first = false;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n if (first) pairs.push(pairof(previous, value));\n previous = value;\n first = true;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return pairs;\n}\n\nfunction pair(a, b) {\n return [a, b];\n}\n\n/***/ }),\n/* 1220 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n\n/***/ }),\n/* 1221 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = least;\n\nvar _ascending = _interopRequireDefault(__webpack_require__(79));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction least(values) {\n var compare = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ascending.default;\n var min;\n var defined = false;\n\n if (compare.length === 1) {\n var minValue;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var element = _step.value;\n var value = compare(element);\n\n if (defined ? (0, _ascending.default)(value, minValue) < 0 : (0, _ascending.default)(value, value) === 0) {\n min = element;\n minValue = value;\n defined = true;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if (defined ? compare(_value, min) < 0 : compare(_value, _value) === 0) {\n min = _value;\n defined = true;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return min;\n}\n\n/***/ }),\n/* 1222 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = greatest;\n\nvar _ascending = _interopRequireDefault(__webpack_require__(79));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction greatest(values) {\n var compare = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ascending.default;\n var max;\n var defined = false;\n\n if (compare.length === 1) {\n var maxValue;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var element = _step.value;\n var value = compare(element);\n\n if (defined ? (0, _ascending.default)(value, maxValue) > 0 : (0, _ascending.default)(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if (defined ? compare(_value, max) > 0 : compare(_value, _value) === 0) {\n max = _value;\n defined = true;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return max;\n}\n\n/***/ }),\n/* 1223 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = greatestIndex;\n\nvar _ascending = _interopRequireDefault(__webpack_require__(79));\n\nvar _maxIndex = _interopRequireDefault(__webpack_require__(559));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction greatestIndex(values) {\n var compare = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ascending.default;\n if (compare.length === 1) return (0, _maxIndex.default)(values, compare);\n var maxValue;\n var max = -1;\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n ++index;\n\n if (max < 0 ? compare(value, value) === 0 : compare(value, maxValue) > 0) {\n maxValue = value;\n max = index;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return max;\n}\n\n/***/ }),\n/* 1224 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = scan;\n\nvar _leastIndex = _interopRequireDefault(__webpack_require__(561));\n\nfunction scan(values, compare) {\n var index = (0, _leastIndex.default)(values, compare);\n return index < 0 ? undefined : index;\n}\n\n/***/ }),\n/* 1225 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shuffler = shuffler;\nexports.default = void 0;\n\nvar _default = shuffler(Math.random);\n\nexports.default = _default;\n\nfunction shuffler(random) {\n return function shuffle(array) {\n var i0 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var i1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : array.length;\n var m = i1 - (i0 = +i0);\n\n while (m) {\n var i = random() * m-- | 0,\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n };\n}\n\n/***/ }),\n/* 1226 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = sum;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction sum(values, valueof) {\n var sum = 0;\n\n if (valueof === undefined) {\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (value = +value) {\n sum += value;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else {\n var index = -1;\n\n var _iterator2 = _createForOfIteratorHelper(values),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _value = _step2.value;\n\n if (_value = +valueof(_value, ++index, values)) {\n sum += _value;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return sum;\n}\n\n/***/ }),\n/* 1227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _transpose = _interopRequireDefault(__webpack_require__(562));\n\nfunction _default() {\n return (0, _transpose.default)(arguments);\n}\n\n/***/ }),\n/* 1228 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = every;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction every(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (!test(value, ++index, values)) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n}\n\n/***/ }),\n/* 1229 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = some;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction some(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (test(value, ++index, values)) {\n return true;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return false;\n}\n\n/***/ }),\n/* 1230 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = filter;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction filter(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n var array = [];\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n if (test(value, ++index, values)) {\n array.push(value);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return array;\n}\n\n/***/ }),\n/* 1231 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = map;\n\nfunction map(values, mapper) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n return Array.from(values, function (value, index) {\n return mapper(value, index, values);\n });\n}\n\n/***/ }),\n/* 1232 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = reduce;\n\nfunction reduce(values, reducer, value) {\n if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n var iterator = values[Symbol.iterator]();\n var done,\n next,\n index = -1;\n\n if (arguments.length < 3) {\n var _iterator$next = iterator.next();\n\n done = _iterator$next.done;\n value = _iterator$next.value;\n if (done) return;\n ++index;\n }\n\n while ((_iterator$next2 = iterator.next(), done = _iterator$next2.done, next = _iterator$next2.value, _iterator$next2), !done) {\n var _iterator$next2;\n\n value = reducer(value, next, ++index, values);\n }\n\n return value;\n}\n\n/***/ }),\n/* 1233 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = reverse;\n\nfunction reverse(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n\n/***/ }),\n/* 1234 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = difference;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction difference(values) {\n values = new Set(values);\n\n for (var _len = arguments.length, others = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n others[_key - 1] = arguments[_key];\n }\n\n for (var _i = 0, _others = others; _i < _others.length; _i++) {\n var other = _others[_i];\n\n var _iterator = _createForOfIteratorHelper(other),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n values.delete(value);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return values;\n}\n\n/***/ }),\n/* 1235 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = disjoint;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction disjoint(values, other) {\n var iterator = other[Symbol.iterator](),\n set = new Set();\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var v = _step.value;\n if (set.has(v)) return false;\n var value = void 0,\n done = void 0;\n\n while (_iterator$next = iterator.next(), value = _iterator$next.value, done = _iterator$next.done, _iterator$next) {\n var _iterator$next;\n\n if (done) break;\n if (Object.is(v, value)) return false;\n set.add(value);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n}\n\n/***/ }),\n/* 1236 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = intersection;\n\nvar _set = _interopRequireDefault(__webpack_require__(1237));\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction intersection(values) {\n for (var _len = arguments.length, others = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n others[_key - 1] = arguments[_key];\n }\n\n values = new Set(values);\n others = others.map(_set.default);\n\n var _iterator = _createForOfIteratorHelper(values),\n _step;\n\n try {\n out: for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var value = _step.value;\n\n var _iterator2 = _createForOfIteratorHelper(others),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var other = _step2.value;\n\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return values;\n}\n\n/***/ }),\n/* 1237 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = set;\n\nfunction set(values) {\n return values instanceof Set ? values : new Set(values);\n}\n\n/***/ }),\n/* 1238 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = subset;\n\nvar _superset = _interopRequireDefault(__webpack_require__(563));\n\nfunction subset(values, other) {\n return (0, _superset.default)(other, values);\n}\n\n/***/ }),\n/* 1239 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = union;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction union() {\n var set = new Set();\n\n for (var _len = arguments.length, others = new Array(_len), _key = 0; _key < _len; _key++) {\n others[_key] = arguments[_key];\n }\n\n for (var _i = 0, _others = others; _i < _others.length; _i++) {\n var other = _others[_i];\n\n var _iterator = _createForOfIteratorHelper(other),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var o = _step.value;\n set.add(o);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return set;\n}\n\n/***/ }),\n/* 1240 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = constant;\n\nfunction constant(x) {\n return function () {\n return x;\n };\n}\n\n/***/ }),\n/* 1241 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _d3Shape = __webpack_require__(1242);\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nfunction _default() {\n return (0, _d3Shape.linkHorizontal)().source(horizontalSource).target(horizontalTarget);\n}\n\n/***/ }),\n/* 1242 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"arc\", {\n enumerable: true,\n get: function get() {\n return _arc.default;\n }\n});\nObject.defineProperty(exports, \"area\", {\n enumerable: true,\n get: function get() {\n return _area.default;\n }\n});\nObject.defineProperty(exports, \"line\", {\n enumerable: true,\n get: function get() {\n return _line.default;\n }\n});\nObject.defineProperty(exports, \"pie\", {\n enumerable: true,\n get: function get() {\n return _pie.default;\n }\n});\nObject.defineProperty(exports, \"areaRadial\", {\n enumerable: true,\n get: function get() {\n return _areaRadial.default;\n }\n});\nObject.defineProperty(exports, \"radialArea\", {\n enumerable: true,\n get: function get() {\n return _areaRadial.default;\n }\n});\nObject.defineProperty(exports, \"lineRadial\", {\n enumerable: true,\n get: function get() {\n return _lineRadial.default;\n }\n});\nObject.defineProperty(exports, \"radialLine\", {\n enumerable: true,\n get: function get() {\n return _lineRadial.default;\n }\n});\nObject.defineProperty(exports, \"pointRadial\", {\n enumerable: true,\n get: function get() {\n return _pointRadial.default;\n }\n});\nObject.defineProperty(exports, \"linkHorizontal\", {\n enumerable: true,\n get: function get() {\n return _index.linkHorizontal;\n }\n});\nObject.defineProperty(exports, \"linkVertical\", {\n enumerable: true,\n get: function get() {\n return _index.linkVertical;\n }\n});\nObject.defineProperty(exports, \"linkRadial\", {\n enumerable: true,\n get: function get() {\n return _index.linkRadial;\n }\n});\nObject.defineProperty(exports, \"symbol\", {\n enumerable: true,\n get: function get() {\n return _symbol.default;\n }\n});\nObject.defineProperty(exports, \"symbols\", {\n enumerable: true,\n get: function get() {\n return _symbol.symbols;\n }\n});\nObject.defineProperty(exports, \"symbolCircle\", {\n enumerable: true,\n get: function get() {\n return _circle.default;\n }\n});\nObject.defineProperty(exports, \"symbolCross\", {\n enumerable: true,\n get: function get() {\n return _cross.default;\n }\n});\nObject.defineProperty(exports, \"symbolDiamond\", {\n enumerable: true,\n get: function get() {\n return _diamond.default;\n }\n});\nObject.defineProperty(exports, \"symbolSquare\", {\n enumerable: true,\n get: function get() {\n return _square.default;\n }\n});\nObject.defineProperty(exports, \"symbolStar\", {\n enumerable: true,\n get: function get() {\n return _star.default;\n }\n});\nObject.defineProperty(exports, \"symbolTriangle\", {\n enumerable: true,\n get: function get() {\n return _triangle.default;\n }\n});\nObject.defineProperty(exports, \"symbolWye\", {\n enumerable: true,\n get: function get() {\n return _wye.default;\n }\n});\nObject.defineProperty(exports, \"curveBasisClosed\", {\n enumerable: true,\n get: function get() {\n return _basisClosed.default;\n }\n});\nObject.defineProperty(exports, \"curveBasisOpen\", {\n enumerable: true,\n get: function get() {\n return _basisOpen.default;\n }\n});\nObject.defineProperty(exports, \"curveBasis\", {\n enumerable: true,\n get: function get() {\n return _basis.default;\n }\n});\nObject.defineProperty(exports, \"curveBundle\", {\n enumerable: true,\n get: function get() {\n return _bundle.default;\n }\n});\nObject.defineProperty(exports, \"curveCardinalClosed\", {\n enumerable: true,\n get: function get() {\n return _cardinalClosed.default;\n }\n});\nObject.defineProperty(exports, \"curveCardinalOpen\", {\n enumerable: true,\n get: function get() {\n return _cardinalOpen.default;\n }\n});\nObject.defineProperty(exports, \"curveCardinal\", {\n enumerable: true,\n get: function get() {\n return _cardinal.default;\n }\n});\nObject.defineProperty(exports, \"curveCatmullRomClosed\", {\n enumerable: true,\n get: function get() {\n return _catmullRomClosed.default;\n }\n});\nObject.defineProperty(exports, \"curveCatmullRomOpen\", {\n enumerable: true,\n get: function get() {\n return _catmullRomOpen.default;\n }\n});\nObject.defineProperty(exports, \"curveCatmullRom\", {\n enumerable: true,\n get: function get() {\n return _catmullRom.default;\n }\n});\nObject.defineProperty(exports, \"curveLinearClosed\", {\n enumerable: true,\n get: function get() {\n return _linearClosed.default;\n }\n});\nObject.defineProperty(exports, \"curveLinear\", {\n enumerable: true,\n get: function get() {\n return _linear.default;\n }\n});\nObject.defineProperty(exports, \"curveMonotoneX\", {\n enumerable: true,\n get: function get() {\n return _monotone.monotoneX;\n }\n});\nObject.defineProperty(exports, \"curveMonotoneY\", {\n enumerable: true,\n get: function get() {\n return _monotone.monotoneY;\n }\n});\nObject.defineProperty(exports, \"curveNatural\", {\n enumerable: true,\n get: function get() {\n return _natural.default;\n }\n});\nObject.defineProperty(exports, \"curveStep\", {\n enumerable: true,\n get: function get() {\n return _step.default;\n }\n});\nObject.defineProperty(exports, \"curveStepAfter\", {\n enumerable: true,\n get: function get() {\n return _step.stepAfter;\n }\n});\nObject.defineProperty(exports, \"curveStepBefore\", {\n enumerable: true,\n get: function get() {\n return _step.stepBefore;\n }\n});\nObject.defineProperty(exports, \"stack\", {\n enumerable: true,\n get: function get() {\n return _stack.default;\n }\n});\nObject.defineProperty(exports, \"stackOffsetExpand\", {\n enumerable: true,\n get: function get() {\n return _expand.default;\n }\n});\nObject.defineProperty(exports, \"stackOffsetDiverging\", {\n enumerable: true,\n get: function get() {\n return _diverging.default;\n }\n});\nObject.defineProperty(exports, \"stackOffsetNone\", {\n enumerable: true,\n get: function get() {\n return _none.default;\n }\n});\nObject.defineProperty(exports, \"stackOffsetSilhouette\", {\n enumerable: true,\n get: function get() {\n return _silhouette.default;\n }\n});\nObject.defineProperty(exports, \"stackOffsetWiggle\", {\n enumerable: true,\n get: function get() {\n return _wiggle.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderAppearance\", {\n enumerable: true,\n get: function get() {\n return _appearance.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderAscending\", {\n enumerable: true,\n get: function get() {\n return _ascending.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderDescending\", {\n enumerable: true,\n get: function get() {\n return _descending.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderInsideOut\", {\n enumerable: true,\n get: function get() {\n return _insideOut.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderNone\", {\n enumerable: true,\n get: function get() {\n return _none2.default;\n }\n});\nObject.defineProperty(exports, \"stackOrderReverse\", {\n enumerable: true,\n get: function get() {\n return _reverse.default;\n }\n});\n\nvar _arc = _interopRequireDefault(__webpack_require__(1243));\n\nvar _area = _interopRequireDefault(__webpack_require__(565));\n\nvar _line = _interopRequireDefault(__webpack_require__(307));\n\nvar _pie = _interopRequireDefault(__webpack_require__(1245));\n\nvar _areaRadial = _interopRequireDefault(__webpack_require__(1248));\n\nvar _lineRadial = _interopRequireDefault(__webpack_require__(567));\n\nvar _pointRadial = _interopRequireDefault(__webpack_require__(568));\n\nvar _index = __webpack_require__(1249);\n\nvar _symbol = _interopRequireWildcard(__webpack_require__(1250));\n\nvar _circle = _interopRequireDefault(__webpack_require__(570));\n\nvar _cross = _interopRequireDefault(__webpack_require__(571));\n\nvar _diamond = _interopRequireDefault(__webpack_require__(572));\n\nvar _square = _interopRequireDefault(__webpack_require__(574));\n\nvar _star = _interopRequireDefault(__webpack_require__(573));\n\nvar _triangle = _interopRequireDefault(__webpack_require__(575));\n\nvar _wye = _interopRequireDefault(__webpack_require__(576));\n\nvar _basisClosed = _interopRequireDefault(__webpack_require__(1251));\n\nvar _basisOpen = _interopRequireDefault(__webpack_require__(1252));\n\nvar _basis = _interopRequireDefault(__webpack_require__(201));\n\nvar _bundle = _interopRequireDefault(__webpack_require__(1253));\n\nvar _cardinalClosed = _interopRequireDefault(__webpack_require__(577));\n\nvar _cardinalOpen = _interopRequireDefault(__webpack_require__(578));\n\nvar _cardinal = _interopRequireDefault(__webpack_require__(202));\n\nvar _catmullRomClosed = _interopRequireDefault(__webpack_require__(1254));\n\nvar _catmullRomOpen = _interopRequireDefault(__webpack_require__(1255));\n\nvar _catmullRom = _interopRequireDefault(__webpack_require__(309));\n\nvar _linearClosed = _interopRequireDefault(__webpack_require__(1256));\n\nvar _linear = _interopRequireDefault(__webpack_require__(199));\n\nvar _monotone = __webpack_require__(1257);\n\nvar _natural = _interopRequireDefault(__webpack_require__(1258));\n\nvar _step = _interopRequireWildcard(__webpack_require__(1259));\n\nvar _stack = _interopRequireDefault(__webpack_require__(1260));\n\nvar _expand = _interopRequireDefault(__webpack_require__(1261));\n\nvar _diverging = _interopRequireDefault(__webpack_require__(1262));\n\nvar _none = _interopRequireDefault(__webpack_require__(162));\n\nvar _silhouette = _interopRequireDefault(__webpack_require__(1263));\n\nvar _wiggle = _interopRequireDefault(__webpack_require__(1264));\n\nvar _appearance = _interopRequireDefault(__webpack_require__(579));\n\nvar _ascending = _interopRequireDefault(__webpack_require__(310));\n\nvar _descending = _interopRequireDefault(__webpack_require__(1265));\n\nvar _insideOut = _interopRequireDefault(__webpack_require__(1266));\n\nvar _none2 = _interopRequireDefault(__webpack_require__(163));\n\nvar _reverse = _interopRequireDefault(__webpack_require__(1267));\n\n/***/ }),\n/* 1243 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _d3Path = __webpack_require__(160);\n\nvar _constant = _interopRequireDefault(__webpack_require__(108));\n\nvar _math = __webpack_require__(161);\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0,\n y10 = y1 - y0,\n x32 = x3 - x2,\n y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < _math.epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n} // Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\n\n\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / (0, _math.sqrt)(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * (0, _math.sqrt)((0, _math.max)(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00; // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nfunction _default() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = (0, _constant.default)(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - _math.halfPi,\n a1 = endAngle.apply(this, arguments) - _math.halfPi,\n da = (0, _math.abs)(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = (0, _d3Path.path)(); // Ensure that the outer radius is always larger than the inner radius.\n\n if (r1 < r0) r = r1, r1 = r0, r0 = r; // Is it a point?\n\n if (!(r1 > _math.epsilon)) context.moveTo(0, 0); // Or is it a circle or annulus?\n else if (da > _math.tau - _math.epsilon) {\n context.moveTo(r1 * (0, _math.cos)(a0), r1 * (0, _math.sin)(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n\n if (r0 > _math.epsilon) {\n context.moveTo(r0 * (0, _math.cos)(a1), r0 * (0, _math.sin)(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n } // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = ap > _math.epsilon && (padRadius ? +padRadius.apply(this, arguments) : (0, _math.sqrt)(r0 * r0 + r1 * r1)),\n rc = (0, _math.min)((0, _math.abs)(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1; // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n\n if (rp > _math.epsilon) {\n var p0 = (0, _math.asin)(rp / r0 * (0, _math.sin)(ap)),\n p1 = (0, _math.asin)(rp / r1 * (0, _math.sin)(ap));\n if ((da0 -= p0 * 2) > _math.epsilon) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > _math.epsilon) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * (0, _math.cos)(a01),\n y01 = r1 * (0, _math.sin)(a01),\n x10 = r0 * (0, _math.cos)(a10),\n y10 = r0 * (0, _math.sin)(a10); // Apply rounded corners?\n\n if (rc > _math.epsilon) {\n var x11 = r1 * (0, _math.cos)(a11),\n y11 = r1 * (0, _math.sin)(a11),\n x00 = r0 * (0, _math.cos)(a00),\n y00 = r0 * (0, _math.sin)(a00),\n oc; // Restrict the corner radius according to the sector angle.\n\n if (da < _math.pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / (0, _math.sin)((0, _math.acos)((ax * bx + ay * by) / ((0, _math.sqrt)(ax * ax + ay * ay) * (0, _math.sqrt)(bx * bx + by * by))) / 2),\n lc = (0, _math.sqrt)(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = (0, _math.min)(rc, (r0 - lc) / (kc - 1));\n rc1 = (0, _math.min)(rc, (r1 - lc) / (kc + 1));\n }\n } // Is the sector collapsed to a line?\n\n\n if (!(da1 > _math.epsilon)) context.moveTo(x01, y01); // Does the sector’s outer ring have rounded corners?\n else if (rc1 > _math.epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?\n\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, (0, _math.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0, _math.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, (0, _math.atan2)(t1.y11, t1.x11), (0, _math.atan2)(t1.y01, t1.x01), !cw);\n }\n } // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n\n if (!(r0 > _math.epsilon) || !(da0 > _math.epsilon)) context.lineTo(x10, y10); // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > _math.epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?\n\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, (0, _math.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0, _math.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, (0, _math.atan2)(t1.y11, t1.x11), (0, _math.atan2)(t1.y01, t1.x01), !cw);\n }\n } // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n context.closePath();\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function () {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math.pi / 2;\n return [(0, _math.cos)(a) * r, (0, _math.sin)(a) * r];\n };\n\n arc.innerRadius = function (_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function (_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function (_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function (_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : padRadius;\n };\n\n arc.startAngle = function (_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : startAngle;\n };\n\n arc.endAngle = function (_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : endAngle;\n };\n\n arc.padAngle = function (_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), arc) : padAngle;\n };\n\n arc.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, arc) : context;\n };\n\n return arc;\n}\n\n/***/ }),\n/* 1244 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n\n this._ = \"\";\n}\n\nfunction path() {\n return new Path();\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function moveTo(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function lineTo(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function quadraticCurveTo(x1, y1, x, y) {\n this._ += \"Q\" + +x1 + \",\" + +y1 + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + +x1 + \",\" + +y1 + \",\" + +x2 + \",\" + +y2 + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01; // Is the radius negative? Error.\n\n if (r < 0) throw new Error(\"negative radius: \" + r); // Is this path empty? Move to (x1,y1).\n\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n } // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to.\n\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + +(y01 * x20 > x01 * y20) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0; // Is the radius negative? Error.\n\n if (r < 0) throw new Error(\"negative radius: \" + r); // Is this path empty? Move to (x0,y0).\n\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n } // Is this arc empty? We’re done.\n\n\n if (!r) return; // Does the angle go the wrong way? Flip the direction.\n\n if (da < 0) da = da % tau + tau; // Is this a complete circle? Draw two arcs to complete the circle.\n\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n } // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + +(da >= pi) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function rect(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + +w + \"v\" + +h + \"h\" + -w + \"Z\";\n },\n toString: function toString() {\n return this._;\n }\n};\nvar _default = path;\nexports.default = _default;\n\n/***/ }),\n/* 1245 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _constant = _interopRequireDefault(__webpack_require__(108));\n\nvar _descending = _interopRequireDefault(__webpack_require__(1246));\n\nvar _identity = _interopRequireDefault(__webpack_require__(1247));\n\nvar _math = __webpack_require__(161);\n\nfunction _default() {\n var value = _identity.default,\n sortValues = _descending.default,\n sort = null,\n startAngle = (0, _constant.default)(0),\n endAngle = (0, _constant.default)(_math.tau),\n padAngle = (0, _constant.default)(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(_math.tau, Math.max(-_math.tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n } // Optionally sort the arcs by previously-computed values or by data.\n\n\n if (sortValues != null) index.sort(function (i, j) {\n return sortValues(arcs[i], arcs[j]);\n });else if (sort != null) index.sort(function (i, j) {\n return sort(data[i], data[j]);\n }); // Compute the arcs! They are stored in the original data's order.\n\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), pie) : value;\n };\n\n pie.sortValues = function (_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function (_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function (_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), pie) : startAngle;\n };\n\n pie.endAngle = function (_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), pie) : endAngle;\n };\n\n pie.padAngle = function (_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), pie) : padAngle;\n };\n\n return pie;\n}\n\n/***/ }),\n/* 1246 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\n/***/ }),\n/* 1247 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(d) {\n return d;\n}\n\n/***/ }),\n/* 1248 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nvar _interopRequireWildcard = __webpack_require__(14);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _radial = _interopRequireWildcard(__webpack_require__(566));\n\nvar _area = _interopRequireDefault(__webpack_require__(565));\n\nvar _lineRadial = __webpack_require__(567);\n\nfunction _default() {\n var a = (0, _area.default)().curve(_radial.curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function () {\n return (0, _lineRadial.lineRadial)(x0());\n }, delete a.lineX0;\n a.lineEndAngle = function () {\n return (0, _lineRadial.lineRadial)(x1());\n }, delete a.lineX1;\n a.lineInnerRadius = function () {\n return (0, _lineRadial.lineRadial)(y0());\n }, delete a.lineY0;\n a.lineOuterRadius = function () {\n return (0, _lineRadial.lineRadial)(y1());\n }, delete a.lineY1;\n\n a.curve = function (_) {\n return arguments.length ? c((0, _radial.default)(_)) : c()._curve;\n };\n\n return a;\n}\n\n/***/ }),\n/* 1249 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.linkHorizontal = linkHorizontal;\nexports.linkVertical = linkVertical;\nexports.linkRadial = linkRadial;\n\nvar _d3Path = __webpack_require__(160);\n\nvar _array = __webpack_require__(569);\n\nvar _constant = _interopRequireDefault(__webpack_require__(108));\n\nvar _point = __webpack_require__(308);\n\nvar _pointRadial = _interopRequireDefault(__webpack_require__(568));\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = _point.x,\n y = _point.y,\n context = null;\n\n function link() {\n var buffer,\n argv = _array.slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv);\n\n if (!context) context = buffer = (0, _d3Path.path)();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function (_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function (_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function (_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), link) : x;\n };\n\n link.y = function (_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), link) : y;\n };\n\n link.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = (0, _pointRadial.default)(x0, y0),\n p1 = (0, _pointRadial.default)(x0, y0 = (y0 + y1) / 2),\n p2 = (0, _pointRadial.default)(x1, y0),\n p3 = (0, _pointRadial.default)(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nfunction linkHorizontal() {\n return link(curveHorizontal);\n}\n\nfunction linkVertical() {\n return link(curveVertical);\n}\n\nfunction linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n\n/***/ }),\n/* 1250 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.symbols = void 0;\n\nvar _d3Path = __webpack_require__(160);\n\nvar _circle = _interopRequireDefault(__webpack_require__(570));\n\nvar _cross = _interopRequireDefault(__webpack_require__(571));\n\nvar _diamond = _interopRequireDefault(__webpack_require__(572));\n\nvar _star = _interopRequireDefault(__webpack_require__(573));\n\nvar _square = _interopRequireDefault(__webpack_require__(574));\n\nvar _triangle = _interopRequireDefault(__webpack_require__(575));\n\nvar _wye = _interopRequireDefault(__webpack_require__(576));\n\nvar _constant = _interopRequireDefault(__webpack_require__(108));\n\nvar symbols = [_circle.default, _cross.default, _diamond.default, _square.default, _star.default, _triangle.default, _wye.default];\nexports.symbols = symbols;\n\nfunction _default() {\n var type = (0, _constant.default)(_circle.default),\n size = (0, _constant.default)(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = (0, _d3Path.path)();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function (_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : (0, _constant.default)(_), symbol) : type;\n };\n\n symbol.size = function (_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), symbol) : size;\n };\n\n symbol.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n\n/***/ }),\n/* 1251 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _noop = _interopRequireDefault(__webpack_require__(200));\n\nvar _basis = __webpack_require__(201);\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: _noop.default,\n areaEnd: _noop.default,\n lineStart: function lineStart() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n switch (this._point) {\n case 1:\n {\n this._context.moveTo(this._x2, this._y2);\n\n this._context.closePath();\n\n break;\n }\n\n case 2:\n {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n\n this._context.closePath();\n\n break;\n }\n\n case 3:\n {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function point(x, y) {\n x = +x, y = +y;\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._x2 = x, this._y2 = y;\n break;\n\n case 1:\n this._point = 2;\n this._x3 = x, this._y3 = y;\n break;\n\n case 2:\n this._point = 3;\n this._x4 = x, this._y4 = y;\n\n this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6);\n\n break;\n\n default:\n (0, _basis.point)(this, x, y);\n break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nfunction _default(context) {\n return new BasisClosed(context);\n}\n\n/***/ }),\n/* 1252 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _basis = __webpack_require__(201);\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function areaStart() {\n this._line = 0;\n },\n areaEnd: function areaEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._x0 = this._x1 = this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function point(x, y) {\n x = +x, y = +y;\n\n switch (this._point) {\n case 0:\n this._point = 1;\n break;\n\n case 1:\n this._point = 2;\n break;\n\n case 2:\n this._point = 3;\n var x0 = (this._x0 + 4 * this._x1 + x) / 6,\n y0 = (this._y0 + 4 * this._y1 + y) / 6;\n this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0);\n break;\n\n case 3:\n this._point = 4;\n // proceed\n\n default:\n (0, _basis.point)(this, x, y);\n break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nfunction _default(context) {\n return new BasisOpen(context);\n}\n\n/***/ }),\n/* 1253 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _basis = __webpack_require__(201);\n\nfunction Bundle(context, beta) {\n this._basis = new _basis.Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function lineStart() {\n this._x = [];\n this._y = [];\n\n this._basis.lineStart();\n },\n lineEnd: function lineEnd() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n\n this._basis.point(this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), this._beta * y[i] + (1 - this._beta) * (y0 + t * dy));\n }\n }\n\n this._x = this._y = null;\n\n this._basis.lineEnd();\n },\n point: function point(x, y) {\n this._x.push(+x);\n\n this._y.push(+y);\n }\n};\n\nvar _default = function custom(beta) {\n function bundle(context) {\n return beta === 1 ? new _basis.Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function (beta) {\n return custom(+beta);\n };\n\n return bundle;\n}(0.85);\n\nexports.default = _default;\n\n/***/ }),\n/* 1254 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _cardinalClosed = __webpack_require__(577);\n\nvar _noop = _interopRequireDefault(__webpack_require__(200));\n\nvar _catmullRom = __webpack_require__(309);\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: _noop.default,\n areaEnd: _noop.default,\n lineStart: function lineStart() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;\n },\n lineEnd: function lineEnd() {\n switch (this._point) {\n case 1:\n {\n this._context.moveTo(this._x3, this._y3);\n\n this._context.closePath();\n\n break;\n }\n\n case 2:\n {\n this._context.lineTo(this._x3, this._y3);\n\n this._context.closePath();\n\n break;\n }\n\n case 3:\n {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function point(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._x3 = x, this._y3 = y;\n break;\n\n case 1:\n this._point = 2;\n\n this._context.moveTo(this._x4 = x, this._y4 = y);\n\n break;\n\n case 2:\n this._point = 3;\n this._x5 = x, this._y5 = y;\n break;\n\n default:\n (0, _catmullRom.point)(this, x, y);\n break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar _default = function custom(alpha) {\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed.CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function (alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n}(0.5);\n\nexports.default = _default;\n\n/***/ }),\n/* 1255 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _cardinalOpen = __webpack_require__(578);\n\nvar _catmullRom = __webpack_require__(309);\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function areaStart() {\n this._line = 0;\n },\n areaEnd: function areaEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function point(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0:\n this._point = 1;\n break;\n\n case 1:\n this._point = 2;\n break;\n\n case 2:\n this._point = 3;\n this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);\n break;\n\n case 3:\n this._point = 4;\n // proceed\n\n default:\n (0, _catmullRom.point)(this, x, y);\n break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar _default = function custom(alpha) {\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen.CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function (alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n}(0.5);\n\nexports.default = _default;\n\n/***/ }),\n/* 1256 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _noop = _interopRequireDefault(__webpack_require__(200));\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: _noop.default,\n areaEnd: _noop.default,\n lineStart: function lineStart() {\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (this._point) this._context.closePath();\n },\n point: function point(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nfunction _default(context) {\n return new LinearClosed(context);\n}\n\n/***/ }),\n/* 1257 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.monotoneX = monotoneX;\nexports.monotoneY = monotoneY;\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n} // Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\n\n\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n} // Calculate a one-sided slope.\n\n\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n} // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\n\n\nfunction _point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function areaStart() {\n this._line = 0;\n },\n areaEnd: function areaEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n switch (this._point) {\n case 2:\n this._context.lineTo(this._x1, this._y1);\n\n break;\n\n case 3:\n _point(this, this._t0, slope2(this, this._t0));\n\n break;\n }\n\n if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function point(x, y) {\n var t1 = NaN;\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n\n case 1:\n this._point = 2;\n break;\n\n case 2:\n this._point = 3;\n\n _point(this, slope2(this, t1 = slope3(this, x, y)), t1);\n\n break;\n\n default:\n _point(this, this._t0, t1 = slope3(this, x, y));\n\n break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n};\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function (x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function moveTo(x, y) {\n this._context.moveTo(y, x);\n },\n closePath: function closePath() {\n this._context.closePath();\n },\n lineTo: function lineTo(x, y) {\n this._context.lineTo(y, x);\n },\n bezierCurveTo: function bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._context.bezierCurveTo(y1, x1, y2, x2, y, x);\n }\n};\n\nfunction monotoneX(context) {\n return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n return new MonotoneY(context);\n}\n\n/***/ }),\n/* 1258 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function areaStart() {\n this._line = 0;\n },\n areaEnd: function areaEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function lineEnd() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || this._line !== 0 && n === 1) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function point(x, y) {\n this._x.push(+x);\n\n this._y.push(+y);\n }\n}; // See https://www.particleincell.com/2012/bezier-splines/ for derivation.\n\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n\n for (i = 1; i < n - 1; ++i) {\n a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n }\n\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n\n for (i = 1; i < n; ++i) {\n m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n }\n\n a[n - 1] = r[n - 1] / b[n - 1];\n\n for (i = n - 2; i >= 0; --i) {\n a[i] = (r[i] - a[i + 1]) / b[i];\n }\n\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n\n for (i = 0; i < n - 1; ++i) {\n b[i] = 2 * x[i + 1] - a[i + 1];\n }\n\n return [a, b];\n}\n\nfunction _default(context) {\n return new Natural(context);\n}\n\n/***/ }),\n/* 1259 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.stepBefore = stepBefore;\nexports.stepAfter = stepAfter;\n\nfunction Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function areaStart() {\n this._line = 0;\n },\n areaEnd: function areaEnd() {\n this._line = NaN;\n },\n lineStart: function lineStart() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function lineEnd() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function point(x, y) {\n x = +x, y = +y;\n\n switch (this._point) {\n case 0:\n this._point = 1;\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\n break;\n\n case 1:\n this._point = 2;\n // proceed\n\n default:\n {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n\n this._context.lineTo(x1, this._y);\n\n this._context.lineTo(x1, y);\n }\n\n break;\n }\n }\n\n this._x = x, this._y = y;\n }\n};\n\nfunction _default(context) {\n return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n return new Step(context, 1);\n}\n\n/***/ }),\n/* 1260 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _array = __webpack_require__(569);\n\nvar _constant = _interopRequireDefault(__webpack_require__(108));\n\nvar _none = _interopRequireDefault(__webpack_require__(162));\n\nvar _none2 = _interopRequireDefault(__webpack_require__(163));\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction _default() {\n var keys = (0, _constant.default)([]),\n order = _none2.default,\n offset = _none.default,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function (_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : (0, _constant.default)(_array.slice.call(_)), stack) : keys;\n };\n\n stack.value = function (_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : (0, _constant.default)(+_), stack) : value;\n };\n\n stack.order = function (_) {\n return arguments.length ? (order = _ == null ? _none2.default : typeof _ === \"function\" ? _ : (0, _constant.default)(_array.slice.call(_)), stack) : order;\n };\n\n stack.offset = function (_) {\n return arguments.length ? (offset = _ == null ? _none.default : _, stack) : offset;\n };\n\n return stack;\n}\n\n/***/ }),\n/* 1261 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _none = _interopRequireDefault(__webpack_require__(162));\n\nfunction _default(series, order) {\n if (!((n = series.length) > 0)) return;\n\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) {\n y += series[i][j][1] || 0;\n }\n\n if (y) for (i = 0; i < n; ++i) {\n series[i][j][1] /= y;\n }\n }\n\n (0, _none.default)(series, order);\n}\n\n/***/ }),\n/* 1262 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nfunction _default(series, order) {\n if (!((n = series.length) > 0)) return;\n\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n\n/***/ }),\n/* 1263 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _none = _interopRequireDefault(__webpack_require__(162));\n\nfunction _default(series, order) {\n if (!((n = series.length) > 0)) return;\n\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) {\n y += series[i][j][1] || 0;\n }\n\n s0[j][1] += s0[j][0] = -y / 2;\n }\n\n (0, _none.default)(series, order);\n}\n\n/***/ }),\n/* 1264 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _none = _interopRequireDefault(__webpack_require__(162));\n\nfunction _default(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n\n s1 += sij0, s2 += s3 * sij0;\n }\n\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n\n s0[j - 1][1] += s0[j - 1][0] = y;\n (0, _none.default)(series, order);\n}\n\n/***/ }),\n/* 1265 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _ascending = _interopRequireDefault(__webpack_require__(310));\n\nfunction _default(series) {\n return (0, _ascending.default)(series).reverse();\n}\n\n/***/ }),\n/* 1266 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _appearance = _interopRequireDefault(__webpack_require__(579));\n\nvar _ascending = __webpack_require__(310);\n\nfunction _default(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(_ascending.sum),\n order = (0, _appearance.default)(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n\n/***/ }),\n/* 1267 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _interopRequireDefault = __webpack_require__(2);\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _none = _interopRequireDefault(__webpack_require__(163));\n\nfunction _default(series) {\n return (0, _none.default)(series).reverse();\n}\n\n/***/ }),\n/* 1268 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.COLOR_FIELD = exports.Y_FIELD = exports.X_FIELD = void 0;\nvar X_FIELD = 'x';\nexports.X_FIELD = X_FIELD;\nvar Y_FIELD = 'y';\nexports.Y_FIELD = Y_FIELD;\nvar COLOR_FIELD = 'name';\nexports.COLOR_FIELD = COLOR_FIELD;\n\n/***/ }),\n/* 1269 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cutoffCircle = cutoffCircle;\n\nvar _util = __webpack_require__(0);\n\n/**\n * 是否有环的判断依据是,当前 source 对应的 target 是 source 的父节点\n * @param circleCache\n * @param source\n * @param target\n */\nfunction hasCircle(circleCache, source, target) {\n // 父元素为空,则表示已经到头了!\n if ((0, _util.size)(source) === 0) return false; // target 在父元素路径上,所以形成环\n\n if (source.includes(target)) return true; // 递归\n\n return source.some(function (s) {\n return hasCircle(circleCache, circleCache.get(s), target);\n });\n}\n/**\n * 切断桑基图数据中的环(会丢失数据),保证顺序\n * @param data\n * @param sourceField\n * @param targetField\n */\n\n\nfunction cutoffCircle(data, sourceField, targetField) {\n var dataWithoutCircle = [];\n var removedData = [];\n /** 存储父子关系的链表关系,具体是 子 -> 父 数组 */\n\n var circleCache = new Map();\n (0, _util.each)(data, function (d) {\n var source = d[sourceField];\n var target = d[targetField]; // 当前数据,不成环\n\n if (!hasCircle(circleCache, [source], target)) {\n // 保留数据\n dataWithoutCircle.push(d); // 存储关系链表\n\n if (!circleCache.has(target)) {\n circleCache.set(target, []);\n }\n\n circleCache.get(target).push(source);\n } else {\n // 保存起来用于打印 log\n removedData.push(d);\n }\n });\n\n if (removedData.length !== 0) {\n console.warn(\"sankey data contains circle, \" + removedData.length + \" records removed.\", removedData);\n }\n\n return dataWithoutCircle;\n}\n\n/***/ }),\n/* 1270 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getNodeWidthRatio = getNodeWidthRatio;\nexports.getNodePaddingRatio = getNodePaddingRatio;\n\nvar _number = __webpack_require__(196);\n\nfunction getNodeWidthRatio(nodeWidth, nodeWidthRatio, width) {\n return (0, _number.isRealNumber)(nodeWidth) ? nodeWidth / width : nodeWidthRatio;\n}\n\nfunction getNodePaddingRatio(nodePadding, nodePaddingRatio, height) {\n return (0, _number.isRealNumber)(nodePadding) ? nodePadding / height : nodePaddingRatio;\n}\n\n/***/ }),\n/* 1271 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Chord = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _plot = __webpack_require__(21);\n\nvar _adaptor = __webpack_require__(1272);\n\n/**\n * 弦图 Chord\n */\nvar Chord =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(Chord, _super);\n\n function Chord() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n\n\n _this.type = 'chord';\n return _this;\n }\n\n Chord.prototype.getDefaultOptions = function () {\n return {\n nodeStyle: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1\n },\n edgeStyle: {\n opacity: 0.5,\n lineWidth: 2\n },\n label: {\n fields: ['x', 'name'],\n callback: function callback(x, name) {\n var centerX = (x[0] + x[1]) / 2;\n var offsetX = centerX > 0.5 ? -4 : 4;\n return {\n labelEmit: true,\n style: {\n fill: '#8c8c8c'\n },\n offsetX: offsetX,\n content: name\n };\n }\n },\n tooltip: {\n fields: ['source', 'target', 'value'],\n formatter: function formatter(datum) {\n var source = datum.source,\n target = datum.target,\n value = datum.value;\n return {\n name: source + \" -> \" + target,\n value: value\n };\n }\n },\n interactions: [{\n type: 'element-active'\n }],\n weight: true,\n nodePaddingRatio: 0.1,\n nodeWidthRatio: 0.05\n };\n };\n /**\n * 获取适配器\n */\n\n\n Chord.prototype.getSchemaAdaptor = function () {\n return _adaptor.adaptor;\n };\n\n return Chord;\n}(_plot.Plot);\n\nexports.Chord = Chord;\n\n/***/ }),\n/* 1272 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _common = __webpack_require__(25);\n\nvar _utils = __webpack_require__(12);\n\nvar _geometries = __webpack_require__(32);\n\nvar _chord = __webpack_require__(1273);\n\nvar _data = __webpack_require__(107);\n\nvar _constant = __webpack_require__(1274);\n\nfunction transformData(params) {\n // 将弦图数据放到ext中,nodeGeometry edgeGeometry使用\n var options = params.options;\n var data = options.data,\n sourceField = options.sourceField,\n targetField = options.targetField,\n weightField = options.weightField,\n nodePaddingRatio = options.nodePaddingRatio,\n nodeWidthRatio = options.nodeWidthRatio; // 将数据转换为node link格式\n\n var chordLayoutInputData = (0, _data.transformDataToNodeLinkData)(data, sourceField, targetField, weightField);\n\n var _a = (0, _chord.chordLayout)({\n weight: true,\n nodePaddingRatio: nodePaddingRatio,\n nodeWidthRatio: nodeWidthRatio\n }, chordLayoutInputData),\n nodes = _a.nodes,\n links = _a.links; // 1. 生成绘制node使用数据\n\n\n var nodesData = nodes.map(function (node) {\n return {\n id: node.id,\n x: node.x,\n y: node.y,\n name: node.name\n };\n }); // 2. 生成edge使用数据\n // TODO: 对于边的数据暂时只支持两端一致\n\n var edgesData = links.map(function (link) {\n return {\n source: link.source.name,\n target: link.target.name,\n x: link.x,\n y: link.y,\n value: link.value\n };\n });\n return (0, _tslib.__assign)((0, _tslib.__assign)({}, params), {\n ext: (0, _tslib.__assign)((0, _tslib.__assign)({}, params.ext), {\n // 将chordData放到ext中,方便下面的geometry使用\n chordData: {\n nodesData: nodesData,\n edgesData: edgesData\n }\n })\n });\n}\n/**\n * scale配置\n * @param params 参数\n */\n\n\nfunction scale(params) {\n var _a;\n\n var chart = params.chart;\n chart.scale((_a = {\n x: {\n sync: true,\n nice: true\n },\n y: {\n sync: true,\n nice: true,\n max: 1\n }\n }, _a[_constant.NODE_COLOR_FIELD] = {\n sync: 'color'\n }, _a[_constant.EDGE_COLOR_FIELD] = {\n sync: 'color'\n }, _a));\n return params;\n}\n/**\n * axis配置\n * @param params 参数\n */\n\n\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend配置\n * @param params 参数\n */\n\n\nfunction legend(params) {\n var chart = params.chart;\n chart.legend(false);\n return params;\n}\n/**\n * tooltip配置\n * @param params 参数\n */\n\n\nfunction tooltip(params) {\n var chart = params.chart;\n chart.tooltip({\n showTitle: false,\n showMarkers: false\n });\n return params;\n}\n/**\n * coordinate配置\n * @param params 参数\n */\n\n\nfunction coordinate(params) {\n var chart = params.chart;\n chart.coordinate('polar').reflect('y');\n return params;\n}\n/**\n * nodeGeometry配置\n * @param params 参数\n */\n\n\nfunction nodeGeometry(params) {\n // node view\n var chart = params.chart,\n options = params.options;\n var nodesData = params.ext.chordData.nodesData;\n var nodeStyle = options.nodeStyle,\n label = options.label;\n var nodeView = chart.createView();\n nodeView.data(nodesData); // 面\n\n (0, _geometries.polygon)({\n chart: nodeView,\n options: {\n xField: _constant.X_FIELD,\n yField: _constant.Y_FIELD,\n seriesField: _constant.NODE_COLOR_FIELD,\n polygon: {\n style: nodeStyle\n },\n label: label,\n tooltip: false\n }\n });\n return params;\n}\n/**\n * edgeGeometry配置\n * @param params 参数\n */\n\n\nfunction edgeGeometry(params) {\n var chart = params.chart,\n options = params.options;\n var edgesData = params.ext.chordData.edgesData;\n var edgeStyle = options.edgeStyle,\n tooltip = options.tooltip;\n var edgeView = chart.createView();\n edgeView.data(edgesData); // edge\n\n var edgeOptions = {\n xField: _constant.X_FIELD,\n yField: _constant.Y_FIELD,\n seriesField: _constant.EDGE_COLOR_FIELD,\n edge: {\n style: edgeStyle,\n shape: 'arc'\n },\n tooltip: tooltip\n };\n (0, _geometries.edge)({\n chart: edgeView,\n options: edgeOptions\n });\n return params;\n}\n/**\n * 弦图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return (0, _utils.flow)(transformData, coordinate, scale, axis, legend, tooltip, edgeGeometry, nodeGeometry, _common.interaction, _common.animation, _common.theme)(params);\n}\n\n/***/ }),\n/* 1273 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getDefaultOptions = getDefaultOptions;\nexports.chordLayout = chordLayout;\n\nvar _util = __webpack_require__(0);\n\n/*\n * for Arc Diagram (edges without weight) / Chord Diagram (edges with source and target weight)\n * graph data required (nodes, edges)\n */\nvar DEFAULT_OPTIONS = {\n y: 0,\n nodeWidthRatio: 0.05,\n weight: false,\n nodePaddingRatio: 0.1,\n id: function id(node) {\n return node.id;\n },\n source: function source(edge) {\n return edge.source;\n },\n target: function target(edge) {\n return edge.target;\n },\n sourceWeight: function sourceWeight(edge) {\n return edge.value || 1;\n },\n targetWeight: function targetWeight(edge) {\n return edge.value || 1;\n },\n sortBy: null\n};\n/**\n * 处理节点的value、edges\n * @param nodeById\n * @param edges\n * @param options\n */\n\nfunction processGraph(nodeById, edges, options) {\n (0, _util.forIn)(nodeById, function (node, id) {\n // in edges, out edges\n node.inEdges = edges.filter(function (edge) {\n return \"\" + options.target(edge) === \"\" + id;\n });\n node.outEdges = edges.filter(function (edge) {\n return \"\" + options.source(edge) === \"\" + id;\n }); // frequency\n\n node.edges = node.outEdges.concat(node.inEdges);\n node.frequency = node.edges.length; // weight\n\n node.value = 0;\n node.inEdges.forEach(function (edge) {\n node.value += options.targetWeight(edge);\n });\n node.outEdges.forEach(function (edge) {\n node.value += options.sourceWeight(edge);\n });\n });\n}\n/**\n * 节点排序\n * @param nodes\n * @param options\n */\n\n\nfunction sortNodes(nodes, options) {\n var sortMethods = {\n weight: function weight(a, b) {\n return b.value - a.value;\n },\n frequency: function frequency(a, b) {\n return b.frequency - a.frequency;\n },\n id: function id(a, b) {\n return (\"\" + options.id(a)).localeCompare(\"\" + options.id(b));\n }\n };\n var method = sortMethods[options.sortBy];\n\n if (!method && (0, _util.isFunction)(options.sortBy)) {\n method = options.sortBy;\n }\n\n if (method) {\n nodes.sort(method);\n }\n}\n\nfunction layoutNodes(nodes, options) {\n var len = nodes.length;\n\n if (!len) {\n throw new TypeError(\"Invalid nodes: it's empty!\");\n }\n\n if (options.weight) {\n var nodePaddingRatio_1 = options.nodePaddingRatio;\n\n if (nodePaddingRatio_1 < 0 || nodePaddingRatio_1 >= 1) {\n throw new TypeError('Invalid nodePaddingRatio: it must be in range [0, 1)!');\n }\n\n var margin_1 = nodePaddingRatio_1 / (2 * len);\n var nodeWidthRatio_1 = options.nodeWidthRatio;\n\n if (nodeWidthRatio_1 <= 0 || nodeWidthRatio_1 >= 1) {\n throw new TypeError('Invalid nodeWidthRatio: it must be in range (0, 1)!');\n }\n\n var totalValue_1 = 0;\n nodes.forEach(function (node) {\n totalValue_1 += node.value;\n });\n nodes.forEach(function (node) {\n node.weight = node.value / totalValue_1;\n node.width = node.weight * (1 - nodePaddingRatio_1);\n node.height = nodeWidthRatio_1;\n });\n nodes.forEach(function (node, index) {\n // x\n var deltaX = 0;\n\n for (var i = index - 1; i >= 0; i--) {\n deltaX += nodes[i].width + 2 * margin_1;\n }\n\n var minX = node.minX = margin_1 + deltaX;\n var maxX = node.maxX = node.minX + node.width;\n var minY = node.minY = options.y - nodeWidthRatio_1 / 2;\n var maxY = node.maxY = minY + nodeWidthRatio_1;\n node.x = [minX, maxX, maxX, minX];\n node.y = [minY, minY, maxY, maxY];\n /* points\n * 3---2\n * | |\n * 0---1\n */\n // node.x = minX + 0.5 * node.width;\n // node.y = options.y;\n });\n } else {\n var deltaX_1 = 1 / len;\n nodes.forEach(function (node, index) {\n node.x = (index + 0.5) * deltaX_1;\n node.y = options.y;\n });\n }\n\n return nodes;\n}\n\nfunction locatingEdges(nodeById, edges, options) {\n if (options.weight) {\n var valueById_1 = {};\n (0, _util.forIn)(nodeById, function (node, id) {\n valueById_1[id] = node.value;\n });\n edges.forEach(function (edge) {\n var sId = options.source(edge);\n var tId = options.target(edge);\n var sNode = nodeById[sId];\n var tNode = nodeById[tId];\n\n if (sNode && tNode) {\n var sValue = valueById_1[sId];\n var currentSValue = options.sourceWeight(edge);\n var sStart = sNode.minX + (sNode.value - sValue) / sNode.value * sNode.width;\n var sEnd = sStart + currentSValue / sNode.value * sNode.width;\n valueById_1[sId] -= currentSValue;\n var tValue = valueById_1[tId];\n var currentTValue = options.targetWeight(edge);\n var tStart = tNode.minX + (tNode.value - tValue) / tNode.value * tNode.width;\n var tEnd = tStart + currentTValue / tNode.value * tNode.width;\n valueById_1[tId] -= currentTValue;\n var y = options.y;\n edge.x = [sStart, sEnd, tStart, tEnd];\n edge.y = [y, y, y, y]; // 将edge的source与target的id换为 sourceNode与targetNode\n\n edge.source = sNode;\n edge.target = tNode;\n }\n });\n } else {\n edges.forEach(function (edge) {\n var sNode = nodeById[options.source(edge)];\n var tNode = nodeById[options.target(edge)];\n\n if (sNode && tNode) {\n edge.x = [sNode.x, tNode.x];\n edge.y = [sNode.y, tNode.y]; // 将edge的source与target的id换为 sourceNode与targetNode\n\n edge.source = sNode;\n edge.target = tNode;\n }\n });\n }\n\n return edges;\n}\n\nfunction getDefaultOptions(options) {\n return (0, _util.assign)({}, DEFAULT_OPTIONS, options);\n}\n\nfunction chordLayout(chordLayoutOptions, chordLayoutInputData) {\n var options = getDefaultOptions(chordLayoutOptions);\n var nodeById = {};\n var nodes = chordLayoutInputData.nodes;\n var links = chordLayoutInputData.links;\n nodes.forEach(function (node) {\n var id = options.id(node);\n nodeById[id] = node;\n });\n processGraph(nodeById, links, options);\n sortNodes(nodes, options);\n var outputNodes = layoutNodes(nodes, options);\n var outputLinks = locatingEdges(nodeById, links, options);\n return {\n nodes: outputNodes,\n links: outputLinks\n };\n}\n\n/***/ }),\n/* 1274 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.EDGE_COLOR_FIELD = exports.NODE_COLOR_FIELD = exports.Y_FIELD = exports.X_FIELD = void 0;\nvar X_FIELD = 'x';\nexports.X_FIELD = X_FIELD;\nvar Y_FIELD = 'y';\nexports.Y_FIELD = Y_FIELD;\nvar NODE_COLOR_FIELD = 'name';\nexports.NODE_COLOR_FIELD = NODE_COLOR_FIELD;\nvar EDGE_COLOR_FIELD = 'source';\nexports.EDGE_COLOR_FIELD = EDGE_COLOR_FIELD;\n\n/***/ }),\n/* 1275 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.P = void 0;\n\nvar _tslib = __webpack_require__(1);\n\nvar _utils = __webpack_require__(12);\n\nvar _plot = __webpack_require__(21);\n\n/**\n * 给 G2Plot 提供非常简单的开放开发的机制。目的是能够让社区和业务上自己基于 G2Plot 开发自己的定制图表库。主要分成几类图表:\n * 1. 领域专业的图表,内部同学因为没有场景,不一定能做的完善。\n * 2. 定制业务的图表,不具备通用性\n * 3. 趣味性的可视化组件\n * 然后官方可以根据社区的情况,可以进行一些官方推荐和采纳。\n *\n * 如果使用?\n *\n * ```ts\n * import { P } from '@antv/g2plot';\n * import { GeoWorldMap, GeoWorldMapOptions } from 'g2plot-geo-world-map';\n *\n * const plot = new P('container', {\n * geoJson: '',\n * longitude: '',\n * latitude: '',\n * }, GeoWorldMap, defaultOptions);\n *\n * plot.render();\n * ```\n */\nvar P =\n/** @class */\nfunction (_super) {\n (0, _tslib.__extends)(P, _super);\n /**\n * 相比普通图表增加 adaptor 参数。\n * @param container\n * @param options\n * @param adaptor\n * @param defaultOptions\n */\n\n function P(container, options, adaptor, defaultOptions) {\n var _this = _super.call(this, container, (0, _utils.deepAssign)({}, defaultOptions, options)) || this;\n /** 统一为 any plot */\n\n\n _this.type = 'g2-plot';\n _this.defaultOptions = defaultOptions;\n _this.adaptor = adaptor;\n return _this;\n }\n /**\n * 实现父类方法,直接使用传入的\n */\n\n\n P.prototype.getDefaultOptions = function () {\n return this.defaultOptions;\n };\n /**\n * 实现父类方法,直接使用传入的\n */\n\n\n P.prototype.getSchemaAdaptor = function () {\n return this.adaptor;\n };\n\n return P;\n}(_plot.Plot);\n\nexports.P = P;\n\n/***/ }),\n/* 1276 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = adaptor;\n\nvar _tslib = __webpack_require__(1);\n\nvar _util = __webpack_require__(0);\n\nvar _base = __webpack_require__(78);\n\nvar _common = __webpack_require__(25);\n\nvar _constant = __webpack_require__(121);\n\nvar _utils = __webpack_require__(12);\n\n/**\n * geometry 处理\n * @param params\n */\nfunction multiView(params) {\n var chart = params.chart,\n options = params.options;\n var views = options.views,\n legend = options.legend,\n tooltip = options.tooltip;\n (0, _util.each)(views, function (v) {\n var region = v.region,\n data = v.data,\n meta = v.meta,\n axes = v.axes,\n coordinate = v.coordinate,\n interactions = v.interactions,\n annotations = v.annotations,\n geometries = v.geometries; // 1. 创建 view\n\n var viewOfG2 = chart.createView({\n region: region\n }); // 2. data\n\n viewOfG2.data(data); // 3. meta\n\n var scales = {};\n\n if (axes) {\n (0, _util.each)(axes, function (axis, field) {\n scales[field] = (0, _utils.pick)(axis, _constant.AXIS_META_CONFIG_KEYS);\n });\n }\n\n scales = (0, _utils.deepAssign)({}, meta, scales);\n viewOfG2.scale(scales); // 4. x y axis\n\n if (!axes) {\n viewOfG2.axis(false);\n } else {\n (0, _util.each)(axes, function (axis, field) {\n viewOfG2.axis(field, axis);\n });\n } // 5. coordinate\n\n\n viewOfG2.coordinate(coordinate); // 6. geometry\n\n (0, _util.each)(geometries, function (geometry) {\n var ext = (0, _base.geometry)({\n chart: viewOfG2,\n options: geometry\n }).ext; // adjust\n\n var adjust = geometry.adjust;\n\n if (adjust) {\n ext.geometry.adjust(adjust);\n }\n }); // 7. interactions\n\n (0, _util.each)(interactions, function (interaction) {\n if (interaction.enable === false) {\n viewOfG2.removeInteraction(interaction.type);\n } else {\n viewOfG2.interaction(interaction.type, interaction.cfg);\n }\n }); // 8. annotations\n\n (0, _util.each)(annotations, function (annotation) {\n viewOfG2.annotation()[annotation.type]((0, _tslib.__assign)({}, annotation));\n }); // 9. animation (先做动画)\n\n if (typeof v.animation === 'boolean') {\n viewOfG2.animate(false);\n } else {\n viewOfG2.animate(true); // 9.1 所有的 Geometry 都使用同一动画(各个图形如有区别,todo 自行覆盖)\n\n (0, _util.each)(viewOfG2.geometries, function (g) {\n g.animate(v.animation);\n });\n }\n }); // legend\n\n if (!legend) {\n chart.legend(false);\n } else {\n (0, _util.each)(legend, function (l, field) {\n chart.legend(field, l);\n });\n } // tooltip\n\n\n chart.tooltip(tooltip);\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n return (0, _utils.flow)(_common.animation, // 多 view 的图,动画配置放到最前面\n multiView, _common.interaction, _common.animation, _common.theme, _common.tooltip // ... 其他的 adaptor flow\n )(params);\n}\n\n/***/ }),\n/* 1277 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.notice = notice;\nexports.Lab = exports.Stage = void 0;\n\nvar _multiView = __webpack_require__(580);\n\n/** 实验室图表所处的阶段 */\nvar Stage;\nexports.Stage = Stage;\n\n(function (Stage) {\n Stage[\"DEV\"] = \"DEV\";\n Stage[\"BETA\"] = \"BETA\";\n Stage[\"STABLE\"] = \"STABLE\";\n})(Stage || (exports.Stage = Stage = {}));\n/**\n * 不同阶段打印一些消息给开发者\n * @param stage\n */\n\n\nfunction notice(stage, plotType) {\n console.warn(stage === Stage.DEV ? \"Plot '\" + plotType + \"' is in DEV stage, just give us issues.\" : stage === Stage.BETA ? \"Plot '\" + plotType + \"' is in BETA stage, DO NOT use it in production env.\" : stage === Stage.STABLE ? \"Plot '\" + plotType + \"' is in STABLE stage, import it by \\\"import { \" + plotType + \" } from '@antv/g2plot'\\\".\" : 'invalid Stage type.');\n}\n/**\n * 实验室图表,实验室中的图表分成不同的阶段。\n */\n\n\nvar Lab =\n/** @class */\nfunction () {\n function Lab() {}\n\n Object.defineProperty(Lab, \"MultiView\", {\n get: function get() {\n notice(Stage.STABLE, 'MultiView');\n return _multiView.MultiView;\n },\n enumerable: false,\n configurable: true\n });\n return Lab;\n}();\n\nexports.Lab = Lab;\n\n/***/ }),\n/* 1278 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adaptor = exports.statistic = void 0;\n\nvar tslib_1 = __webpack_require__(1);\n\nvar util_1 = __webpack_require__(0);\n\nvar common_1 = __webpack_require__(34);\n\nvar constant_1 = __webpack_require__(292);\n\nvar utils_1 = __webpack_require__(16);\n\nvar constant_2 = __webpack_require__(194);\n\nvar utils_2 = __webpack_require__(581);\n/**\n * geometry 处理\n * @param params\n */\n\n\nfunction geometry(params) {\n var chart = params.chart,\n options = params.options;\n var percent = options.percent,\n range = options.range,\n radius = options.radius,\n innerRadius = options.innerRadius,\n startAngle = options.startAngle,\n endAngle = options.endAngle,\n axis = options.axis,\n indicator = options.indicator;\n var color = range.color; // 指标 & 指针\n // 如果开启在应用\n\n if (indicator) {\n var indicatorData = utils_2.getIndicatorData(percent);\n var v1 = chart.createView({\n id: constant_2.INDICATEOR_VIEW_ID\n });\n v1.data(indicatorData);\n v1.point().position(constant_2.PERCENT + \"*1\").shape('gauge-indicator') // 传入指针的样式到自定义 shape 中\n .customInfo({\n defaultColor: chart.getTheme().defaultColor,\n indicator: indicator\n });\n v1.coordinate('polar', {\n startAngle: startAngle,\n endAngle: endAngle,\n radius: innerRadius * radius\n });\n v1.axis(constant_2.PERCENT, axis); // 一部分应用到 scale 中\n\n v1.scale(constant_2.PERCENT, utils_1.pick(axis, constant_1.AXIS_META_CONFIG_KEYS));\n } // 辅助 range\n // [{ range: 1, type: '0' }]\n\n\n var rangeData = utils_2.getRangeData(percent, options.range);\n var v2 = chart.createView({\n id: constant_2.RANGE_VIEW_ID\n });\n v2.data(rangeData);\n var rangeColor = util_1.isString(color) ? [color, constant_2.DEFAULT_COLOR] : color;\n v2.interval().position(\"1*\" + constant_2.RANGE_VALUE).color(constant_2.RANGE_TYPE, rangeColor).adjust('stack');\n v2.coordinate('polar', {\n innerRadius: innerRadius,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }).transpose();\n return params;\n}\n/**\n * meter 类型的仪表盘 有一层 mask\n * @param params\n */\n\n\nfunction meterView(params) {\n var _a;\n\n var chart = params.chart,\n options = params.options;\n var type = options.type,\n meter = options.meter;\n\n if (type === 'meter') {\n var innerRadius = options.innerRadius,\n radius = options.radius,\n startAngle = options.startAngle,\n endAngle = options.endAngle;\n var background = chart.getTheme().background;\n var color = background;\n\n if (!color || color === 'transparent') {\n color = '#fff';\n }\n\n var v3 = chart.createView({\n id: constant_2.MASK_VIEW_ID\n });\n v3.data([(_a = {}, _a[constant_2.RANGE_TYPE] = '1', _a[constant_2.RANGE_VALUE] = 1, _a)]);\n v3.interval().position(\"1*\" + constant_2.RANGE_VALUE).color(color).adjust('stack').shape('meter-gauge').customInfo(meter || {});\n v3.coordinate('polar', {\n innerRadius: innerRadius,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }).transpose();\n }\n\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\n\n\nfunction meta(params) {\n var _a;\n\n return utils_1.flow(common_1.scale((_a = {\n range: {\n min: 0,\n max: 1,\n maxLimit: 1,\n minLimit: 0\n }\n }, _a[constant_2.PERCENT] = {}, _a)))(params);\n}\n/**\n * 统计指标文档\n * @param params\n */\n\n\nfunction statistic(params, updated) {\n var chart = params.chart,\n options = params.options;\n var statistic = options.statistic,\n percent = options.percent; // 先清空标注,再重新渲染\n\n chart.getController('annotation').clear(true);\n\n if (statistic) {\n var content = statistic.content;\n var transformContent = void 0; // 当设置 content 的时候,设置默认样式\n\n if (content) {\n transformContent = utils_1.deepAssign({}, {\n formatter: function formatter(_a) {\n var percent = _a.percent;\n return (percent * 100).toFixed(2) + \"%\";\n },\n style: {\n opacity: 0.75,\n fontSize: '30px',\n lineHeight: 1,\n textAlign: 'center',\n color: 'rgba(44,53,66,0.85)'\n }\n }, content);\n }\n\n utils_1.renderGaugeStatistic(chart, {\n statistic: tslib_1.__assign(tslib_1.__assign({}, statistic), {\n content: transformContent\n })\n }, {\n percent: percent\n });\n }\n\n if (updated) {\n chart.render(true);\n }\n\n return params;\n}\n\nexports.statistic = statistic;\n/**\n * other 配置\n * @param params\n */\n\nfunction other(params) {\n var chart = params.chart;\n chart.legend(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\n\n\nfunction adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return utils_1.flow( // animation 配置必须在 createView 之前,不然无法让子 View 生效\n common_1.animation, geometry, meta, statistic, common_1.interaction, common_1.theme, // meterView 需要放到主题之后\n meterView, other // ... 其他的 adaptor flow\n )(params);\n}\n\nexports.adaptor = adaptor;\n\n/***/ }),\n/* 1279 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar tslib_1 = __webpack_require__(1);\n\nvar g2_1 = __webpack_require__(17); // 自定义Shape 部分\n\n\ng2_1.registerShape('point', 'gauge-indicator', {\n draw: function draw(cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo,\n indicator = _a.indicator,\n defaultColor = _a.defaultColor;\n var _b = indicator,\n pointer = _b.pointer,\n pin = _b.pin;\n var group = container.addGroup(); // 获取极坐标系下画布中心点\n\n var center = this.parsePoint({\n x: 0,\n y: 0\n }); // 绘制指针\n\n if (pointer) {\n // pointer\n group.addShape('line', {\n name: 'pointer',\n attrs: tslib_1.__assign({\n x1: center.x,\n y1: center.y,\n x2: cfg.x,\n y2: cfg.y,\n stroke: defaultColor\n }, pointer.style)\n });\n } // pin\n\n\n if (pin) {\n group.addShape('circle', {\n name: 'pin',\n attrs: tslib_1.__assign({\n x: center.x,\n y: center.y,\n stroke: defaultColor\n }, pin.style)\n });\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1280 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar g2_1 = __webpack_require__(17);\n\nvar graphics_1 = __webpack_require__(45); // 自定义Shape 部分\n\n\ng2_1.registerShape('interval', 'meter-gauge', {\n draw: function draw(cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo,\n _b = _a.steps,\n STEP = _b === void 0 ? 50 : _b,\n _c = _a.stepRatio,\n stepRatio = _c === void 0 ? 0.5 : _c;\n var total = this.coordinate.endAngle - this.coordinate.startAngle;\n var interval = total / STEP;\n var gap = 0;\n /**\n * stepRatio 取值范围: (0, 1]\n * 1: interval : gap = stepRatio : (1 - stepRatio)\n * 2: interval * STEP + stepRatio * (STEP - 1) = total\n */\n\n if (stepRatio > 0 && stepRatio <= 1) {\n interval = total / ((1 - stepRatio) / stepRatio * (STEP - 1) + STEP);\n gap = interval * (1 - stepRatio) / stepRatio;\n }\n\n var group = container.addGroup(); // 绘制 gap\n\n if (gap > 0) {\n var center = this.coordinate.getCenter();\n var radius = this.coordinate.getRadius();\n\n var _d = g2_1.Util.getAngle(cfg, this.coordinate),\n startAngle = _d.startAngle,\n endAngle = _d.endAngle;\n\n for (var i = startAngle, j = 0; i < endAngle && j < 2 * STEP - 1; j++) {\n var drawn = j % 2;\n\n if (drawn) {\n var path = graphics_1.getSectorPath(center.x, center.y, radius, i, Math.min(i + gap, endAngle), radius * this.coordinate.innerRadius);\n group.addShape('path', {\n name: 'meter-gauge-mask',\n attrs: {\n path: path,\n fill: cfg.color,\n stroke: cfg.color,\n lineWidth: 0.5\n },\n // mask 不需要捕捉事件\n capture: false\n });\n }\n\n i += drawn ? gap : interval;\n }\n }\n\n return group;\n }\n});\n\n/***/ }),\n/* 1281 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/classCallCheck.js\nvar classCallCheck = __webpack_require__(7);\nvar classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/createClass.js\nvar createClass = __webpack_require__(23);\nvar createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/get.js\nvar get = __webpack_require__(220);\nvar get_default = /*#__PURE__*/__webpack_require__.n(get);\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/inherits.js\nvar inherits = __webpack_require__(8);\nvar inherits_default = /*#__PURE__*/__webpack_require__.n(inherits);\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/possibleConstructorReturn.js\nvar possibleConstructorReturn = __webpack_require__(9);\nvar possibleConstructorReturn_default = /*#__PURE__*/__webpack_require__.n(possibleConstructorReturn);\n\n// EXTERNAL MODULE: ./node_modules/_@babel_runtime@7.12.13@@babel/runtime/helpers/getPrototypeOf.js\nvar getPrototypeOf = __webpack_require__(4);\nvar getPrototypeOf_default = /*#__PURE__*/__webpack_require__.n(getPrototypeOf);\n\n// EXTERNAL MODULE: ./node_modules/_@antv_scale@0.3.8@@antv/scale/esm/index.js\nvar esm = __webpack_require__(101);\n\n// CONCATENATED MODULE: ./src/extend/scale/linear-tick.ts\n// 认为是nice的刻度\nvar SNAP_COUNT_ARRAY = [1, 1.2, 1.5, 2, 2.2, 2.4, 2.5, 3, 4, 5, 6, 7.5, 8, 10];\nvar DEFAULT_COUNT = 5; // 默认刻度值\n\n/* harmony default export */ var linear_tick = (function (cfg) {\n var _ref = cfg || {},\n tickCount = _ref.tickCount,\n tickInterval = _ref.tickInterval;\n\n var _ref2 = cfg || {},\n min = _ref2.min,\n max = _ref2.max;\n\n min = isNaN(min) ? 0 : min;\n max = isNaN(max) ? 0 : max;\n var count = tickCount && tickCount >= 2 ? tickCount : DEFAULT_COUNT; // 计算interval, 优先取tickInterval\n\n var interval = tickInterval || getBestInterval({\n tickCount: count,\n max: max,\n min: min\n }); // 通过interval计算最小tick\n\n var minTick = Math.floor(min / interval) * interval; // 如果指定了tickInterval, count 需要根据指定的tickInterval来算计\n\n if (tickInterval) {\n var intervalCount = Math.abs(Math.ceil((max - minTick) / tickInterval)) + 1; // tickCount 作为最小 count 处理\n\n count = Math.max(count, intervalCount);\n }\n\n var ticks = [];\n var tickLength = 0;\n var fixedLength = getFixedLength(interval);\n\n while (tickLength < count) {\n ticks.push(toFixed(minTick + tickLength * interval, fixedLength));\n tickLength++;\n }\n\n return ticks;\n});\nvar DECIMAL_LENGTH = 12;\n\nfunction getFactor(number) {\n // 取正数\n number = Math.abs(number);\n var factor = 1;\n\n if (number === 0) {\n return factor;\n } // 小于1,逐渐放大\n\n\n if (number < 1) {\n var count = 0;\n\n while (number < 1) {\n factor = factor / 10;\n number = number * 10;\n count++;\n } // 浮点数计算出现问题\n\n\n if (factor.toString().length > DECIMAL_LENGTH) {\n factor = parseFloat(factor.toFixed(count));\n }\n\n return factor;\n } // 大于10逐渐缩小\n\n\n while (number > 10) {\n factor = factor * 10;\n number = number / 10;\n }\n\n return factor;\n} // 获取最佳匹配刻度\n\n\nfunction getBestInterval(_ref3) {\n var tickCount = _ref3.tickCount,\n min = _ref3.min,\n max = _ref3.max;\n\n // 如果最大最小相等,则直接按1处理\n if (min === max) {\n return 1 * getFactor(max);\n } // 1.计算平均刻度\b间隔\n\n\n var avgInterval = (max - min) / (tickCount - 1); // 2.数据标准归一化 映射到[1-10]区间\n\n var factor = getFactor(avgInterval);\n var calInterval = avgInterval / factor;\n var calMax = max / factor;\n var calMin = min / factor; // 根据平均值推算最逼近刻度值\n\n var similarityIndex = 0;\n\n for (var index = 0; index < SNAP_COUNT_ARRAY.length; index++) {\n var item = SNAP_COUNT_ARRAY[index];\n\n if (calInterval <= item) {\n similarityIndex = index;\n break;\n }\n }\n\n var similarityInterval = getInterval(similarityIndex, tickCount, calMin, calMax); // 小数点位数还原到数据的位数, 因为similarityIndex有可能是小数,所以需要保留similarityIndex自己的小数位数\n\n var fixedLength = getFixedLength(similarityInterval) + getFixedLength(factor);\n return toFixed(similarityInterval * factor, fixedLength);\n}\n\nfunction getInterval(startIndex, tickCount, min, max) {\n var verify = false;\n var interval = SNAP_COUNT_ARRAY[startIndex]; // 刻度值校验,如果不满足,循环下去\n\n for (var i = startIndex; i < SNAP_COUNT_ARRAY.length; i++) {\n if (intervalIsVerify({\n interval: SNAP_COUNT_ARRAY[i],\n tickCount: tickCount,\n max: max,\n min: min\n })) {\n // 有符合条件的interval\n interval = SNAP_COUNT_ARRAY[i];\n verify = true;\n break;\n }\n } // 如果不满足, 依次缩小10倍,再计算\n\n\n if (!verify) {\n return 10 * getInterval(0, tickCount, min / 10, max / 10);\n }\n\n return interval;\n} // 刻度是否满足展示需求\n\n\nfunction intervalIsVerify(_ref4) {\n var interval = _ref4.interval,\n tickCount = _ref4.tickCount,\n max = _ref4.max,\n min = _ref4.min;\n var minTick = Math.floor(min / interval) * interval;\n\n if (minTick + (tickCount - 1) * interval >= max) {\n return true;\n }\n\n return false;\n} // 计算小数点应该保留的位数\n\n\nfunction getFixedLength(num) {\n var str = num.toString();\n var index = str.indexOf('.');\n var indexOfExp = str.indexOf('e-');\n var length = indexOfExp >= 0 ? parseInt(str.substr(indexOfExp + 2), 10) : str.substr(index + 1).length;\n\n if (length > 20) {\n // 最多保留20位小数\n length = 20;\n }\n\n return length;\n} // @antv/util fixedbase不支持科学计数法的判断,需要提mr\n\n\nfunction toFixed(v, length) {\n return parseFloat(v.toFixed(length));\n}\n// CONCATENATED MODULE: ./src/extend/scale/scale.ts\n\n\n\n\n\n\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = getPrototypeOf_default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf_default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn_default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\nObject(esm[\"registerTickMethod\"])('linear-strict-tick-method', linear_tick);\n/**\n * 线性度量\n * @class\n */\n\nvar scale_LinearStrict = /*#__PURE__*/function (_Linear) {\n inherits_default()(LinearStrict, _Linear);\n\n var _super = _createSuper(LinearStrict);\n\n function LinearStrict(props) {\n var _this;\n\n classCallCheck_default()(this, LinearStrict);\n\n _this = _super.call(this, props);\n _this.type = 'linear-strict';\n return _this;\n }\n\n createClass_default()(LinearStrict, [{\n key: \"initCfg\",\n value: function initCfg() {\n get_default()(getPrototypeOf_default()(LinearStrict.prototype), \"initCfg\", this).call(this);\n\n this.tickMethod = 'linear-strict-tick-method';\n }\n }, {\n key: \"calculateTicks\",\n value: function calculateTicks() {\n var preNice = this.nice; // 强制按照计算出来的ticks,需要设置nice为true,不然会根据最值进行过滤\n\n this.nice = true;\n\n var ticks = get_default()(getPrototypeOf_default()(LinearStrict.prototype), \"calculateTicks\", this).call(this);\n\n this.nice = preNice; // 根据ticks设置最值\n\n if (ticks.length) {\n this.min = ticks[0];\n this.max = ticks[ticks.length - 1];\n }\n\n return ticks;\n }\n }]);\n\n return LinearStrict;\n}(esm[\"Linear\"]);\n\n/* harmony default export */ var scale = (scale_LinearStrict);\n\nif (!Object(esm[\"getScale\"])('linear-strict')) {\n Object(esm[\"registerScale\"])('linear-strict', scale_LinearStrict);\n}\n\n/***/ })\n/******/ ]);\n});","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export * from \"./chain\";\nexport * from \"./fromStatic\";\nexport * from \"./memoize\";\nexport * from \"./ProviderError\";\n","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar AuthenticationDetails = /*#__PURE__*/function () {\n /**\n * Constructs a new AuthenticationDetails object\n * @param {object=} data Creation options.\n * @param {string} data.Username User being authenticated.\n * @param {string} data.Password Plain-text password to authenticate with.\n * @param {(AttributeArg[])?} data.ValidationData Application extra metadata.\n * @param {(AttributeArg[])?} data.AuthParamaters Authentication paramaters for custom auth.\n */\n function AuthenticationDetails(data) {\n var _ref = data || {},\n ValidationData = _ref.ValidationData,\n Username = _ref.Username,\n Password = _ref.Password,\n AuthParameters = _ref.AuthParameters,\n ClientMetadata = _ref.ClientMetadata;\n\n this.validationData = ValidationData || {};\n this.authParameters = AuthParameters || {};\n this.clientMetadata = ClientMetadata || {};\n this.username = Username;\n this.password = Password;\n }\n /**\n * @returns {string} the record's username\n */\n\n\n var _proto = AuthenticationDetails.prototype;\n\n _proto.getUsername = function getUsername() {\n return this.username;\n }\n /**\n * @returns {string} the record's password\n */\n ;\n\n _proto.getPassword = function getPassword() {\n return this.password;\n }\n /**\n * @returns {Array} the record's validationData\n */\n ;\n\n _proto.getValidationData = function getValidationData() {\n return this.validationData;\n }\n /**\n * @returns {Array} the record's authParameters\n */\n ;\n\n _proto.getAuthParameters = function getAuthParameters() {\n return this.authParameters;\n }\n /**\n * @returns {ClientMetadata} the clientMetadata for a Lambda trigger\n */\n ;\n\n _proto.getClientMetadata = function getClientMetadata() {\n return this.clientMetadata;\n };\n\n return AuthenticationDetails;\n}();\n\nexport { AuthenticationDetails as default };","var crypto; // Native crypto from window (Browser)\n\nif (typeof window !== 'undefined' && window.crypto) {\n crypto = window.crypto;\n} // Native (experimental IE 11) crypto from window (Browser)\n\n\nif (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n crypto = window.msCrypto;\n}\n/*\n * Cryptographically secure pseudorandom number generator\n * As Math.random() is cryptographically not safe to use\n */\n\n\nexport default function cryptoSecureRandomInt() {\n if (crypto) {\n // Use getRandomValues method (Browser)\n if (typeof crypto.getRandomValues === 'function') {\n try {\n return crypto.getRandomValues(new Uint32Array(1))[0];\n } catch (err) {}\n } // Use randomBytes method (NodeJS)\n\n\n if (typeof crypto.randomBytes === 'function') {\n try {\n return crypto.randomBytes(4).readInt32LE();\n } catch (err) {}\n }\n }\n\n throw new Error('Native crypto module could not be used to get secure random number.');\n}","import cryptoSecureRandomInt from './cryptoSecureRandomInt';\n/**\n * Hex encoding strategy.\n * Converts a word array to a hex string.\n * @param {WordArray} wordArray The word array.\n * @return {string} The hex string.\n * @static\n */\n\nfunction hexStringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var hexChars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n}\n\nvar WordArray = /*#__PURE__*/function () {\n function WordArray(words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n }\n\n var _proto = WordArray.prototype;\n\n _proto.random = function random(nBytes) {\n var words = [];\n\n for (var i = 0; i < nBytes; i += 4) {\n words.push(cryptoSecureRandomInt());\n }\n\n return new WordArray(words, nBytes);\n };\n\n _proto.toString = function toString() {\n return hexStringify(this);\n };\n\n return WordArray;\n}();\n\nexport { WordArray as default };","// A small implementation of BigInteger based on http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// All public methods have been removed except the following:\n// new BigInteger(a, b) (only radix 2, 4, 8, 16 and 32 supported)\n// toString (only radix 2, 4, 8, 16 and 32 supported)\n// negate\n// abs\n// compareTo\n// bitLength\n// mod\n// equals\n// add\n// subtract\n// multiply\n// divide\n// modPow\nexport default BigInteger;\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n// (public) Constructor\n\nfunction BigInteger(a, b) {\n if (a != null) this.fromString(a, b);\n} // return new, unset BigInteger\n\n\nfunction nbi() {\n return new BigInteger(null);\n} // Bits per digit\n\n\nvar dbits; // JavaScript engine analysis\n\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe; // am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n\nfunction am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n\n return c;\n} // am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n\n\nfunction am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff,\n xh = x >> 15;\n\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n\n return c;\n} // Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\n\n\nfunction am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff,\n xh = x >> 14;\n\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n\n return c;\n}\n\nvar inBrowser = typeof navigator !== 'undefined';\n\nif (inBrowser && j_lm && navigator.appName == 'Microsoft Internet Explorer') {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != 'Netscape') {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else {\n // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP; // Digit conversions\n\nvar BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz';\nvar BI_RC = new Array();\nvar rr, vv;\nrr = '0'.charCodeAt(0);\n\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'a'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'A'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return c == null ? -1 : c;\n} // (protected) copy this to r\n\n\nfunction bnpCopyTo(r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n\n r.t = this.t;\n r.s = this.s;\n} // (protected) set from integer value x, -DV <= x < DV\n\n\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = x < 0 ? -1 : 0;\n if (x > 0) this[0] = x;else if (x < -1) this[0] = x + this.DV;else this.t = 0;\n} // return bigint initialized to value\n\n\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n} // (protected) set from string and radix\n\n\nfunction bnpFromString(s, b) {\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n this.t = 0;\n this.s = 0;\n var i = s.length,\n mi = false,\n sh = 0;\n\n while (--i >= 0) {\n var x = intAt(s, i);\n\n if (x < 0) {\n if (s.charAt(i) == '-') mi = true;\n continue;\n }\n\n mi = false;\n if (sh == 0) this[this.t++] = x;else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;\n this[this.t++] = x >> this.DB - sh;\n } else this[this.t - 1] |= x << sh;\n sh += k;\n if (sh >= this.DB) sh -= this.DB;\n }\n\n this.clamp();\n if (mi) BigInteger.ZERO.subTo(this, this);\n} // (protected) clamp off excess high words\n\n\nfunction bnpClamp() {\n var c = this.s & this.DM;\n\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n} // (public) return string representation in given radix\n\n\nfunction bnToString(b) {\n if (this.s < 0) return '-' + this.negate().toString(b);\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error('Only radix 2, 4, 8, 16, 32 are supported');\n var km = (1 << k) - 1,\n d,\n m = false,\n r = '',\n i = this.t;\n var p = this.DB - i * this.DB % k;\n\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\n\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & (1 << p) - 1) << k - p;\n d |= this[--i] >> (p += this.DB - k);\n } else {\n d = this[i] >> (p -= k) & km;\n\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n\n if (d > 0) m = true;\n if (m) r += int2char(d);\n }\n }\n\n return m ? r : '0';\n} // (public) -this\n\n\nfunction bnNegate() {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n} // (public) |this|\n\n\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n} // (public) return + if this > a, - if this < a, 0 if equal\n\n\nfunction bnCompareTo(a) {\n var r = this.s - a.s;\n if (r != 0) return r;\n var i = this.t;\n r = i - a.t;\n if (r != 0) return this.s < 0 ? -r : r;\n\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) return r;\n }\n\n return 0;\n} // returns bit length of the integer x\n\n\nfunction nbits(x) {\n var r = 1,\n t;\n\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n\n return r;\n} // (public) return the number of bits in \"this\"\n\n\nfunction bnBitLength() {\n if (this.t <= 0) return 0;\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n} // (protected) r = this << n*DB\n\n\nfunction bnpDLShiftTo(n, r) {\n var i;\n\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r.t = this.t + n;\n r.s = this.s;\n} // (protected) r = this >> n*DB\n\n\nfunction bnpDRShiftTo(n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n} // (protected) r = this << n\n\n\nfunction bnpLShiftTo(n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB),\n c = this.s << bs & this.DM,\n i;\n\n for (i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = this[i] >> cbs | c;\n c = (this[i] & bm) << bs;\n }\n\n for (i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n} // (protected) r = this >> n\n\n\nfunction bnpRShiftTo(n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n r.t = this.t - ds;\n r.clamp();\n} // (protected) r = this - a\n\n\nfunction bnpSubTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c -= a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c -= a.s;\n }\n\n r.s = c < 0 ? -1 : 0;\n if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n} // (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\n\n\nfunction bnpMultiplyTo(a, r) {\n var x = this.abs(),\n y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n\n r.s = 0;\n r.clamp();\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n} // (protected) r = this^2, r != this (HAC 14.16)\n\n\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n r.s = 0;\n r.clamp();\n} // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\n\n\nfunction bnpDivRemTo(m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) return;\n var pt = this.abs();\n\n if (pt.t < pm.t) {\n if (q != null) q.fromInt(0);\n if (r != null) this.copyTo(r);\n return;\n }\n\n if (r == null) r = nbi();\n var y = nbi(),\n ts = this.s,\n ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n } else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) return;\n var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt,\n d2 = (1 << this.F1) / yt,\n e = 1 << this.F2;\n var i = r.t,\n j = i - ys,\n t = q == null ? nbi() : q;\n y.dlShiftTo(j, t);\n\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\n }\n\n r.t = ys;\n r.clamp();\n if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\n\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\n} // (public) this mod a\n\n\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n return r;\n} // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\n\n\nfunction bnpInvDigit() {\n if (this.t < 1) return 0;\n var x = this[0];\n if ((x & 1) == 0) return 0;\n var y = x & 3; // y == 1/x mod 2^2\n\n y = y * (2 - (x & 0xf) * y) & 0xf; // y == 1/x mod 2^4\n\n y = y * (2 - (x & 0xff) * y) & 0xff; // y == 1/x mod 2^8\n\n y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n\n y = y * (2 - x * y % this.DV) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n\n return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n return this.compareTo(a) == 0;\n} // (protected) r = this + a\n\n\nfunction bnpAddTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c += a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += a.s;\n }\n\n r.s = c < 0 ? -1 : 0;\n if (c > 0) r[i++] = c;else if (c < -1) r[i++] = this.DV + c;\n r.t = i;\n r.clamp();\n} // (public) this + a\n\n\nfunction bnAdd(a) {\n var r = nbi();\n this.addTo(a, r);\n return r;\n} // (public) this - a\n\n\nfunction bnSubtract(a) {\n var r = nbi();\n this.subTo(a, r);\n return r;\n} // (public) this * a\n\n\nfunction bnMultiply(a) {\n var r = nbi();\n this.multiplyTo(a, r);\n return r;\n} // (public) this / a\n\n\nfunction bnDivide(a) {\n var r = nbi();\n this.divRemTo(a, r, null);\n return r;\n} // Montgomery reduction\n\n\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << m.DB - 15) - 1;\n this.mt2 = 2 * m.t;\n} // xR mod m\n\n\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n return r;\n} // x/R mod m\n\n\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n} // x = x/R mod m (HAC 14.32)\n\n\nfunction montReduce(x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM; // use am to combine the multiply-shift-add into one call\n\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t); // propagate carry\n\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n} // r = \"x^2/R mod m\"; x != r\n\n\nfunction montSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n} // r = \"xy/R mod m\"; x,y != r\n\n\nfunction montMulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo; // (public) this^e % m (HAC 14.85)\n\nfunction bnModPow(e, m, callback) {\n var i = e.bitLength(),\n k,\n r = nbv(1),\n z = new Montgomery(m);\n if (i <= 0) return r;else if (i < 18) k = 1;else if (i < 48) k = 3;else if (i < 144) k = 4;else if (i < 768) k = 5;else k = 6; // precomputation\n\n var g = new Array(),\n n = 3,\n k1 = k - 1,\n km = (1 << k) - 1;\n g[1] = z.convert(this);\n\n if (k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n\n var j = e.t - 1,\n w,\n is1 = true,\n r2 = nbi(),\n t;\n i = nbits(e[j]) - 1;\n\n while (j >= 0) {\n if (i >= k1) w = e[j] >> i - k1 & km;else {\n w = (e[j] & (1 << i + 1) - 1) << k1 - i;\n if (j > 0) w |= e[j - 1] >> this.DB + i - k1;\n }\n n = k;\n\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n\n if (is1) {\n // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n\n if (n > 0) z.sqrTo(r, r2);else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n\n while (j >= 0 && (e[j] & 1 << i) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n\n var result = z.revert(r);\n callback(null, result);\n return result;\n} // protected\n\n\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.addTo = bnpAddTo; // public\n\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.modPow = bnModPow; // \"constants\"\n\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport SHA256 from 'crypto-js/sha256';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport WordArray from './utils/WordArray';\n/**\n * Returns a Buffer with a sequence of random nBytes\n * \n * @param {number} nBytes \n * @returns {Buffer} fixed-length sequence of random bytes\n */\n\nfunction randomBytes(nBytes) {\n return Buffer.from(new WordArray().random(nBytes).toString(), 'hex');\n}\n\n;\nimport BigInteger from './BigInteger';\n/**\n * Tests if a hex string has it most significant bit set (case-insensitive regex)\n */\n\nvar HEX_MSB_REGEX = /^[89a-f]/i;\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\n/** @class */\n\nvar AuthenticationHelper = /*#__PURE__*/function () {\n /**\n * Constructs a new AuthenticationHelper object\n * @param {string} PoolName Cognito user pool name.\n */\n function AuthenticationHelper(PoolName) {\n this.N = new BigInteger(initN, 16);\n this.g = new BigInteger('2', 16);\n this.k = new BigInteger(this.hexHash(\"\" + this.padHex(this.N) + this.padHex(this.g)), 16);\n this.smallAValue = this.generateRandomSmallA();\n this.getLargeAValue(function () {});\n this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n this.poolName = PoolName;\n }\n /**\n * @returns {BigInteger} small A, a random number\n */\n\n\n var _proto = AuthenticationHelper.prototype;\n\n _proto.getSmallAValue = function getSmallAValue() {\n return this.smallAValue;\n }\n /**\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n */\n ;\n\n _proto.getLargeAValue = function getLargeAValue(callback) {\n var _this = this;\n\n if (this.largeAValue) {\n callback(null, this.largeAValue);\n } else {\n this.calculateA(this.smallAValue, function (err, largeAValue) {\n if (err) {\n callback(err, null);\n }\n\n _this.largeAValue = largeAValue;\n callback(null, _this.largeAValue);\n });\n }\n }\n /**\n * helper function to generate a random big integer\n * @returns {BigInteger} a random value.\n * @private\n */\n ;\n\n _proto.generateRandomSmallA = function generateRandomSmallA() {\n // This will be interpreted as a postive 128-bit integer\n var hexRandom = randomBytes(128).toString('hex');\n var randomBigInt = new BigInteger(hexRandom, 16); // There is no need to do randomBigInt.mod(this.N - 1) as N (3072-bit) is > 128 bytes (1024-bit)\n\n return randomBigInt;\n }\n /**\n * helper function to generate a random string\n * @returns {string} a random value.\n * @private\n */\n ;\n\n _proto.generateRandomString = function generateRandomString() {\n return randomBytes(40).toString('base64');\n }\n /**\n * @returns {string} Generated random value included in password hash.\n */\n ;\n\n _proto.getRandomPassword = function getRandomPassword() {\n return this.randomPassword;\n }\n /**\n * @returns {string} Generated random value included in devices hash.\n */\n ;\n\n _proto.getSaltDevices = function getSaltDevices() {\n return this.SaltToHashDevices;\n }\n /**\n * @returns {string} Value used to verify devices.\n */\n ;\n\n _proto.getVerifierDevices = function getVerifierDevices() {\n return this.verifierDevices;\n }\n /**\n * Generate salts and compute verifier.\n * @param {string} deviceGroupKey Devices to generate verifier for.\n * @param {string} username User to generate verifier for.\n * @param {nodeCallback} callback Called with (err, null)\n * @returns {void}\n */\n ;\n\n _proto.generateHashDevice = function generateHashDevice(deviceGroupKey, username, callback) {\n var _this2 = this;\n\n this.randomPassword = this.generateRandomString();\n var combinedString = \"\" + deviceGroupKey + username + \":\" + this.randomPassword;\n var hashedString = this.hash(combinedString);\n var hexRandom = randomBytes(16).toString('hex'); // The random hex will be unambiguously represented as a postive integer\n\n this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\n this.g.modPow(new BigInteger(this.hexHash(this.SaltToHashDevices + hashedString), 16), this.N, function (err, verifierDevicesNotPadded) {\n if (err) {\n callback(err, null);\n }\n\n _this2.verifierDevices = _this2.padHex(verifierDevicesNotPadded);\n callback(null, null);\n });\n }\n /**\n * Calculate the client's public value A = g^a%N\n * with the generated random number a\n * @param {BigInteger} a Randomly generated small A.\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n * @private\n */\n ;\n\n _proto.calculateA = function calculateA(a, callback) {\n var _this3 = this;\n\n this.g.modPow(a, this.N, function (err, A) {\n if (err) {\n callback(err, null);\n }\n\n if (A.mod(_this3.N).equals(BigInteger.ZERO)) {\n callback(new Error('Illegal paramater. A mod N cannot be 0.'), null);\n }\n\n callback(null, A);\n });\n }\n /**\n * Calculate the client's value U which is the hash of A and B\n * @param {BigInteger} A Large A value.\n * @param {BigInteger} B Server B value.\n * @returns {BigInteger} Computed U value.\n * @private\n */\n ;\n\n _proto.calculateU = function calculateU(A, B) {\n this.UHexHash = this.hexHash(this.padHex(A) + this.padHex(B));\n var finalU = new BigInteger(this.UHexHash, 16);\n return finalU;\n }\n /**\n * Calculate a hash from a bitArray\n * @param {Buffer} buf Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n ;\n\n _proto.hash = function hash(buf) {\n var str = buf instanceof Buffer ? CryptoJS.lib.WordArray.create(buf) : buf;\n var hashHex = SHA256(str).toString();\n return new Array(64 - hashHex.length).join('0') + hashHex;\n }\n /**\n * Calculate a hash from a hex string\n * @param {String} hexStr Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n ;\n\n _proto.hexHash = function hexHash(hexStr) {\n return this.hash(Buffer.from(hexStr, 'hex'));\n }\n /**\n * Standard hkdf algorithm\n * @param {Buffer} ikm Input key material.\n * @param {Buffer} salt Salt value.\n * @returns {Buffer} Strong key material.\n * @private\n */\n ;\n\n _proto.computehkdf = function computehkdf(ikm, salt) {\n var infoBitsWordArray = CryptoJS.lib.WordArray.create(Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]));\n var ikmWordArray = ikm instanceof Buffer ? CryptoJS.lib.WordArray.create(ikm) : ikm;\n var saltWordArray = salt instanceof Buffer ? CryptoJS.lib.WordArray.create(salt) : salt;\n var prk = HmacSHA256(ikmWordArray, saltWordArray);\n var hmac = HmacSHA256(infoBitsWordArray, prk);\n return Buffer.from(hmac.toString(), 'hex').slice(0, 16);\n }\n /**\n * Calculates the final hkdf based on computed S value, and computed U value and the key\n * @param {String} username Username.\n * @param {String} password Password.\n * @param {BigInteger} serverBValue Server B value.\n * @param {BigInteger} salt Generated salt.\n * @param {nodeCallback} callback Called with (err, hkdfValue)\n * @returns {void}\n */\n ;\n\n _proto.getPasswordAuthenticationKey = function getPasswordAuthenticationKey(username, password, serverBValue, salt, callback) {\n var _this4 = this;\n\n if (serverBValue.mod(this.N).equals(BigInteger.ZERO)) {\n throw new Error('B cannot be zero.');\n }\n\n this.UValue = this.calculateU(this.largeAValue, serverBValue);\n\n if (this.UValue.equals(BigInteger.ZERO)) {\n throw new Error('U cannot be zero.');\n }\n\n var usernamePassword = \"\" + this.poolName + username + \":\" + password;\n var usernamePasswordHash = this.hash(usernamePassword);\n var xValue = new BigInteger(this.hexHash(this.padHex(salt) + usernamePasswordHash), 16);\n this.calculateS(xValue, serverBValue, function (err, sValue) {\n if (err) {\n callback(err, null);\n }\n\n var hkdf = _this4.computehkdf(Buffer.from(_this4.padHex(sValue), 'hex'), Buffer.from(_this4.padHex(_this4.UValue), 'hex'));\n\n callback(null, hkdf);\n });\n }\n /**\n * Calculates the S value used in getPasswordAuthenticationKey\n * @param {BigInteger} xValue Salted password hash value.\n * @param {BigInteger} serverBValue Server B value.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.calculateS = function calculateS(xValue, serverBValue, callback) {\n var _this5 = this;\n\n this.g.modPow(xValue, this.N, function (err, gModPowXN) {\n if (err) {\n callback(err, null);\n }\n\n var intValue2 = serverBValue.subtract(_this5.k.multiply(gModPowXN));\n intValue2.modPow(_this5.smallAValue.add(_this5.UValue.multiply(xValue)), _this5.N, function (err2, result) {\n if (err2) {\n callback(err2, null);\n }\n\n callback(null, result.mod(_this5.N));\n });\n });\n }\n /**\n * Return constant newPasswordRequiredChallengeUserAttributePrefix\n * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n */\n ;\n\n _proto.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n return newPasswordRequiredChallengeUserAttributePrefix;\n }\n /**\n * Returns an unambiguous, even-length hex string of the two's complement encoding of an integer.\n * \n * It is compatible with the hex encoding of Java's BigInteger's toByteArray(), wich returns a \n * byte array containing the two's-complement representation of a BigInteger. The array contains\n * the minimum number of bytes required to represent the BigInteger, including at least one sign bit.\n * \n * Examples showing how ambiguity is avoided by left padding with:\n * \t\"00\" (for positive values where the most-significant-bit is set)\n * \"FF\" (for negative values where the most-significant-bit is set)\n * \n * padHex(bigInteger.fromInt(-236)) === \"FF14\"\n * padHex(bigInteger.fromInt(20)) === \"14\"\n * \n * padHex(bigInteger.fromInt(-200)) === \"FF38\"\n * padHex(bigInteger.fromInt(56)) === \"38\"\n * \n * padHex(bigInteger.fromInt(-20)) === \"EC\"\n * padHex(bigInteger.fromInt(236)) === \"00EC\"\n * \n * padHex(bigInteger.fromInt(-56)) === \"C8\"\n * padHex(bigInteger.fromInt(200)) === \"00C8\"\n * \n * @param {BigInteger} bigInt Number to encode.\n * @returns {String} even-length hex string of the two's complement encoding.\n */\n ;\n\n _proto.padHex = function padHex(bigInt) {\n if (!(bigInt instanceof BigInteger)) {\n throw new Error('Not a BigInteger');\n }\n\n var isNegative = bigInt.compareTo(BigInteger.ZERO) < 0;\n /* Get a hex string for abs(bigInt) */\n\n var hexStr = bigInt.abs().toString(16);\n /* Pad hex to even length if needed */\n\n hexStr = hexStr.length % 2 !== 0 ? \"0\" + hexStr : hexStr;\n /* Prepend \"00\" if the most significant bit is set */\n\n hexStr = HEX_MSB_REGEX.test(hexStr) ? \"00\" + hexStr : hexStr;\n\n if (isNegative) {\n /* Flip the bits of the representation */\n var invertedNibbles = hexStr.split('').map(function (x) {\n var invertedNibble = ~parseInt(x, 16) & 0xf;\n return '0123456789ABCDEF'.charAt(invertedNibble);\n }).join('');\n /* After flipping the bits, add one to get the 2's complement representation */\n\n var flippedBitsBI = new BigInteger(invertedNibbles, 16).add(BigInteger.ONE);\n hexStr = flippedBitsBI.toString(16);\n /*\n For hex strings starting with 'FF8', 'FF' can be dropped, e.g. 0xFFFF80=0xFF80=0x80=-128\n \tAny sequence of '1' bits on the left can always be substituted with a single '1' bit\n without changing the represented value.\n \tThis only happens in the case when the input is 80...00\n */\n\n if (hexStr.toUpperCase().startsWith('FF8')) {\n hexStr = hexStr.substring(2);\n }\n }\n\n return hexStr;\n };\n\n return AuthenticationHelper;\n}();\n\nexport { AuthenticationHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\n/** @class */\n\nvar CognitoJwtToken = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoJwtToken object\n * @param {string=} token The JWT token.\n */\n function CognitoJwtToken(token) {\n // Assign object\n this.jwtToken = token || '';\n this.payload = this.decodePayload();\n }\n /**\n * @returns {string} the record's token.\n */\n\n\n var _proto = CognitoJwtToken.prototype;\n\n _proto.getJwtToken = function getJwtToken() {\n return this.jwtToken;\n }\n /**\n * @returns {int} the token's expiration (exp member).\n */\n ;\n\n _proto.getExpiration = function getExpiration() {\n return this.payload.exp;\n }\n /**\n * @returns {int} the token's \"issued at\" (iat member).\n */\n ;\n\n _proto.getIssuedAt = function getIssuedAt() {\n return this.payload.iat;\n }\n /**\n * @returns {object} the token's payload.\n */\n ;\n\n _proto.decodePayload = function decodePayload() {\n var payload = this.jwtToken.split('.')[1];\n\n try {\n return JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));\n } catch (err) {\n return {};\n }\n };\n\n return CognitoJwtToken;\n}();\n\nexport { CognitoJwtToken as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/*\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoAccessToken = /*#__PURE__*/function (_CognitoJwtToken) {\n _inheritsLoose(CognitoAccessToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoAccessToken object\n * @param {string=} AccessToken The JWT access token.\n */\n function CognitoAccessToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n AccessToken = _ref.AccessToken;\n\n return _CognitoJwtToken.call(this, AccessToken || '') || this;\n }\n\n return CognitoAccessToken;\n}(CognitoJwtToken);\n\nexport { CognitoAccessToken as default };","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoIdToken = /*#__PURE__*/function (_CognitoJwtToken) {\n _inheritsLoose(CognitoIdToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoIdToken object\n * @param {string=} IdToken The JWT Id token\n */\n function CognitoIdToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n IdToken = _ref.IdToken;\n\n return _CognitoJwtToken.call(this, IdToken || '') || this;\n }\n\n return CognitoIdToken;\n}(CognitoJwtToken);\n\nexport { CognitoIdToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoRefreshToken = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoRefreshToken object\n * @param {string=} RefreshToken The JWT refresh token.\n */\n function CognitoRefreshToken(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n RefreshToken = _ref.RefreshToken;\n\n // Assign object\n this.token = RefreshToken || '';\n }\n /**\n * @returns {string} the record's token.\n */\n\n\n var _proto = CognitoRefreshToken.prototype;\n\n _proto.getToken = function getToken() {\n return this.token;\n };\n\n return CognitoRefreshToken;\n}();\n\nexport { CognitoRefreshToken as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserSession = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUserSession object\n * @param {CognitoIdToken} IdToken The session's Id token.\n * @param {CognitoRefreshToken=} RefreshToken The session's refresh token.\n * @param {CognitoAccessToken} AccessToken The session's access token.\n * @param {int} ClockDrift The saved computer's clock drift or undefined to force calculation.\n */\n function CognitoUserSession(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n IdToken = _ref.IdToken,\n RefreshToken = _ref.RefreshToken,\n AccessToken = _ref.AccessToken,\n ClockDrift = _ref.ClockDrift;\n\n if (AccessToken == null || IdToken == null) {\n throw new Error('Id token and Access Token must be present.');\n }\n\n this.idToken = IdToken;\n this.refreshToken = RefreshToken;\n this.accessToken = AccessToken;\n this.clockDrift = ClockDrift === undefined ? this.calculateClockDrift() : ClockDrift;\n }\n /**\n * @returns {CognitoIdToken} the session's Id token\n */\n\n\n var _proto = CognitoUserSession.prototype;\n\n _proto.getIdToken = function getIdToken() {\n return this.idToken;\n }\n /**\n * @returns {CognitoRefreshToken} the session's refresh token\n */\n ;\n\n _proto.getRefreshToken = function getRefreshToken() {\n return this.refreshToken;\n }\n /**\n * @returns {CognitoAccessToken} the session's access token\n */\n ;\n\n _proto.getAccessToken = function getAccessToken() {\n return this.accessToken;\n }\n /**\n * @returns {int} the session's clock drift\n */\n ;\n\n _proto.getClockDrift = function getClockDrift() {\n return this.clockDrift;\n }\n /**\n * @returns {int} the computer's clock drift\n */\n ;\n\n _proto.calculateClockDrift = function calculateClockDrift() {\n var now = Math.floor(new Date() / 1000);\n var iat = Math.min(this.accessToken.getIssuedAt(), this.idToken.getIssuedAt());\n return now - iat;\n }\n /**\n * Checks to see if the session is still valid based on session expiry information found\n * in tokens and the current time (adjusted with clock drift)\n * @returns {boolean} if the session is still valid\n */\n ;\n\n _proto.isValid = function isValid() {\n var now = Math.floor(new Date() / 1000);\n var adjusted = now - this.clockDrift;\n return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n };\n\n return CognitoUserSession;\n}();\n\nexport { CognitoUserSession as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n/** @class */\n\nvar DateHelper = /*#__PURE__*/function () {\n function DateHelper() {}\n\n var _proto = DateHelper.prototype;\n\n /**\n * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n */\n _proto.getNowString = function getNowString() {\n var now = new Date();\n var weekDay = weekNames[now.getUTCDay()];\n var month = monthNames[now.getUTCMonth()];\n var day = now.getUTCDate();\n var hours = now.getUTCHours();\n\n if (hours < 10) {\n hours = \"0\" + hours;\n }\n\n var minutes = now.getUTCMinutes();\n\n if (minutes < 10) {\n minutes = \"0\" + minutes;\n }\n\n var seconds = now.getUTCSeconds();\n\n if (seconds < 10) {\n seconds = \"0\" + seconds;\n }\n\n var year = now.getUTCFullYear(); // ddd MMM D HH:mm:ss UTC YYYY\n\n var dateNow = weekDay + \" \" + month + \" \" + day + \" \" + hours + \":\" + minutes + \":\" + seconds + \" UTC \" + year;\n return dateNow;\n };\n\n return DateHelper;\n}();\n\nexport { DateHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserAttribute = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUserAttribute object\n * @param {string=} Name The record's name\n * @param {string=} Value The record's value\n */\n function CognitoUserAttribute(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n Name = _ref.Name,\n Value = _ref.Value;\n\n this.Name = Name || '';\n this.Value = Value || '';\n }\n /**\n * @returns {string} the record's value.\n */\n\n\n var _proto = CognitoUserAttribute.prototype;\n\n _proto.getValue = function getValue() {\n return this.Value;\n }\n /**\n * Sets the record's value.\n * @param {string} value The new value.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n ;\n\n _proto.setValue = function setValue(value) {\n this.Value = value;\n return this;\n }\n /**\n * @returns {string} the record's name.\n */\n ;\n\n _proto.getName = function getName() {\n return this.Name;\n }\n /**\n * Sets the record's name\n * @param {string} name The new name.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n ;\n\n _proto.setName = function setName(name) {\n this.Name = name;\n return this;\n }\n /**\n * @returns {string} a string representation of the record.\n */\n ;\n\n _proto.toString = function toString() {\n return JSON.stringify(this);\n }\n /**\n * @returns {object} a flat object representing the record.\n */\n ;\n\n _proto.toJSON = function toJSON() {\n return {\n Name: this.Name,\n Value: this.Value\n };\n };\n\n return CognitoUserAttribute;\n}();\n\nexport { CognitoUserAttribute as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nvar dataMemory = {};\n/** @class */\n\nvar MemoryStorage = /*#__PURE__*/function () {\n function MemoryStorage() {}\n\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n MemoryStorage.setItem = function setItem(key, value) {\n dataMemory[key] = value;\n return dataMemory[key];\n }\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n ;\n\n MemoryStorage.getItem = function getItem(key) {\n return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n }\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n ;\n\n MemoryStorage.removeItem = function removeItem(key) {\n return delete dataMemory[key];\n }\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n ;\n\n MemoryStorage.clear = function clear() {\n dataMemory = {};\n return dataMemory;\n };\n\n return MemoryStorage;\n}();\n/** @class */\n\n\nvar StorageHelper = /*#__PURE__*/function () {\n /**\n * This is used to get a storage object\n * @returns {object} the storage\n */\n function StorageHelper() {\n try {\n this.storageWindow = window.localStorage;\n this.storageWindow.setItem('aws.cognito.test-ls', 1);\n this.storageWindow.removeItem('aws.cognito.test-ls');\n } catch (exception) {\n this.storageWindow = MemoryStorage;\n }\n }\n /**\n * This is used to return the storage\n * @returns {object} the storage\n */\n\n\n var _proto = StorageHelper.prototype;\n\n _proto.getStorage = function getStorage() {\n return this.storageWindow;\n };\n\n return StorageHelper;\n}();\n\nexport { StorageHelper as default };","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Buffer } from 'buffer';\nimport CryptoJS from 'crypto-js/core';\nimport TypedArrays from 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport BigInteger from './BigInteger';\nimport AuthenticationHelper from './AuthenticationHelper';\nimport CognitoAccessToken from './CognitoAccessToken';\nimport CognitoIdToken from './CognitoIdToken';\nimport CognitoRefreshToken from './CognitoRefreshToken';\nimport CognitoUserSession from './CognitoUserSession';\nimport DateHelper from './DateHelper';\nimport CognitoUserAttribute from './CognitoUserAttribute';\nimport StorageHelper from './StorageHelper';\n/**\n * @callback nodeCallback\n * @template T result\n * @param {*} err The operation failure reason, or null.\n * @param {T} result The operation result.\n */\n\n/**\n * @callback onFailure\n * @param {*} err Failure reason.\n */\n\n/**\n * @callback onSuccess\n * @template T result\n * @param {T} result The operation result.\n */\n\n/**\n * @callback mfaRequired\n * @param {*} details MFA challenge details.\n */\n\n/**\n * @callback customChallenge\n * @param {*} details Custom challenge details.\n */\n\n/**\n * @callback inputVerificationCode\n * @param {*} data Server response.\n */\n\n/**\n * @callback authSuccess\n * @param {CognitoUserSession} session The new session.\n * @param {bool=} userConfirmationNecessary User must be confirmed.\n */\n\nvar isBrowser = typeof navigator !== 'undefined';\nvar userAgent = isBrowser ? navigator.userAgent : 'nodejs';\n/** @class */\n\nvar CognitoUser = /*#__PURE__*/function () {\n /**\n * Constructs a new CognitoUser object\n * @param {object} data Creation options\n * @param {string} data.Username The user's username.\n * @param {CognitoUserPool} data.Pool Pool containing the user.\n * @param {object} data.Storage Optional storage object.\n */\n function CognitoUser(data) {\n if (data == null || data.Username == null || data.Pool == null) {\n throw new Error('Username and Pool information are required.');\n }\n\n this.username = data.Username || '';\n this.pool = data.Pool;\n this.Session = null;\n this.client = data.Pool.client;\n this.signInUserSession = null;\n this.authenticationFlowType = 'USER_SRP_AUTH';\n this.storage = data.Storage || new StorageHelper().getStorage();\n this.keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n this.userDataKey = this.keyPrefix + \".\" + this.username + \".userData\";\n }\n /**\n * Sets the session for this user\n * @param {CognitoUserSession} signInUserSession the session\n * @returns {void}\n */\n\n\n var _proto = CognitoUser.prototype;\n\n _proto.setSignInUserSession = function setSignInUserSession(signInUserSession) {\n this.clearCachedUserData();\n this.signInUserSession = signInUserSession;\n this.cacheTokens();\n }\n /**\n * @returns {CognitoUserSession} the current session for this user\n */\n ;\n\n _proto.getSignInUserSession = function getSignInUserSession() {\n return this.signInUserSession;\n }\n /**\n * @returns {string} the user's username\n */\n ;\n\n _proto.getUsername = function getUsername() {\n return this.username;\n }\n /**\n * @returns {String} the authentication flow type\n */\n ;\n\n _proto.getAuthenticationFlowType = function getAuthenticationFlowType() {\n return this.authenticationFlowType;\n }\n /**\n * sets authentication flow type\n * @param {string} authenticationFlowType New value.\n * @returns {void}\n */\n ;\n\n _proto.setAuthenticationFlowType = function setAuthenticationFlowType(authenticationFlowType) {\n this.authenticationFlowType = authenticationFlowType;\n }\n /**\n * This is used for authenticating the user through the custom authentication flow.\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.initiateAuth = function initiateAuth(authDetails, callback) {\n var _this = this;\n\n var authParameters = authDetails.getAuthParameters();\n authParameters.USERNAME = this.username;\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = data.ChallengeName;\n var challengeParameters = data.ChallengeParameters;\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n _this.Session = data.Session;\n return callback.customChallenge(challengeParameters);\n }\n\n _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n\n _this.cacheTokens();\n\n return callback.onSuccess(_this.signInUserSession);\n });\n }\n /**\n * This is used for authenticating the user.\n * stuff\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {newPasswordRequired} callback.newPasswordRequired new\n * password and any required attributes are required to continue\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUser = function authenticateUser(authDetails, callback) {\n if (this.authenticationFlowType === 'USER_PASSWORD_AUTH') {\n return this.authenticateUserPlainUsernamePassword(authDetails, callback);\n } else if (this.authenticationFlowType === 'USER_SRP_AUTH' || this.authenticationFlowType === 'CUSTOM_AUTH') {\n return this.authenticateUserDefaultAuth(authDetails, callback);\n }\n\n return callback.onFailure(new Error('Authentication flow type is invalid.'));\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * It calls the AuthenticationHelper for SRP related\n * stuff\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {newPasswordRequired} callback.newPasswordRequired new\n * password and any required attributes are required to continue\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserDefaultAuth = function authenticateUserDefaultAuth(authDetails, callback) {\n var _this2 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var dateHelper = new DateHelper();\n var serverBValue;\n var salt;\n var authParameters = {};\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n authParameters.USERNAME = this.username;\n authenticationHelper.getLargeAValue(function (errOnAValue, aValue) {\n // getLargeAValue callback start\n if (errOnAValue) {\n callback.onFailure(errOnAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n\n if (_this2.authenticationFlowType === 'CUSTOM_AUTH') {\n authParameters.CHALLENGE_NAME = 'SRP_A';\n }\n\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: _this2.authenticationFlowType,\n ClientId: _this2.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (_this2.getUserContextData(_this2.username)) {\n jsonReq.UserContextData = _this2.getUserContextData(_this2.username);\n }\n\n _this2.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n _this2.username = challengeParameters.USER_ID_FOR_SRP;\n _this2.userDataKey = _this2.keyPrefix + \".\" + _this2.username + \".userData\";\n serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n salt = new BigInteger(challengeParameters.SALT, 16);\n\n _this2.getCachedDeviceKeyAndPassword();\n\n authenticationHelper.getPasswordAuthenticationKey(_this2.username, authDetails.getPassword(), serverBValue, salt, function (errOnHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errOnHkdf) {\n callback.onFailure(errOnHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this2.pool.getUserPoolId().split('_')[1], 'utf8'), Buffer.from(_this2.username, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\n challengeResponses.USERNAME = _this2.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n\n if (_this2.deviceKey != null) {\n challengeResponses.DEVICE_KEY = _this2.deviceKey;\n }\n\n var respondToAuthChallenge = function respondToAuthChallenge(challenge, challengeCallback) {\n return _this2.client.request('RespondToAuthChallenge', challenge, function (errChallenge, dataChallenge) {\n if (errChallenge && errChallenge.code === 'ResourceNotFoundException' && errChallenge.message.toLowerCase().indexOf('device') !== -1) {\n challengeResponses.DEVICE_KEY = null;\n _this2.deviceKey = null;\n _this2.randomPassword = null;\n _this2.deviceGroupKey = null;\n\n _this2.clearCachedDeviceKeyAndPassword();\n\n return respondToAuthChallenge(challenge, challengeCallback);\n }\n\n return challengeCallback(errChallenge, dataChallenge);\n });\n };\n\n var jsonReqResp = {\n ChallengeName: 'PASSWORD_VERIFIER',\n ClientId: _this2.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session,\n ClientMetadata: clientMetaData\n };\n\n if (_this2.getUserContextData()) {\n jsonReqResp.UserContextData = _this2.getUserContextData();\n }\n\n respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\n }); // getLargeAValue callback end\n\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * @param {AuthenticationDetails} authDetails Contains the authentication data.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserPlainUsernamePassword = function authenticateUserPlainUsernamePassword(authDetails, callback) {\n var _this3 = this;\n\n var authParameters = {};\n authParameters.USERNAME = this.username;\n authParameters.PASSWORD = authDetails.getPassword();\n\n if (!authParameters.PASSWORD) {\n callback.onFailure(new Error('PASSWORD parameter is required'));\n return;\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'USER_PASSWORD_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (this.getUserContextData(this.username)) {\n jsonReq.UserContextData = this.getUserContextData(this.username);\n } // USER_PASSWORD_AUTH happens in a single round-trip: client sends userName and password,\n // Cognito UserPools verifies password and returns tokens.\n\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this3.authenticateUserInternal(authResult, authenticationHelper, callback);\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * @param {object} dataAuthenticate authentication data\n * @param {object} authenticationHelper helper created\n * @param {callback} callback passed on from caller\n * @returns {void}\n */\n ;\n\n _proto.authenticateUserInternal = function authenticateUserInternal(dataAuthenticate, authenticationHelper, callback) {\n var _this4 = this;\n\n var challengeName = dataAuthenticate.ChallengeName;\n var challengeParameters = dataAuthenticate.ChallengeParameters;\n\n if (challengeName === 'SMS_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SELECT_MFA_TYPE') {\n this.Session = dataAuthenticate.Session;\n return callback.selectMFAType(challengeName, challengeParameters);\n }\n\n if (challengeName === 'MFA_SETUP') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaSetup(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.totpRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n this.Session = dataAuthenticate.Session;\n return callback.customChallenge(challengeParameters);\n }\n\n if (challengeName === 'NEW_PASSWORD_REQUIRED') {\n this.Session = dataAuthenticate.Session;\n var userAttributes = null;\n var rawRequiredAttributes = null;\n var requiredAttributes = [];\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n if (challengeParameters) {\n userAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.userAttributes);\n rawRequiredAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.requiredAttributes);\n }\n\n if (rawRequiredAttributes) {\n for (var i = 0; i < rawRequiredAttributes.length; i++) {\n requiredAttributes[i] = rawRequiredAttributes[i].substr(userAttributesPrefix.length);\n }\n }\n\n return callback.newPasswordRequired(userAttributes, requiredAttributes);\n }\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n this.getDeviceResponse(callback);\n return undefined;\n }\n\n this.signInUserSession = this.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n this.challengeName = challengeName;\n this.cacheTokens();\n var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n\n if (newDeviceMetadata == null) {\n return callback.onSuccess(this.signInUserSession);\n }\n\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n _this4.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this4.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n _this4.randomPassword = authenticationHelper.getRandomPassword();\n\n _this4.client.request('ConfirmDevice', {\n DeviceKey: newDeviceMetadata.DeviceKey,\n AccessToken: _this4.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this4.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this4.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this4.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this4.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\n }\n /**\n * This method is user to complete the NEW_PASSWORD_REQUIRED challenge.\n * Pass the new password with any new user attributes to be updated.\n * User attribute keys must be of format userAttributes..\n * @param {string} newPassword new password for this user\n * @param {object} requiredAttributeData map with values for all required attributes\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback, clientMetadata) {\n var _this5 = this;\n\n if (!newPassword) {\n return callback.onFailure(new Error('New password is required.'));\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n var finalUserAttributes = {};\n\n if (requiredAttributeData) {\n Object.keys(requiredAttributeData).forEach(function (key) {\n finalUserAttributes[userAttributesPrefix + key] = requiredAttributeData[key];\n });\n }\n\n finalUserAttributes.NEW_PASSWORD = newPassword;\n finalUserAttributes.USERNAME = this.username;\n var jsonReq = {\n ChallengeName: 'NEW_PASSWORD_REQUIRED',\n ClientId: this.pool.getClientId(),\n ChallengeResponses: finalUserAttributes,\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n return _this5.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined;\n }\n /**\n * This is used to get a session using device authentication. It is called at the end of user\n * authentication\n *\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n * @private\n */\n ;\n\n _proto.getDeviceResponse = function getDeviceResponse(callback, clientMetadata) {\n var _this6 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n var dateHelper = new DateHelper();\n var authParameters = {};\n authParameters.USERNAME = this.username;\n authParameters.DEVICE_KEY = this.deviceKey;\n authenticationHelper.getLargeAValue(function (errAValue, aValue) {\n // getLargeAValue callback start\n if (errAValue) {\n callback.onFailure(errAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n var jsonReq = {\n ChallengeName: 'DEVICE_SRP_AUTH',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: authParameters,\n ClientMetadata: clientMetadata\n };\n\n if (_this6.getUserContextData()) {\n jsonReq.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n var salt = new BigInteger(challengeParameters.SALT, 16);\n authenticationHelper.getPasswordAuthenticationKey(_this6.deviceKey, _this6.randomPassword, serverBValue, salt, function (errHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errHkdf) {\n return callback.onFailure(errHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this6.deviceGroupKey, 'utf8'), Buffer.from(_this6.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\n challengeResponses.USERNAME = _this6.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n challengeResponses.DEVICE_KEY = _this6.deviceKey;\n var jsonReqResp = {\n ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session\n };\n\n if (_this6.getUserContextData()) {\n jsonReqResp.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n _this6.signInUserSession = _this6.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this6.cacheTokens();\n\n return callback.onSuccess(_this6.signInUserSession);\n });\n\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\n }); // getLargeAValue callback end\n\n });\n }\n /**\n * This is used for a certain user to confirm the registration by using a confirmation code\n * @param {string} confirmationCode Code entered by user.\n * @param {bool} forceAliasCreation Allow migrating from an existing email / phone number.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n ConfirmationCode: confirmationCode,\n Username: this.username,\n ForceAliasCreation: forceAliasCreation,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmSignUp', jsonReq, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n }\n /**\n * This is used by the user once he has the responses to a custom challenge\n * @param {string} answerChallenge The custom challenge answer.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge\n * Custom challenge response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback, clientMetadata) {\n var _this7 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: 'CUSTOM_CHALLENGE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this7.authenticateUserInternal(data, authenticationHelper, callback);\n });\n }\n /**\n * This is used by the user once he has an MFA code\n * @param {string} confirmationCode The MFA code entered by the user.\n * @param {object} callback Result callback map.\n * @param {string} mfaType The mfa we are replying to.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType, clientMetadata) {\n var _this8 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.SMS_MFA_CODE = confirmationCode;\n var mfaTypeSelection = mfaType || 'SMS_MFA';\n\n if (mfaTypeSelection === 'SOFTWARE_TOKEN_MFA') {\n challengeResponses.SOFTWARE_TOKEN_MFA_CODE = confirmationCode;\n }\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: mfaTypeSelection,\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, dataAuthenticate) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = dataAuthenticate.ChallengeName;\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n _this8.getDeviceResponse(callback);\n\n return undefined;\n }\n\n _this8.signInUserSession = _this8.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this8.cacheTokens();\n\n if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n return callback.onSuccess(_this8.signInUserSession);\n }\n\n var authenticationHelper = new AuthenticationHelper(_this8.pool.getUserPoolId().split('_')[1]);\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n _this8.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this8.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n _this8.randomPassword = authenticationHelper.getRandomPassword();\n\n _this8.client.request('ConfirmDevice', {\n DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n AccessToken: _this8.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this8.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this8.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this8.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this8.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\n });\n }\n /**\n * This is used by an authenticated user to change the current password\n * @param {string} oldUserPassword The current password.\n * @param {string} newUserPassword The requested new password.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.changePassword = function changePassword(oldUserPassword, newUserPassword, callback, clientMetadata) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('ChangePassword', {\n PreviousPassword: oldUserPassword,\n ProposedPassword: newUserPassword,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @deprecated\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.enableMFA = function enableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n var mfaEnabled = {\n DeliveryMedium: 'SMS',\n AttributeName: 'phone_number'\n };\n mfaOptions.push(mfaEnabled);\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @param {IMfaSettings} smsMfaSettings the sms mfa settings\n * @param {IMFASettings} softwareTokenMfaSettings the software token mfa settings\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.setUserMfaPreference = function setUserMfaPreference(smsMfaSettings, softwareTokenMfaSettings, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('SetUserMFAPreference', {\n SMSMfaSettings: smsMfaSettings,\n SoftwareTokenMfaSettings: softwareTokenMfaSettings,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to disable MFA for itself\n * @deprecated\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.disableMFA = function disableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to delete itself\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.deleteUser = function deleteUser(callback, clientMetadata) {\n var _this9 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n _this9.clearCachedUser();\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n */\n\n /**\n * This is used by an authenticated user to change a list of attributes\n * @param {AttributeArg[]} attributes A list of the new user attributes.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.updateAttributes = function updateAttributes(attributes, callback, clientMetadata) {\n var _this10 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('UpdateUserAttributes', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserAttributes: attributes,\n ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n } // update cached user\n\n\n return _this10.getUserData(function () {\n return callback(null, 'SUCCESS');\n }, {\n bypassCache: true\n });\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to get a list of attributes\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.getUserAttributes = function getUserAttributes(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n var attributeList = [];\n\n for (var i = 0; i < userData.UserAttributes.length; i++) {\n var attribute = {\n Name: userData.UserAttributes[i].Name,\n Value: userData.UserAttributes[i].Value\n };\n var userAttribute = new CognitoUserAttribute(attribute);\n attributeList.push(userAttribute);\n }\n\n return callback(null, attributeList);\n });\n return undefined;\n }\n /**\n * This is used by an authenticated user to get the MFAOptions\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.getMFAOptions = function getMFAOptions(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, userData.MFAOptions);\n });\n return undefined;\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.createGetUserRequest = function createGetUserRequest() {\n return this.client.promisifyRequest('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n });\n }\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.refreshSessionIfPossible = function refreshSessionIfPossible(options) {\n var _this11 = this;\n\n if (options === void 0) {\n options = {};\n }\n\n // best effort, if not possible\n return new Promise(function (resolve) {\n var refresh = _this11.signInUserSession.getRefreshToken();\n\n if (refresh && refresh.getToken()) {\n _this11.refreshSession(refresh, resolve, options.clientMetadata);\n } else {\n resolve();\n }\n });\n }\n /**\n * @typedef {Object} GetUserDataOptions\n * @property {boolean} bypassCache - force getting data from Cognito service\n * @property {Record} clientMetadata - clientMetadata for getSession\n */\n\n /**\n * This is used by an authenticated users to get the userData\n * @param {nodeCallback} callback Called on success or error.\n * @param {GetUserDataOptions} params\n * @returns {void}\n */\n ;\n\n _proto.getUserData = function getUserData(callback, params) {\n var _this12 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.clearCachedUserData();\n return callback(new Error('User is not authenticated'), null);\n }\n\n var userData = this.getUserDataFromCache();\n\n if (!userData) {\n this.fetchUserData().then(function (data) {\n callback(null, data);\n })[\"catch\"](callback);\n return;\n }\n\n if (this.isFetchUserDataAndTokenRequired(params)) {\n this.fetchUserData().then(function (data) {\n return _this12.refreshSessionIfPossible(params).then(function () {\n return data;\n });\n }).then(function (data) {\n return callback(null, data);\n })[\"catch\"](callback);\n return;\n }\n\n try {\n callback(null, JSON.parse(userData));\n return;\n } catch (err) {\n this.clearCachedUserData();\n callback(err, null);\n return;\n }\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.getUserDataFromCache = function getUserDataFromCache() {\n var userData = this.storage.getItem(this.userDataKey);\n return userData;\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.isFetchUserDataAndTokenRequired = function isFetchUserDataAndTokenRequired(params) {\n var _ref = params || {},\n _ref$bypassCache = _ref.bypassCache,\n bypassCache = _ref$bypassCache === void 0 ? false : _ref$bypassCache;\n\n return bypassCache;\n }\n /**\n *\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n */\n ;\n\n _proto.fetchUserData = function fetchUserData() {\n var _this13 = this;\n\n return this.createGetUserRequest().then(function (data) {\n _this13.cacheUserData(data);\n\n return data;\n });\n }\n /**\n * This is used by an authenticated user to delete a list of attributes\n * @param {string[]} attributeList Names of the attributes to delete.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.deleteAttributes = function deleteAttributes(attributeList, callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUserAttributes', {\n UserAttributeNames: attributeList,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used by a user to resend a confirmation code\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.resendConfirmationCode = function resendConfirmationCode(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, result);\n });\n }\n /**\n * @typedef {Object} GetSessionOptions\n * @property {Record} clientMetadata - clientMetadata for getSession\n */\n\n /**\n * This is used to get a session, either from the session object\n * or from the local storage, or by using a refresh token\n *\n * @param {nodeCallback} callback Called on success or error.\n * @param {GetSessionOptions} options\n * @returns {void}\n */\n ;\n\n _proto.getSession = function getSession(callback, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (this.username == null) {\n return callback(new Error('Username is null. Cannot retrieve a new session'), null);\n }\n\n if (this.signInUserSession != null && this.signInUserSession.isValid()) {\n return callback(null, this.signInUserSession);\n }\n\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var idTokenKey = keyPrefix + \".idToken\";\n var accessTokenKey = keyPrefix + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".refreshToken\";\n var clockDriftKey = keyPrefix + \".clockDrift\";\n\n if (this.storage.getItem(idTokenKey)) {\n var idToken = new CognitoIdToken({\n IdToken: this.storage.getItem(idTokenKey)\n });\n var accessToken = new CognitoAccessToken({\n AccessToken: this.storage.getItem(accessTokenKey)\n });\n var refreshToken = new CognitoRefreshToken({\n RefreshToken: this.storage.getItem(refreshTokenKey)\n });\n var clockDrift = parseInt(this.storage.getItem(clockDriftKey), 0) || 0;\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken,\n ClockDrift: clockDrift\n };\n var cachedSession = new CognitoUserSession(sessionData);\n\n if (cachedSession.isValid()) {\n this.signInUserSession = cachedSession;\n return callback(null, this.signInUserSession);\n }\n\n if (!refreshToken.getToken()) {\n return callback(new Error('Cannot retrieve a new session. Please authenticate.'), null);\n }\n\n this.refreshSession(refreshToken, callback, options.clientMetadata);\n } else {\n callback(new Error('Local storage is missing an ID Token, Please authenticate'), null);\n }\n\n return undefined;\n }\n /**\n * This uses the refreshToken to retrieve a new session\n * @param {CognitoRefreshToken} refreshToken A previous session's refresh token.\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.refreshSession = function refreshSession(refreshToken, callback, clientMetadata) {\n var _this14 = this;\n\n var wrappedCallback = this.pool.wrapRefreshSessionCallback ? this.pool.wrapRefreshSessionCallback(callback) : callback;\n var authParameters = {};\n authParameters.REFRESH_TOKEN = refreshToken.getToken();\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n\n if (this.storage.getItem(lastUserKey)) {\n this.username = this.storage.getItem(lastUserKey);\n var deviceKeyKey = keyPrefix + \".\" + this.username + \".deviceKey\";\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n AuthFlow: 'REFRESH_TOKEN_AUTH',\n AuthParameters: authParameters,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n if (err.code === 'NotAuthorizedException') {\n _this14.clearCachedUser();\n }\n\n return wrappedCallback(err, null);\n }\n\n if (authResult) {\n var authenticationResult = authResult.AuthenticationResult;\n\n if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n authenticationResult.RefreshToken = refreshToken.getToken();\n }\n\n _this14.signInUserSession = _this14.getCognitoUserSession(authenticationResult);\n\n _this14.cacheTokens();\n\n return wrappedCallback(null, _this14.signInUserSession);\n }\n\n return undefined;\n });\n }\n /**\n * This is used to save the session tokens to local storage\n * @returns {void}\n */\n ;\n\n _proto.cacheTokens = function cacheTokens() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n this.storage.setItem(idTokenKey, this.signInUserSession.getIdToken().getJwtToken());\n this.storage.setItem(accessTokenKey, this.signInUserSession.getAccessToken().getJwtToken());\n this.storage.setItem(refreshTokenKey, this.signInUserSession.getRefreshToken().getToken());\n this.storage.setItem(clockDriftKey, \"\" + this.signInUserSession.getClockDrift());\n this.storage.setItem(lastUserKey, this.username);\n }\n /**\n * This is to cache user data\n */\n ;\n\n _proto.cacheUserData = function cacheUserData(userData) {\n this.storage.setItem(this.userDataKey, JSON.stringify(userData));\n }\n /**\n * This is to remove cached user data\n */\n ;\n\n _proto.clearCachedUserData = function clearCachedUserData() {\n this.storage.removeItem(this.userDataKey);\n };\n\n _proto.clearCachedUser = function clearCachedUser() {\n this.clearCachedTokens();\n this.clearCachedUserData();\n }\n /**\n * This is used to cache the device key and device group and device password\n * @returns {void}\n */\n ;\n\n _proto.cacheDeviceKeyAndPassword = function cacheDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n this.storage.setItem(deviceKeyKey, this.deviceKey);\n this.storage.setItem(randomPasswordKey, this.randomPassword);\n this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\n }\n /**\n * This is used to get current device key and device group and device password\n * @returns {void}\n */\n ;\n\n _proto.getCachedDeviceKeyAndPassword = function getCachedDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n\n if (this.storage.getItem(deviceKeyKey)) {\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n this.randomPassword = this.storage.getItem(randomPasswordKey);\n this.deviceGroupKey = this.storage.getItem(deviceGroupKeyKey);\n }\n }\n /**\n * This is used to clear the device key info from local storage\n * @returns {void}\n */\n ;\n\n _proto.clearCachedDeviceKeyAndPassword = function clearCachedDeviceKeyAndPassword() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId() + \".\" + this.username;\n var deviceKeyKey = keyPrefix + \".deviceKey\";\n var randomPasswordKey = keyPrefix + \".randomPasswordKey\";\n var deviceGroupKeyKey = keyPrefix + \".deviceGroupKey\";\n this.storage.removeItem(deviceKeyKey);\n this.storage.removeItem(randomPasswordKey);\n this.storage.removeItem(deviceGroupKeyKey);\n }\n /**\n * This is used to clear the session tokens from local storage\n * @returns {void}\n */\n ;\n\n _proto.clearCachedTokens = function clearCachedTokens() {\n var keyPrefix = \"CognitoIdentityServiceProvider.\" + this.pool.getClientId();\n var idTokenKey = keyPrefix + \".\" + this.username + \".idToken\";\n var accessTokenKey = keyPrefix + \".\" + this.username + \".accessToken\";\n var refreshTokenKey = keyPrefix + \".\" + this.username + \".refreshToken\";\n var lastUserKey = keyPrefix + \".LastAuthUser\";\n var clockDriftKey = keyPrefix + \".\" + this.username + \".clockDrift\";\n this.storage.removeItem(idTokenKey);\n this.storage.removeItem(accessTokenKey);\n this.storage.removeItem(refreshTokenKey);\n this.storage.removeItem(lastUserKey);\n this.storage.removeItem(clockDriftKey);\n }\n /**\n * This is used to build a user session from tokens retrieved in the authentication result\n * @param {object} authResult Successful auth response from server.\n * @returns {CognitoUserSession} The new user session.\n * @private\n */\n ;\n\n _proto.getCognitoUserSession = function getCognitoUserSession(authResult) {\n var idToken = new CognitoIdToken(authResult);\n var accessToken = new CognitoAccessToken(authResult);\n var refreshToken = new CognitoRefreshToken(authResult);\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken\n };\n return new CognitoUserSession(sessionData);\n }\n /**\n * This is used to initiate a forgot password request\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode?} callback.inputVerificationCode\n * Optional callback raised instead of onSuccess with response data.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.forgotPassword = function forgotPassword(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ForgotPassword', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess(data);\n });\n }\n /**\n * This is used to confirm a new password using a confirmationCode\n * @param {string} confirmationCode Code entered by user.\n * @param {string} newPassword Confirm new password.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ConfirmationCode: confirmationCode,\n Password: newPassword,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess();\n });\n }\n /**\n * This is used to initiate an attribute confirmation request\n * @param {string} attributeName User attribute that needs confirmation.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode} callback.inputVerificationCode Called on success.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n ;\n\n _proto.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback, clientMetadata) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetUserAttributeVerificationCode', {\n AttributeName: attributeName,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n ClientMetadata: clientMetadata\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess();\n });\n return undefined;\n }\n /**\n * This is used to confirm an attribute using a confirmation code\n * @param {string} attributeName Attribute being confirmed.\n * @param {string} confirmationCode Code entered by user.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.verifyAttribute = function verifyAttribute(attributeName, confirmationCode, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('VerifyUserAttribute', {\n AttributeName: attributeName,\n Code: confirmationCode,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to get the device information using the current device key\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device data.\n * @returns {void}\n */\n ;\n\n _proto.getDevice = function getDevice(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n return undefined;\n }\n /**\n * This is used to forget a specific device\n * @param {string} deviceKey Device key.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.forgetSpecificDevice = function forgetSpecificDevice(deviceKey, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('ForgetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: deviceKey\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to forget the current device\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.forgetDevice = function forgetDevice(callback) {\n var _this15 = this;\n\n this.forgetSpecificDevice(this.deviceKey, {\n onFailure: callback.onFailure,\n onSuccess: function onSuccess(result) {\n _this15.deviceKey = null;\n _this15.deviceGroupKey = null;\n _this15.randomPassword = null;\n\n _this15.clearCachedDeviceKeyAndPassword();\n\n return callback.onSuccess(result);\n }\n });\n }\n /**\n * This is used to set the device status as remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.setDeviceStatusRemembered = function setDeviceStatusRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to set the device status as not remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.setDeviceStatusNotRemembered = function setDeviceStatusNotRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'not_remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used to list all devices for a user\n *\n * @param {int} limit the number of devices returned in a call\n * @param {string | null} paginationToken the pagination token in case any was returned before\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device list.\n * @returns {void}\n */\n ;\n\n _proto.listDevices = function listDevices(limit, paginationToken, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n var requestParams = {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n Limit: limit\n };\n\n if (paginationToken) {\n requestParams.PaginationToken = paginationToken;\n }\n\n this.client.request('ListDevices', requestParams, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n return undefined;\n }\n /**\n * This is used to globally revoke all tokens issued to a user\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n ;\n\n _proto.globalSignOut = function globalSignOut(callback) {\n var _this16 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GlobalSignOut', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this16.clearCachedUser();\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n }\n /**\n * This is used for the user to signOut of the application and clear the cached tokens.\n * @returns {void}\n */\n ;\n\n _proto.signOut = function signOut() {\n this.signInUserSession = null;\n this.clearCachedUser();\n }\n /**\n * This is used by a user trying to select a given MFA\n * @param {string} answerChallenge the mfa the user wants\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.sendMFASelectionAnswer = function sendMFASelectionAnswer(answerChallenge, callback) {\n var _this17 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var jsonReq = {\n ChallengeName: 'SELECT_MFA_TYPE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this17.Session = data.Session;\n\n if (answerChallenge === 'SMS_MFA') {\n return callback.mfaRequired(data.ChallengeName, data.ChallengeParameters);\n }\n\n if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n return callback.totpRequired(data.ChallengeName, data.ChallengeParameters);\n }\n\n return undefined;\n });\n }\n /**\n * This returns the user context data for advanced security feature.\n * @returns {void}\n */\n ;\n\n _proto.getUserContextData = function getUserContextData() {\n var pool = this.pool;\n return pool.getUserContextData(this.username);\n }\n /**\n * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.associateSoftwareToken = function associateSoftwareToken(callback) {\n var _this18 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('AssociateSoftwareToken', {\n Session: this.Session\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this18.Session = data.Session;\n return callback.associateSecretCode(data.SecretCode);\n });\n } else {\n this.client.request('AssociateSoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.associateSecretCode(data.SecretCode);\n });\n }\n }\n /**\n * This is used by an authenticated or a user trying to authenticate to verify a TOTP MFA\n * @param {string} totpCode The MFA code entered by the user.\n * @param {string} friendlyDeviceName The device name we are assigning to the device.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n ;\n\n _proto.verifySoftwareToken = function verifySoftwareToken(totpCode, friendlyDeviceName, callback) {\n var _this19 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('VerifySoftwareToken', {\n Session: this.Session,\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this19.Session = data.Session;\n var challengeResponses = {};\n challengeResponses.USERNAME = _this19.username;\n var jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ClientId: _this19.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: _this19.Session\n };\n\n if (_this19.getUserContextData()) {\n jsonReq.UserContextData = _this19.getUserContextData();\n }\n\n _this19.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n if (errRespond) {\n return callback.onFailure(errRespond);\n }\n\n _this19.signInUserSession = _this19.getCognitoUserSession(dataRespond.AuthenticationResult);\n\n _this19.cacheTokens();\n\n return callback.onSuccess(_this19.signInUserSession);\n });\n\n return undefined;\n });\n } else {\n this.client.request('VerifySoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess(data);\n });\n }\n };\n\n return CognitoUser;\n}();\n\nexport { CognitoUser as default };","// constructor\nfunction UserAgent() {} // public\n\n\nUserAgent.prototype.userAgent = 'aws-amplify/0.1.x js';\nexport var appendToCognitoUserAgent = function appendToCognitoUserAgent(content) {\n if (!content) {\n return;\n }\n\n if (UserAgent.prototype.userAgent && !UserAgent.prototype.userAgent.includes(content)) {\n UserAgent.prototype.userAgent = UserAgent.prototype.userAgent.concat(' ', content);\n }\n\n if (!UserAgent.prototype.userAgent || UserAgent.prototype.userAgent === '') {\n UserAgent.prototype.userAgent = content;\n }\n}; // class for defining the amzn user-agent\n\nexport default UserAgent;","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport 'isomorphic-unfetch';\nimport UserAgent from './UserAgent';\n\nvar CognitoError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(CognitoError, _Error);\n\n function CognitoError(message, code, name, statusCode) {\n var _this;\n\n _this = _Error.call(this, message) || this;\n _this.code = code;\n _this.name = name;\n _this.statusCode = statusCode;\n return _this;\n }\n\n return CognitoError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n/** @class */\n\n\nvar Client = /*#__PURE__*/function () {\n /**\n * Constructs a new AWS Cognito Identity Provider client object\n * @param {string} region AWS region\n * @param {string} endpoint endpoint\n * @param {object} fetchOptions options for fetch API (only credentials is supported)\n */\n function Client(region, endpoint, fetchOptions) {\n this.endpoint = endpoint || \"https://cognito-idp.\" + region + \".amazonaws.com/\";\n\n var _ref = fetchOptions || {},\n credentials = _ref.credentials;\n\n this.fetchOptions = credentials ? {\n credentials: credentials\n } : {};\n }\n /**\n * Makes an unauthenticated request on AWS Cognito Identity Provider API\n * using fetch\n * @param {string} operation API operation\n * @param {object} params Input parameters\n * @returns Promise